aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/jade
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jade')
-rw-r--r--node_modules/jade/.npmignore14
-rw-r--r--node_modules/jade/LICENSE22
-rw-r--r--node_modules/jade/Readme.md1299
-rwxr-xr-xnode_modules/jade/bin/jade168
-rw-r--r--node_modules/jade/index.js4
-rw-r--r--node_modules/jade/jade.js3654
-rw-r--r--node_modules/jade/jade.md510
-rw-r--r--node_modules/jade/jade.min.js2
-rw-r--r--node_modules/jade/lib/compiler.js663
-rw-r--r--node_modules/jade/lib/doctypes.js18
-rw-r--r--node_modules/jade/lib/filters.js96
-rw-r--r--node_modules/jade/lib/inline-tags.js28
-rw-r--r--node_modules/jade/lib/jade.js253
-rw-r--r--node_modules/jade/lib/lexer.js775
-rw-r--r--node_modules/jade/lib/nodes/attrs.js77
-rw-r--r--node_modules/jade/lib/nodes/block-comment.js33
-rw-r--r--node_modules/jade/lib/nodes/block.js122
-rw-r--r--node_modules/jade/lib/nodes/case.js43
-rw-r--r--node_modules/jade/lib/nodes/code.js35
-rw-r--r--node_modules/jade/lib/nodes/comment.js32
-rw-r--r--node_modules/jade/lib/nodes/doctype.js29
-rw-r--r--node_modules/jade/lib/nodes/each.js35
-rw-r--r--node_modules/jade/lib/nodes/filter.js35
-rw-r--r--node_modules/jade/lib/nodes/index.js20
-rw-r--r--node_modules/jade/lib/nodes/literal.js32
-rw-r--r--node_modules/jade/lib/nodes/mixin.js36
-rw-r--r--node_modules/jade/lib/nodes/node.js25
-rw-r--r--node_modules/jade/lib/nodes/tag.js95
-rw-r--r--node_modules/jade/lib/nodes/text.js36
-rw-r--r--node_modules/jade/lib/parser.js715
-rw-r--r--node_modules/jade/lib/runtime.js174
-rw-r--r--node_modules/jade/lib/self-closing.js19
-rw-r--r--node_modules/jade/lib/utils.js68
l---------node_modules/jade/node_modules/.bin/cake1
l---------node_modules/jade/node_modules/.bin/coffee1
-rw-r--r--node_modules/jade/node_modules/coffee-script/.npmignore11
-rw-r--r--node_modules/jade/node_modules/coffee-script/CNAME1
-rw-r--r--node_modules/jade/node_modules/coffee-script/CONTRIBUTING.md9
-rw-r--r--node_modules/jade/node_modules/coffee-script/LICENSE22
-rw-r--r--node_modules/jade/node_modules/coffee-script/README51
-rw-r--r--node_modules/jade/node_modules/coffee-script/Rakefile78
-rwxr-xr-xnode_modules/jade/node_modules/coffee-script/bin/cake7
-rwxr-xr-xnode_modules/jade/node_modules/coffee-script/bin/coffee7
-rw-r--r--node_modules/jade/node_modules/coffee-script/extras/jsl.conf44
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/browser.js92
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/cake.js113
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/coffee-script.js171
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/command.js502
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/grammar.js606
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/helpers.js88
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/index.js11
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/lexer.js788
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/nodes.js2971
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/optparse.js138
-rwxr-xr-xnode_modules/jade/node_modules/coffee-script/lib/coffee-script/parser.js683
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/repl.js276
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/rewriter.js349
-rw-r--r--node_modules/jade/node_modules/coffee-script/lib/coffee-script/scope.js146
-rw-r--r--node_modules/jade/node_modules/coffee-script/package.json50
-rw-r--r--node_modules/jade/node_modules/commander/.npmignore4
-rw-r--r--node_modules/jade/node_modules/commander/.travis.yml4
-rw-r--r--node_modules/jade/node_modules/commander/History.md107
-rw-r--r--node_modules/jade/node_modules/commander/Makefile7
-rw-r--r--node_modules/jade/node_modules/commander/Readme.md262
-rw-r--r--node_modules/jade/node_modules/commander/index.js2
-rw-r--r--node_modules/jade/node_modules/commander/lib/commander.js1026
-rw-r--r--node_modules/jade/node_modules/commander/package.json34
-rw-r--r--node_modules/jade/node_modules/mkdirp/.npmignore2
-rw-r--r--node_modules/jade/node_modules/mkdirp/.travis.yml4
-rw-r--r--node_modules/jade/node_modules/mkdirp/LICENSE21
-rw-r--r--node_modules/jade/node_modules/mkdirp/README.markdown61
-rw-r--r--node_modules/jade/node_modules/mkdirp/examples/pow.js6
-rw-r--r--node_modules/jade/node_modules/mkdirp/index.js82
-rw-r--r--node_modules/jade/node_modules/mkdirp/package.json32
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/chmod.js38
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/clobber.js37
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/mkdirp.js28
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/perm.js32
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/perm_sync.js39
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/race.js41
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/rel.js32
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/return.js25
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/return_sync.js24
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/root.js18
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/sync.js32
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/umask.js28
-rw-r--r--node_modules/jade/node_modules/mkdirp/test/umask_sync.js32
-rw-r--r--node_modules/jade/package.json48
-rw-r--r--node_modules/jade/runtime.js179
-rw-r--r--node_modules/jade/runtime.min.js1
90 files changed, 0 insertions, 18671 deletions
diff --git a/node_modules/jade/.npmignore b/node_modules/jade/.npmignore
deleted file mode 100644
index fdc7b893..00000000
--- a/node_modules/jade/.npmignore
+++ /dev/null
@@ -1,14 +0,0 @@
-test
-support
-benchmarks
-examples
-lib-cov
-coverage.html
-.gitmodules
-.travis.yml
-History.md
-Makefile
-test/
-support/
-benchmarks/
-examples/
diff --git a/node_modules/jade/LICENSE b/node_modules/jade/LICENSE
deleted file mode 100644
index 8ad0e0d3..00000000
--- a/node_modules/jade/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2009-2010 TJ Holowaychuk <[email protected]>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/node_modules/jade/Readme.md b/node_modules/jade/Readme.md
deleted file mode 100644
index 3a40a6b7..00000000
--- a/node_modules/jade/Readme.md
+++ /dev/null
@@ -1,1299 +0,0 @@
- [![Build Status](https://secure.travis-ci.org/visionmedia/jade.png)](http://travis-ci.org/visionmedia/jade)
-
-# Jade - template engine
-
- Jade is a high performance template engine heavily influenced by [Haml](http://haml-lang.com)
- and implemented with JavaScript for [node](http://nodejs.org). For discussion join the [Google Group](http://groups.google.com/group/jadejs).
-
-## Test drive
-
- You can test drive Jade online [here](http://naltatis.github.com/jade-syntax-docs).
-
-## README Contents
-
-- [Features](#a1)
-- [Implementations](#a2)
-- [Installation](#a3)
-- [Browser Support](#a4)
-- [Public API](#a5)
-- [Syntax](#a6)
- - [Line Endings](#a6-1)
- - [Tags](#a6-2)
- - [Tag Text](#a6-3)
- - [Comments](#a6-4)
- - [Block Comments](#a6-5)
- - [Nesting](#a6-6)
- - [Block Expansion](#a6-7)
- - [Case](#a6-8)
- - [Attributes](#a6-9)
- - [HTML](#a6-10)
- - [Doctypes](#a6-11)
-- [Filters](#a7)
-- [Code](#a8)
-- [Iteration](#a9)
-- [Conditionals](#a10)
-- [Template inheritance](#a11)
-- [Block append / prepend](#a12)
-- [Includes](#a13)
-- [Mixins](#a14)
-- [Generated Output](#a15)
-- [Example Makefile](#a16)
-- [jade(1)](#a17)
-- [Tutorials](#a18)
-- [License](#a19)
-
-<a name="a1"/>
-## Features
-
- - client-side support
- - great readability
- - flexible indentation
- - block-expansion
- - mixins
- - static includes
- - attribute interpolation
- - code is escaped by default for security
- - contextual error reporting at compile &amp; run time
- - executable for compiling jade templates via the command line
- - html 5 mode (the default doctype)
- - optional memory caching
- - combine dynamic and static tag classes
- - parse tree manipulation via _filters_
- - template inheritance
- - block append / prepend
- - supports [Express JS](http://expressjs.com) out of the box
- - transparent iteration over objects, arrays, and even non-enumerables via `each`
- - block comments
- - no tag prefix
- - AST filters
- - filters
- - :stylus must have [stylus](http://github.com/LearnBoost/stylus) installed
- - :less must have [less.js](http://github.com/cloudhead/less.js) installed
- - :markdown must have [markdown-js](http://github.com/evilstreak/markdown-js), [node-discount](http://github.com/visionmedia/node-discount), or [marked](http://github.com/chjj/marked) installed
- - :cdata
- - :coffeescript must have [coffee-script](http://jashkenas.github.com/coffee-script/) installed
- - [Emacs Mode](https://github.com/brianc/jade-mode)
- - [Vim Syntax](https://github.com/digitaltoad/vim-jade)
- - [TextMate Bundle](http://github.com/miksago/jade-tmbundle)
- - [Coda/SubEtha syntax Mode](https://github.com/aaronmccall/jade.mode)
- - [Screencasts](http://tjholowaychuk.com/post/1004255394/jade-screencast-template-engine-for-nodejs)
- - [html2jade](https://github.com/donpark/html2jade) converter
-
-<a name="a2"/>
-## Implementations
-
- - [php](http://github.com/everzet/jade.php)
- - [scala](http://scalate.fusesource.org/versions/snapshot/documentation/scaml-reference.html)
- - [ruby](http://github.com/stonean/slim)
- - [python](https://github.com/SyrusAkbary/pyjade)
- - [java](https://github.com/neuland/jade4j)
-
-<a name="a3"/>
-## Installation
-
-via npm:
-
-```bash
-$ npm install jade
-```
-
-<a name="a4"/>
-## Browser Support
-
- To compile jade to a single file compatible for client-side use simply execute:
-
-```bash
-$ make jade.js
-```
-
- Alternatively, if uglifyjs is installed via npm (`npm install uglify-js`) you may execute the following which will create both files. However each release builds these for you.
-
-```bash
-$ make jade.min.js
-```
-
- By default Jade instruments templates with line number statements such as `__.lineno = 3` for debugging purposes. When used in a browser it's useful to minimize this boiler plate, you can do so by passing the option `{ compileDebug: false }`. The following template
-
-```jade
-p Hello #{name}
-```
-
- Can then be as small as the following generated function:
-
-```js
-function anonymous(locals, attrs, escape, rethrow) {
- var buf = [];
- with (locals || {}) {
- var interp;
- buf.push('\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\n</p>');
- }
- return buf.join("");
-}
-```
-
- Through the use of Jade's `./runtime.js` you may utilize these pre-compiled templates on the client-side _without_ Jade itself, all you need is the associated utility functions (in runtime.js), which are then available as `jade.attrs`, `jade.escape` etc. To enable this you should pass `{ client: true }` to `jade.compile()` to tell Jade to reference the helper functions
- via `jade.attrs`, `jade.escape` etc.
-
-```js
-function anonymous(locals, attrs, escape, rethrow) {
- var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;
- var buf = [];
- with (locals || {}) {
- var interp;
- buf.push('\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\n</p>');
- }
- return buf.join("");
-}
-```
-
-<a name="a5"/>
-## Public API
-
-```js
-var jade = require('jade');
-
-// Compile a function
-var fn = jade.compile('string of jade', options);
-fn(locals);
-```
-
-### Options
-
- - `self` Use a `self` namespace to hold the locals _(false by default)_
- - `locals` Local variable object
- - `filename` Used in exceptions, and required when using includes
- - `debug` Outputs tokens and function body generated
- - `compiler` Compiler to replace jade's default
- - `compileDebug` When `false` no debug instrumentation is compiled
- - `pretty` Add pretty-indentation whitespace to output _(false by default)_
-
-<a name="a6"/>
-## Syntax
-
-<a name="a6-1"/>
-### Line Endings
-
-**CRLF** and **CR** are converted to **LF** before parsing.
-
-<a name="a6-2"/>
-### Tags
-
-A tag is simply a leading word:
-
-```jade
-html
-```
-
-for example is converted to `<html></html>`
-
-tags can also have ids:
-
-```jade
-div#container
-```
-
-which would render `<div id="container"></div>`
-
-how about some classes?
-
-```jade
-div.user-details
-```
-
-renders `<div class="user-details"></div>`
-
-multiple classes? _and_ an id? sure:
-
-```jade
-div#foo.bar.baz
-```
-
-renders `<div id="foo" class="bar baz"></div>`
-
-div div div sure is annoying, how about:
-
-```jade
-#foo
-.bar
-```
-
-which is syntactic sugar for what we have already been doing, and outputs:
-
-```html
-<div id="foo"></div><div class="bar"></div>
-```
-
-<a name="a6-3"/>
-### Tag Text
-
-Simply place some content after the tag:
-
-```jade
-p wahoo!
-```
-
-renders `<p>wahoo!</p>`.
-
-well cool, but how about large bodies of text:
-
-```jade
-p
- | foo bar baz
- | rawr rawr
- | super cool
- | go jade go
-```
-
-renders `<p>foo bar baz rawr.....</p>`
-
-interpolation? yup! both types of text can utilize interpolation,
-if we passed `{ name: 'tj', email: '[email protected]' }` to the compiled function we can do the following:
-
-```jade
-#user #{name} &lt;#{email}&gt;
-```
-
-outputs `<div id="user">tj &lt;[email protected]&gt;</div>`
-
-Actually want `#{}` for some reason? escape it!
-
-```jade
-p \#{something}
-```
-
-now we have `<p>#{something}</p>`
-
-We can also utilize the unescaped variant `!{html}`, so the following
-will result in a literal script tag:
-
-```jade
-- var html = "<script></script>"
-| !{html}
-```
-
-Nested tags that also contain text can optionally use a text block:
-
-```jade
-label
- | Username:
- input(name='user[name]')
-```
-
-or immediate tag text:
-
-```jade
-label Username:
- input(name='user[name]')
-```
-
-Tags that accept _only_ text such as `script` and `style` do not
-need the leading `|` character, for example:
-
-```jade
-html
- head
- title Example
- script
- if (foo) {
- bar();
- } else {
- baz();
- }
-```
-
-Once again as an alternative, we may use a trailing `.` to indicate a text block, for example:
-
-```jade
-p.
- foo asdf
- asdf
- asdfasdfaf
- asdf
- asd.
-```
-
-outputs:
-
-```html
-<p>foo asdf
-asdf
- asdfasdfaf
- asdf
-asd.
-</p>
-```
-
-This however differs from a trailing `.` followed by a space, which although is ignored by the Jade parser, tells Jade that this period is a literal:
-
-```jade
-p .
-```
-
-outputs:
-
-```html
-<p>.</p>
-```
-
-It should be noted that text blocks should be doubled escaped. For example if you desire the following output.
-
-```html
-<p>foo\bar</p>
-```
-
-use:
-
-```jade
-p.
- foo\\bar
-```
-
-<a name="a6-4"/>
-### Comments
-
-Single line comments currently look the same as JavaScript comments,
-aka `//` and must be placed on their own line:
-
-```jade
-// just some paragraphs
-p foo
-p bar
-```
-
-would output
-
-```html
-<!-- just some paragraphs -->
-<p>foo</p>
-<p>bar</p>
-```
-
-Jade also supports unbuffered comments, by simply adding a hyphen:
-
-```jade
-//- will not output within markup
-p foo
-p bar
-```
-
-outputting
-
-```html
-<p>foo</p>
-<p>bar</p>
-```
-
-<a name="a6-5"/>
-### Block Comments
-
- A block comment is legal as well:
-
-```jade
-body
- //
- #content
- h1 Example
-```
-
-outputting
-
-```html
-<body>
- <!--
- <div id="content">
- <h1>Example</h1>
- </div>
- -->
-</body>
-```
-
-Jade supports conditional-comments as well, for example:
-
-```jade
-head
- //if lt IE 8
- script(src='/ie-sucks.js')
-```
-
-outputs:
-
-```html
-<body>
- <!--[if lt IE 8]>
- <script src="/ie-sucks.js"></script>
- <![endif]-->
-</body>
-```
-
-<a name="a6-6"/>
-### Nesting
-
- Jade supports nesting to define the tags in a natural way:
-
-```jade
-ul
- li.first
- a(href='#') foo
- li
- a(href='#') bar
- li.last
- a(href='#') baz
-```
-
-<a name="a6-7"/>
-### Block Expansion
-
- Block expansion allows you to create terse single-line nested tags,
- the following example is equivalent to the nesting example above.
-
-```jade
-ul
- li.first: a(href='#') foo
- li: a(href='#') bar
- li.last: a(href='#') baz
-```
-
-<a name="a6-8"/>
-### Case
-
- The case statement takes the following form:
-
-```jade
-html
- body
- friends = 10
- case friends
- when 0
- p you have no friends
- when 1
- p you have a friend
- default
- p you have #{friends} friends
-```
-
- Block expansion may also be used:
-
-```jade
-friends = 5
-
-html
- body
- case friends
- when 0: p you have no friends
- when 1: p you have a friend
- default: p you have #{friends} friends
-```
-
-<a name="a6-9"/>
-### Attributes
-
-Jade currently supports `(` and `)` as attribute delimiters.
-
-```jade
-a(href='/login', title='View login page') Login
-```
-
-When a value is `undefined` or `null` the attribute is _not_ added,
-so this is fine, it will not compile `something="null"`.
-
-```jade
-div(something=null)
-```
-
-Boolean attributes are also supported:
-
-```jade
-input(type="checkbox", checked)
-```
-
-Boolean attributes with code will only output the attribute when `true`:
-
-```jade
-input(type="checkbox", checked=someValue)
-```
-
-Multiple lines work too:
-
-```jade
-input(type='checkbox',
- name='agreement',
- checked)
-```
-
-Multiple lines without the comma work fine:
-
-```jade
-input(type='checkbox'
- name='agreement'
- checked)
-```
-
-Funky whitespace? fine:
-
-```jade
-input(
- type='checkbox'
- name='agreement'
- checked)
-```
-
-Colons work:
-
-```jade
-rss(xmlns:atom="atom")
-```
-
-Suppose we have the `user` local `{ id: 12, name: 'tobi' }`
-and we wish to create an anchor tag with `href` pointing to "/user/12"
-we could use regular javascript concatenation:
-
-```jade
-a(href='/user/' + user.id)= user.name
-```
-
-or we could use jade's interpolation, which I added because everyone
-using Ruby or CoffeeScript seems to think this is legal js..:
-
-```jade
-a(href='/user/#{user.id}')= user.name
-```
-
-The `class` attribute is special-cased when an array is given,
-allowing you to pass an array such as `bodyClasses = ['user', 'authenticated']` directly:
-
-```jade
-body(class=bodyClasses)
-```
-
-<a name="a6-10"/>
-### HTML
-
- Inline html is fine, we can use the pipe syntax to
- write arbitrary text, in this case some html:
-
-```jade
-html
- body
- | <h1>Title</h1>
- | <p>foo bar baz</p>
-```
-
- Or we can use the trailing `.` to indicate to Jade that we
- only want text in this block, allowing us to omit the pipes:
-
-```jade
-html
- body.
- <h1>Title</h1>
- <p>foo bar baz</p>
-```
-
- Both of these examples yield the same result:
-
-```html
-<html><body><h1>Title</h1>
-<p>foo bar baz</p>
-</body></html>
-```
-
- The same rule applies for anywhere you can have text
- in jade, raw html is fine:
-
-```jade
-html
- body
- h1 User <em>#{name}</em>
-```
-
-<a name="a6-11"/>
-### Doctypes
-
-To add a doctype simply use `!!!`, or `doctype` followed by an optional value:
-
-```jade
-!!!
-```
-
-or
-
-```jade
-doctype
-```
-
-Will output the _html 5_ doctype, however:
-
-```jade
-!!! transitional
-```
-
-Will output the _transitional_ doctype.
-
-Doctypes are case-insensitive, so the following are equivalent:
-
-```jade
-doctype Basic
-doctype basic
-```
-
-it's also possible to simply pass a doctype literal:
-
-```jade
-doctype html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN
-```
-
-yielding:
-
-```html
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN>
-```
-
-Below are the doctypes defined by default, which can easily be extended:
-
-```js
-var doctypes = exports.doctypes = {
- '5': '<!DOCTYPE html>',
- 'default': '<!DOCTYPE html>',
- 'xml': '<?xml version="1.0" encoding="utf-8" ?>',
- 'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
- 'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
- 'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
- '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
- 'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
- 'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-};
-```
-
-To alter the default simply change:
-
-```js
-jade.doctypes.default = 'whatever you want';
-```
-
-<a name="a7"/>
-## Filters
-
-Filters are prefixed with `:`, for example `:markdown` and
-pass the following block of text to an arbitrary function for processing. View the _features_
-at the top of this document for available filters.
-
-```jade
-body
- :markdown
- Woah! jade _and_ markdown, very **cool**
- we can even link to [stuff](http://google.com)
-```
-
-Renders:
-
-```html
-<body><p>Woah! jade <em>and</em> markdown, very <strong>cool</strong> we can even link to <a href="http://google.com">stuff</a></p></body>
-```
-
-<a name="a8"/>
-## Code
-
-Jade currently supports three classifications of executable code. The first
-is prefixed by `-`, and is not buffered:
-
-```jade
-- var foo = 'bar';
-```
-
-This can be used for conditionals, or iteration:
-
-```jade
-- for (var key in obj)
- p= obj[key]
-```
-
-Due to Jade's buffering techniques the following is valid as well:
-
-```jade
-- if (foo)
- ul
- li yay
- li foo
- li worked
-- else
- p oh no! didnt work
-```
-
-Hell, even verbose iteration:
-
-```jade
-- if (items.length)
- ul
- - items.forEach(function(item){
- li= item
- - })
-```
-
-Anything you want!
-
-Next up we have _escaped_ buffered code, which is used to
-buffer a return value, which is prefixed by `=`:
-
-```jade
-- var foo = 'bar'
-= foo
-h1= foo
-```
-
-Which outputs `bar<h1>bar</h1>`. Code buffered by `=` is escaped
-by default for security, however to output unescaped return values
-you may use `!=`:
-
-```jade
-p!= aVarContainingMoreHTML
-```
-
- Jade also has designer-friendly variants, making the literal JavaScript
- more expressive and declarative. For example the following assignments
- are equivalent, and the expression is still regular javascript:
-
-```jade
-- var foo = 'foo ' + 'bar'
-foo = 'foo ' + 'bar'
-```
-
- Likewise Jade has first-class `if`, `else if`, `else`, `until`, `while`, `unless` among others, however you must remember that the expressions are still regular javascript:
-
-```jade
-if foo == 'bar'
- ul
- li yay
- li foo
- li worked
-else
- p oh no! didnt work
-```
-
-<a name="a9"/>
-## Iteration
-
- Along with vanilla JavaScript Jade also supports a subset of
- constructs that allow you to create more designer-friendly templates,
- one of these constructs is `each`, taking the form:
-
-```jade
-each VAL[, KEY] in OBJ
-```
-
-An example iterating over an array:
-
-```jade
-- var items = ["one", "two", "three"]
-each item in items
- li= item
-```
-
-outputs:
-
-```html
-<li>one</li>
-<li>two</li>
-<li>three</li>
-```
-
-iterating an array with index:
-
-```jade
-items = ["one", "two", "three"]
-each item, i in items
- li #{item}: #{i}
-```
-
-outputs:
-
-```html
-<li>one: 0</li>
-<li>two: 1</li>
-<li>three: 2</li>
-```
-
-iterating an object's keys and values:
-
-```jade
-obj = { foo: 'bar' }
-each val, key in obj
- li #{key}: #{val}
-```
-
-would output `<li>foo: bar</li>`
-
-Internally Jade converts these statements to regular
-JavaScript loops such as `users.forEach(function(user){`,
-so lexical scope and nesting applies as it would with regular
-JavaScript:
-
-```jade
-each user in users
- each role in user.roles
- li= role
-```
-
- You may also use `for` if you prefer:
-
-```jade
-for user in users
- for role in user.roles
- li= role
-```
-
-<a name="a10"/>
-## Conditionals
-
- Jade conditionals are equivalent to those using the code (`-`) prefix,
- however allow you to ditch parenthesis to become more designer friendly,
- however keep in mind the expression given is _regular_ JavaScript:
-
-```jade
-for user in users
- if user.role == 'admin'
- p #{user.name} is an admin
- else
- p= user.name
-```
-
- is equivalent to the following using vanilla JavaScript literals:
-
-```jade
-for user in users
- - if (user.role == 'admin')
- p #{user.name} is an admin
- - else
- p= user.name
-```
-
- Jade also provides have `unless` which is equivalent to `if (!(expr))`:
-
-```jade
-for user in users
- unless user.isAnonymous
- p
- | Click to view
- a(href='/users/' + user.id)= user.name
-```
-
-<a name="a11"/>
-## Template inheritance
-
- Jade supports template inheritance via the `block` and `extends` keywords. A block is simply a "block" of Jade that may be replaced within a child template, this process is recursive. To activate template inheritance in Express 2.x you must add: `app.set('view options', { layout: false });`.
-
- Jade blocks can provide default content if desired, however optional as shown below by `block scripts`, `block content`, and `block foot`.
-
-```jade
-html
- head
- h1 My Site - #{title}
- block scripts
- script(src='/jquery.js')
- body
- block content
- block foot
- #footer
- p some footer content
-```
-
- Now to extend the layout, simply create a new file and use the `extends` directive as shown below, giving the path (with or without the .jade extension). You may now define one or more blocks that will override the parent block content, note that here the `foot` block is _not_ redefined and will output "some footer content".
-
-```jade
-extends layout
-
-block scripts
- script(src='/jquery.js')
- script(src='/pets.js')
-
-block content
- h1= title
- each pet in pets
- include pet
-```
-
- It's also possible to override a block to provide additional blocks, as shown in the following example where `content` now exposes a `sidebar` and `primary` block for overriding, or the child template could override `content` all together.
-
-```jade
-extends regular-layout
-
-block content
- .sidebar
- block sidebar
- p nothing
- .primary
- block primary
- p nothing
-```
-
-<a name="a12"/>
-## Block append / prepend
-
- Jade allows you to _replace_ (default), _prepend_, or _append_ blocks. Suppose for example you have default scripts in a "head" block that you wish to utilize on _every_ page, you might do this:
-
-```jade
-html
- head
- block head
- script(src='/vendor/jquery.js')
- script(src='/vendor/caustic.js')
- body
- block content
-```
-
- Now suppose you have a page of your application for a JavaScript game, you want some game related scripts as well as these defaults, you can simply `append` the block:
-
-```jade
-extends layout
-
-block append head
- script(src='/vendor/three.js')
- script(src='/game.js')
-```
-
- When using `block append` or `block prepend` the `block` is optional:
-
-```jade
-extends layout
-
-append head
- script(src='/vendor/three.js')
- script(src='/game.js')
-```
-
-<a name="a13"/>
-## Includes
-
- Includes allow you to statically include chunks of Jade,
- or other content like css, or html which lives in separate files. The classical example is including a header and footer. Suppose we have the following directory structure:
-
- ./layout.jade
- ./includes/
- ./head.jade
- ./foot.jade
-
-and the following _layout.jade_:
-
-```jade
-html
- include includes/head
- body
- h1 My Site
- p Welcome to my super amazing site.
- include includes/foot
-```
-
-both includes _includes/head_ and _includes/foot_ are
-read relative to the `filename` option given to _layout.jade_,
-which should be an absolute path to this file, however Express does this for you. Include then parses these files, and injects the AST produced to render what you would expect:
-
-```html
-<html>
- <head>
- <title>My Site</title>
- <script src="/javascripts/jquery.js">
- </script><script src="/javascripts/app.js"></script>
- </head>
- <body>
- <h1>My Site</h1>
- <p>Welcome to my super lame site.</p>
- <div id="footer">
- <p>Copyright>(c) foobar</p>
- </div>
- </body>
-</html>
-```
-
- As mentioned `include` can be used to include other content
- such as html or css. By providing an extension Jade will not
- assume that the file is Jade source and will include it as
- a literal:
-
-```jade
-html
- body
- include content.html
-```
-
- Include directives may also accept a block, in which case the
- the given block will be appended to the _last_ block defined
- in the file. For example if `head.jade` contains:
-
-```jade
-head
- script(src='/jquery.js')
-```
-
- We may append values by providing a block to `include head`
- as shown below, adding the two scripts.
-
-```jade
-html
- include head
- script(src='/foo.js')
- script(src='/bar.js')
- body
- h1 test
-```
-
- You may also `yield` within an included template, allowing you to explicitly mark where the block given to `include` will be placed. Suppose for example you wish to prepend scripts rather than append, you might do the following:
-
-```jade
-head
- yield
- script(src='/jquery.js')
- script(src='/jquery.ui.js')
-```
-
- Since included Jade is parsed and literally merges the AST, lexically scoped variables function as if the included Jade was written right in the same file. This means `include` may be used as sort of partial, for example suppose we have `user.jade` which utilizes a `user` variable.
-
-```jade
-h1= user.name
-p= user.occupation
-```
-
-We could then simply `include user` while iterating users, and since the `user` variable is already defined within the loop the included template will have access to it.
-
-```jade
-users = [{ name: 'Tobi', occupation: 'Ferret' }]
-
-each user in users
- .user
- include user
-```
-
-yielding:
-
-```html
-<div class="user">
- <h1>Tobi</h1>
- <p>Ferret</p>
-</div>
-```
-
-If we wanted to expose a different variable name as `user` since `user.jade` references that name, we could simply define a new variable as shown here with `user = person`:
-
-```jade
-each person in users
- .user
- user = person
- include user
-```
-
-<a name="a14"/>
-## Mixins
-
- Mixins are converted to regular JavaScript functions in
- the compiled template that Jade constructs. Mixins may
- take arguments, though not required:
-
-```jade
-mixin list
- ul
- li foo
- li bar
- li baz
-```
-
- Utilizing a mixin without args looks similar, just without a block:
-
-```jade
-h2 Groceries
-mixin list
-```
-
- Mixins may take one or more arguments as well, the arguments
- are regular javascripts expressions, so for example the following:
-
-```jade
-mixin pets(pets)
- ul.pets
- - each pet in pets
- li= pet
-
-mixin profile(user)
- .user
- h2= user.name
- mixin pets(user.pets)
-```
-
- Would yield something similar to the following html:
-
-```html
-<div class="user">
- <h2>tj</h2>
- <ul class="pets">
- <li>tobi</li>
- <li>loki</li>
- <li>jane</li>
- <li>manny</li>
- </ul>
-</div>
-```
-
-<a name="a15"/>
-## Generated Output
-
- Suppose we have the following Jade:
-
-```jade
-- var title = 'yay'
-h1.title #{title}
-p Just an example
-```
-
- When the `compileDebug` option is not explicitly `false`, Jade
- will compile the function instrumented with `__.lineno = n;`, which
- in the event of an exception is passed to `rethrow()` which constructs
- a useful message relative to the initial Jade input.
-
-```js
-function anonymous(locals) {
- var __ = { lineno: 1, input: "- var title = 'yay'\nh1.title #{title}\np Just an example", filename: "testing/test.js" };
- var rethrow = jade.rethrow;
- try {
- var attrs = jade.attrs, escape = jade.escape;
- var buf = [];
- with (locals || {}) {
- var interp;
- __.lineno = 1;
- var title = 'yay'
- __.lineno = 2;
- buf.push('<h1');
- buf.push(attrs({ "class": ('title') }));
- buf.push('>');
- buf.push('' + escape((interp = title) == null ? '' : interp) + '');
- buf.push('</h1>');
- __.lineno = 3;
- buf.push('<p>');
- buf.push('Just an example');
- buf.push('</p>');
- }
- return buf.join("");
- } catch (err) {
- rethrow(err, __.input, __.filename, __.lineno);
- }
-}
-```
-
-When the `compileDebug` option _is_ explicitly `false`, this instrumentation
-is stripped, which is very helpful for light-weight client-side templates. Combining Jade's options with the `./runtime.js` file in this repo allows you
-to toString() compiled templates and avoid running the entire Jade library on
-the client, increasing performance, and decreasing the amount of JavaScript
-required.
-
-```js
-function anonymous(locals) {
- var attrs = jade.attrs, escape = jade.escape;
- var buf = [];
- with (locals || {}) {
- var interp;
- var title = 'yay'
- buf.push('<h1');
- buf.push(attrs({ "class": ('title') }));
- buf.push('>');
- buf.push('' + escape((interp = title) == null ? '' : interp) + '');
- buf.push('</h1>');
- buf.push('<p>');
- buf.push('Just an example');
- buf.push('</p>');
- }
- return buf.join("");
-}
-```
-
-<a name="a16"/>
-## Example Makefile
-
- Below is an example Makefile used to compile _pages/*.jade_
- into _pages/*.html_ files by simply executing `make`.
-
-```make
-JADE = $(shell find pages/*.jade)
-HTML = $(JADE:.jade=.html)
-
-all: $(HTML)
-
-%.html: %.jade
- jade < $< --path $< > $@
-
-clean:
- rm -f $(HTML)
-
-.PHONY: clean
-```
-
-this can be combined with the `watch(1)` command to produce
-a watcher-like behaviour:
-
-```bash
-$ watch make
-```
-
-<a name="a17"/>
-## jade(1)
-
-```
-
-Usage: jade [options] [dir|file ...]
-
-Options:
-
- -h, --help output usage information
- -V, --version output the version number
- -o, --obj <str> javascript options object
- -O, --out <dir> output the compiled html to <dir>
- -p, --path <path> filename used to resolve includes
- -P, --pretty compile pretty html output
- -c, --client compile for client-side runtime.js
- -D, --no-debug compile without debugging (smaller functions)
-
-Examples:
-
- # translate jade the templates dir
- $ jade templates
-
- # create {foo,bar}.html
- $ jade {foo,bar}.jade
-
- # jade over stdio
- $ jade < my.jade > my.html
-
- # jade over stdio
- $ echo "h1 Jade!" | jade
-
- # foo, bar dirs rendering to /tmp
- $ jade foo bar --out /tmp
-
-```
-
-<a name="a18"/>
-## Tutorials
-
- - cssdeck interactive [Jade syntax tutorial](http://cssdeck.com/labs/learning-the-jade-templating-engine-syntax)
- - cssdeck interactive [Jade logic tutorial](http://cssdeck.com/labs/jade-templating-tutorial-codecast-part-2)
- - in [Japanese](http://blog.craftgear.net/4f501e97c1347ec934000001/title/10%E5%88%86%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Bjade%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)
-
-<a name="a19"/>
-## License
-
-(The MIT License)
-
-Copyright (c) 2009-2010 TJ Holowaychuk &lt;[email protected]&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/jade/bin/jade b/node_modules/jade/bin/jade
deleted file mode 100755
index 8f1c8163..00000000
--- a/node_modules/jade/bin/jade
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
- , program = require('commander')
- , path = require('path')
- , basename = path.basename
- , dirname = path.dirname
- , resolve = path.resolve
- , exists = fs.existsSync || path.existsSync
- , join = path.join
- , mkdirp = require('mkdirp')
- , jade = require('../');
-
-// jade options
-
-var options = {};
-
-// options
-
-program
- .version(jade.version)
- .usage('[options] [dir|file ...]')
- .option('-o, --obj <str>', 'javascript options object')
- .option('-O, --out <dir>', 'output the compiled html to <dir>')
- .option('-p, --path <path>', 'filename used to resolve includes')
- .option('-P, --pretty', 'compile pretty html output')
- .option('-c, --client', 'compile function for client-side runtime.js')
- .option('-D, --no-debug', 'compile without debugging (smaller functions)')
- .option('-w, --watch', 'watch files for changes and automatically re-render')
-
-program.on('--help', function(){
- console.log(' Examples:');
- console.log('');
- console.log(' # translate jade the templates dir');
- console.log(' $ jade templates');
- console.log('');
- console.log(' # create {foo,bar}.html');
- console.log(' $ jade {foo,bar}.jade');
- console.log('');
- console.log(' # jade over stdio');
- console.log(' $ jade < my.jade > my.html');
- console.log('');
- console.log(' # jade over stdio');
- console.log(' $ echo "h1 Jade!" | jade');
- console.log('');
- console.log(' # foo, bar dirs rendering to /tmp');
- console.log(' $ jade foo bar --out /tmp ');
- console.log('');
-});
-
-program.parse(process.argv);
-
-// options given, parse them
-
-if (program.obj) {
- if (exists(program.obj)) {
- options = JSON.parse(fs.readFileSync(program.obj));
- } else {
- options = eval('(' + program.obj + ')');
- }
-}
-
-// --filename
-
-if (program.path) options.filename = program.path;
-
-// --no-debug
-
-options.compileDebug = program.debug;
-
-// --client
-
-options.client = program.client;
-
-// --pretty
-
-options.pretty = program.pretty;
-
-// --watch
-
-options.watch = program.watch;
-
-// left-over args are file paths
-
-var files = program.args;
-
-// compile files
-
-if (files.length) {
- console.log();
- files.forEach(renderFile);
- if (options.watch) {
- files.forEach(function (file) {
- fs.watchFile(file, {interval: 100}, function (curr, prev) {
- if (curr.mtime > prev.mtime) renderFile(file);
- });
- });
- }
- process.on('exit', function () {
- console.log();
- });
-// stdio
-} else {
- stdin();
-}
-
-/**
- * Compile from stdin.
- */
-
-function stdin() {
- var buf = '';
- process.stdin.setEncoding('utf8');
- process.stdin.on('data', function(chunk){ buf += chunk; });
- process.stdin.on('end', function(){
- var fn = jade.compile(buf, options);
- var output = options.client
- ? fn.toString()
- : fn(options);
- process.stdout.write(output);
- }).resume();
-}
-
-/**
- * Process the given path, compiling the jade files found.
- * Always walk the subdirectories.
- */
-
-function renderFile(path) {
- var re = /\.jade$/;
- fs.lstat(path, function(err, stat) {
- if (err) throw err;
- // Found jade file
- if (stat.isFile() && re.test(path)) {
- fs.readFile(path, 'utf8', function(err, str){
- if (err) throw err;
- options.filename = path;
- var fn = jade.compile(str, options);
- var extname = options.client ? '.js' : '.html';
- path = path.replace(re, extname);
- if (program.out) path = join(program.out, basename(path));
- var dir = resolve(dirname(path));
- mkdirp(dir, 0755, function(err){
- if (err) throw err;
- var output = options.client
- ? fn.toString()
- : fn(options);
- fs.writeFile(path, output, function(err){
- if (err) throw err;
- console.log(' \033[90mrendered \033[36m%s\033[0m', path);
- });
- });
- });
- // Found directory
- } else if (stat.isDirectory()) {
- fs.readdir(path, function(err, files) {
- if (err) throw err;
- files.map(function(filename) {
- return path + '/' + filename;
- }).forEach(renderFile);
- });
- }
- });
-}
diff --git a/node_modules/jade/index.js b/node_modules/jade/index.js
deleted file mode 100644
index 8ad059f7..00000000
--- a/node_modules/jade/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-
-module.exports = process.env.JADE_COV
- ? require('./lib-cov/jade')
- : require('./lib/jade'); \ No newline at end of file
diff --git a/node_modules/jade/jade.js b/node_modules/jade/jade.js
deleted file mode 100644
index ad22ec3a..00000000
--- a/node_modules/jade/jade.js
+++ /dev/null
@@ -1,3654 +0,0 @@
-(function() {
-
-// CommonJS require()
-
-function require(p){
- var path = require.resolve(p)
- , mod = require.modules[path];
- if (!mod) throw new Error('failed to require "' + p + '"');
- if (!mod.exports) {
- mod.exports = {};
- mod.call(mod.exports, mod, mod.exports, require.relative(path));
- }
- return mod.exports;
- }
-
-require.modules = {};
-
-require.resolve = function (path){
- var orig = path
- , reg = path + '.js'
- , index = path + '/index.js';
- return require.modules[reg] && reg
- || require.modules[index] && index
- || orig;
- };
-
-require.register = function (path, fn){
- require.modules[path] = fn;
- };
-
-require.relative = function (parent) {
- return function(p){
- if ('.' != p.charAt(0)) return require(p);
-
- var path = parent.split('/')
- , segs = p.split('/');
- path.pop();
-
- for (var i = 0; i < segs.length; i++) {
- var seg = segs[i];
- if ('..' == seg) path.pop();
- else if ('.' != seg) path.push(seg);
- }
-
- return require(path.join('/'));
- };
- };
-
-
-require.register("compiler.js", function(module, exports, require){
-
-/*!
- * Jade - Compiler
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('./nodes')
- , filters = require('./filters')
- , doctypes = require('./doctypes')
- , selfClosing = require('./self-closing')
- , runtime = require('./runtime')
- , utils = require('./utils');
-
-
- if (!Object.keys) {
- Object.keys = function(obj){
- var arr = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr.push(key);
- }
- }
- return arr;
- }
- }
-
- if (!String.prototype.trimLeft) {
- String.prototype.trimLeft = function(){
- return this.replace(/^\s+/, '');
- }
- }
-
-
-
-/**
- * Initialize `Compiler` with the given `node`.
- *
- * @param {Node} node
- * @param {Object} options
- * @api public
- */
-
-var Compiler = module.exports = function Compiler(node, options) {
- this.options = options = options || {};
- this.node = node;
- this.hasCompiledDoctype = false;
- this.hasCompiledTag = false;
- this.pp = options.pretty || false;
- this.debug = false !== options.compileDebug;
- this.indents = 0;
- this.parentIndents = 0;
- if (options.doctype) this.setDoctype(options.doctype);
-};
-
-/**
- * Compiler prototype.
- */
-
-Compiler.prototype = {
-
- /**
- * Compile parse tree to JavaScript.
- *
- * @api public
- */
-
- compile: function(){
- this.buf = ['var interp;'];
- if (this.pp) this.buf.push("var __indent = [];");
- this.lastBufferedIdx = -1;
- this.visit(this.node);
- return this.buf.join('\n');
- },
-
- /**
- * Sets the default doctype `name`. Sets terse mode to `true` when
- * html 5 is used, causing self-closing tags to end with ">" vs "/>",
- * and boolean attributes are not mirrored.
- *
- * @param {string} name
- * @api public
- */
-
- setDoctype: function(name){
- name = (name && name.toLowerCase()) || 'default';
- this.doctype = doctypes[name] || '<!DOCTYPE ' + name + '>';
- this.terse = this.doctype.toLowerCase() == '<!doctype html>';
- this.xml = 0 == this.doctype.indexOf('<?xml');
- },
-
- /**
- * Buffer the given `str` optionally escaped.
- *
- * @param {String} str
- * @param {Boolean} esc
- * @api public
- */
-
- buffer: function(str, esc){
- if (esc) str = utils.escape(str);
-
- if (this.lastBufferedIdx == this.buf.length) {
- this.lastBuffered += str;
- this.buf[this.lastBufferedIdx - 1] = "buf.push('" + this.lastBuffered + "');"
- } else {
- this.buf.push("buf.push('" + str + "');");
- this.lastBuffered = str;
- this.lastBufferedIdx = this.buf.length;
- }
- },
-
- /**
- * Buffer an indent based on the current `indent`
- * property and an additional `offset`.
- *
- * @param {Number} offset
- * @param {Boolean} newline
- * @api public
- */
-
- prettyIndent: function(offset, newline){
- offset = offset || 0;
- newline = newline ? '\\n' : '';
- this.buffer(newline + Array(this.indents + offset).join(' '));
- if (this.parentIndents)
- this.buf.push("buf.push.apply(buf, __indent);");
- },
-
- /**
- * Visit `node`.
- *
- * @param {Node} node
- * @api public
- */
-
- visit: function(node){
- var debug = this.debug;
-
- if (debug) {
- this.buf.push('__jade.unshift({ lineno: ' + node.line
- + ', filename: ' + (node.filename
- ? JSON.stringify(node.filename)
- : '__jade[0].filename')
- + ' });');
- }
-
- // Massive hack to fix our context
- // stack for - else[ if] etc
- if (false === node.debug && this.debug) {
- this.buf.pop();
- this.buf.pop();
- }
-
- this.visitNode(node);
-
- if (debug) this.buf.push('__jade.shift();');
- },
-
- /**
- * Visit `node`.
- *
- * @param {Node} node
- * @api public
- */
-
- visitNode: function(node){
- var name = node.constructor.name
- || node.constructor.toString().match(/function ([^(\s]+)()/)[1];
- return this['visit' + name](node);
- },
-
- /**
- * Visit case `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitCase: function(node){
- var _ = this.withinCase;
- this.withinCase = true;
- this.buf.push('switch (' + node.expr + '){');
- this.visit(node.block);
- this.buf.push('}');
- this.withinCase = _;
- },
-
- /**
- * Visit when `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitWhen: function(node){
- if ('default' == node.expr) {
- this.buf.push('default:');
- } else {
- this.buf.push('case ' + node.expr + ':');
- }
- this.visit(node.block);
- this.buf.push(' break;');
- },
-
- /**
- * Visit literal `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitLiteral: function(node){
- var str = node.str.replace(/\n/g, '\\\\n');
- this.buffer(str);
- },
-
- /**
- * Visit all nodes in `block`.
- *
- * @param {Block} block
- * @api public
- */
-
- visitBlock: function(block){
- var len = block.nodes.length
- , escape = this.escape
- , pp = this.pp
-
- // Block keyword has a special meaning in mixins
- if (this.parentIndents && block.mode) {
- if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');")
- this.buf.push('block && block();');
- if (pp) this.buf.push("__indent.pop();")
- return;
- }
-
- // Pretty print multi-line text
- if (pp && len > 1 && !escape && block.nodes[0].isText && block.nodes[1].isText)
- this.prettyIndent(1, true);
-
- for (var i = 0; i < len; ++i) {
- // Pretty print text
- if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText)
- this.prettyIndent(1, false);
-
- this.visit(block.nodes[i]);
- // Multiple text nodes are separated by newlines
- if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText)
- this.buffer('\\n');
- }
- },
-
- /**
- * Visit `doctype`. Sets terse mode to `true` when html 5
- * is used, causing self-closing tags to end with ">" vs "/>",
- * and boolean attributes are not mirrored.
- *
- * @param {Doctype} doctype
- * @api public
- */
-
- visitDoctype: function(doctype){
- if (doctype && (doctype.val || !this.doctype)) {
- this.setDoctype(doctype.val || 'default');
- }
-
- if (this.doctype) this.buffer(this.doctype);
- this.hasCompiledDoctype = true;
- },
-
- /**
- * Visit `mixin`, generating a function that
- * may be called within the template.
- *
- * @param {Mixin} mixin
- * @api public
- */
-
- visitMixin: function(mixin){
- var name = mixin.name.replace(/-/g, '_') + '_mixin'
- , args = mixin.args || ''
- , block = mixin.block
- , attrs = mixin.attrs
- , pp = this.pp;
-
- if (mixin.call) {
- if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');")
- if (block || attrs.length) {
-
- this.buf.push(name + '.call({');
-
- if (block) {
- this.buf.push('block: function(){');
-
- // Render block with no indents, dynamically added when rendered
- this.parentIndents++;
- var _indents = this.indents;
- this.indents = 0;
- this.visit(mixin.block);
- this.indents = _indents;
- this.parentIndents--;
-
- if (attrs.length) {
- this.buf.push('},');
- } else {
- this.buf.push('}');
- }
- }
-
- if (attrs.length) {
- var val = this.attrs(attrs);
- if (val.inherits) {
- this.buf.push('attributes: merge({' + val.buf
- + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)');
- } else {
- this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped);
- }
- }
-
- if (args) {
- this.buf.push('}, ' + args + ');');
- } else {
- this.buf.push('});');
- }
-
- } else {
- this.buf.push(name + '(' + args + ');');
- }
- if (pp) this.buf.push("__indent.pop();")
- } else {
- this.buf.push('var ' + name + ' = function(' + args + '){');
- this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};');
- this.parentIndents++;
- this.visit(block);
- this.parentIndents--;
- this.buf.push('};');
- }
- },
-
- /**
- * Visit `tag` buffering tag markup, generating
- * attributes, visiting the `tag`'s code and block.
- *
- * @param {Tag} tag
- * @api public
- */
-
- visitTag: function(tag){
- this.indents++;
- var name = tag.name
- , pp = this.pp;
-
- if (tag.buffer) name = "' + (" + name + ") + '";
-
- if (!this.hasCompiledTag) {
- if (!this.hasCompiledDoctype && 'html' == name) {
- this.visitDoctype();
- }
- this.hasCompiledTag = true;
- }
-
- // pretty print
- if (pp && !tag.isInline())
- this.prettyIndent(0, true);
-
- if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) {
- this.buffer('<' + name);
- this.visitAttributes(tag.attrs);
- this.terse
- ? this.buffer('>')
- : this.buffer('/>');
- } else {
- // Optimize attributes buffering
- if (tag.attrs.length) {
- this.buffer('<' + name);
- if (tag.attrs.length) this.visitAttributes(tag.attrs);
- this.buffer('>');
- } else {
- this.buffer('<' + name + '>');
- }
- if (tag.code) this.visitCode(tag.code);
- this.escape = 'pre' == tag.name;
- this.visit(tag.block);
-
- // pretty print
- if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline())
- this.prettyIndent(0, true);
-
- this.buffer('</' + name + '>');
- }
- this.indents--;
- },
-
- /**
- * Visit `filter`, throwing when the filter does not exist.
- *
- * @param {Filter} filter
- * @api public
- */
-
- visitFilter: function(filter){
- var fn = filters[filter.name];
-
- // unknown filter
- if (!fn) {
- if (filter.isASTFilter) {
- throw new Error('unknown ast filter "' + filter.name + ':"');
- } else {
- throw new Error('unknown filter ":' + filter.name + '"');
- }
- }
-
- if (filter.isASTFilter) {
- this.buf.push(fn(filter.block, this, filter.attrs));
- } else {
- var text = filter.block.nodes.map(function(node){ return node.val }).join('\n');
- filter.attrs = filter.attrs || {};
- filter.attrs.filename = this.options.filename;
- this.buffer(utils.text(fn(text, filter.attrs)));
- }
- },
-
- /**
- * Visit `text` node.
- *
- * @param {Text} text
- * @api public
- */
-
- visitText: function(text){
- text = utils.text(text.val.replace(/\\/g, '_SLASH_'));
- if (this.escape) text = escape(text);
- text = text.replace(/_SLASH_/g, '\\\\');
- this.buffer(text);
- },
-
- /**
- * Visit a `comment`, only buffering when the buffer flag is set.
- *
- * @param {Comment} comment
- * @api public
- */
-
- visitComment: function(comment){
- if (!comment.buffer) return;
- if (this.pp) this.prettyIndent(1, true);
- this.buffer('<!--' + utils.escape(comment.val) + '-->');
- },
-
- /**
- * Visit a `BlockComment`.
- *
- * @param {Comment} comment
- * @api public
- */
-
- visitBlockComment: function(comment){
- if (!comment.buffer) return;
- if (0 == comment.val.trim().indexOf('if')) {
- this.buffer('<!--[' + comment.val.trim() + ']>');
- this.visit(comment.block);
- this.buffer('<![endif]-->');
- } else {
- this.buffer('<!--' + comment.val);
- this.visit(comment.block);
- this.buffer('-->');
- }
- },
-
- /**
- * Visit `code`, respecting buffer / escape flags.
- * If the code is followed by a block, wrap it in
- * a self-calling function.
- *
- * @param {Code} code
- * @api public
- */
-
- visitCode: function(code){
- // Wrap code blocks with {}.
- // we only wrap unbuffered code blocks ATM
- // since they are usually flow control
-
- // Buffer code
- if (code.buffer) {
- var val = code.val.trimLeft();
- this.buf.push('var __val__ = ' + val);
- val = 'null == __val__ ? "" : __val__';
- if (code.escape) val = 'escape(' + val + ')';
- this.buf.push("buf.push(" + val + ");");
- } else {
- this.buf.push(code.val);
- }
-
- // Block support
- if (code.block) {
- if (!code.buffer) this.buf.push('{');
- this.visit(code.block);
- if (!code.buffer) this.buf.push('}');
- }
- },
-
- /**
- * Visit `each` block.
- *
- * @param {Each} each
- * @api public
- */
-
- visitEach: function(each){
- this.buf.push(''
- + '// iterate ' + each.obj + '\n'
- + ';(function(){\n'
- + ' if (\'number\' == typeof ' + each.obj + '.length) {\n');
-
- if (each.alternative) {
- this.buf.push(' if (' + each.obj + '.length) {');
- }
-
- this.buf.push(''
- + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n'
- + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
- this.visit(each.block);
-
- this.buf.push(' }\n');
-
- if (each.alternative) {
- this.buf.push(' } else {');
- this.visit(each.alternative);
- this.buf.push(' }');
- }
-
- this.buf.push(''
- + ' } else {\n'
- + ' var $$l = 0;\n'
- + ' for (var ' + each.key + ' in ' + each.obj + ') {\n'
- + ' $$l++;'
- + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){'
- + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
- this.visit(each.block);
-
- this.buf.push(' }\n');
-
- this.buf.push(' }\n');
- if (each.alternative) {
- this.buf.push(' if ($$l === 0) {');
- this.visit(each.alternative);
- this.buf.push(' }');
- }
- this.buf.push(' }\n}).call(this);\n');
- },
-
- /**
- * Visit `attrs`.
- *
- * @param {Array} attrs
- * @api public
- */
-
- visitAttributes: function(attrs){
- var val = this.attrs(attrs);
- if (val.inherits) {
- this.buf.push("buf.push(attrs(merge({ " + val.buf +
- " }, attributes), merge(" + val.escaped + ", escaped, true)));");
- } else if (val.constant) {
- eval('var buf={' + val.buf + '};');
- this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true);
- } else {
- this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));");
- }
- },
-
- /**
- * Compile attributes.
- */
-
- attrs: function(attrs){
- var buf = []
- , classes = []
- , escaped = {}
- , constant = attrs.every(function(attr){ return isConstant(attr.val) })
- , inherits = false;
-
- if (this.terse) buf.push('terse: true');
-
- attrs.forEach(function(attr){
- if (attr.name == 'attributes') return inherits = true;
- escaped[attr.name] = attr.escaped;
- if (attr.name == 'class') {
- classes.push('(' + attr.val + ')');
- } else {
- var pair = "'" + attr.name + "':(" + attr.val + ')';
- buf.push(pair);
- }
- });
-
- if (classes.length) {
- classes = classes.join(" + ' ' + ");
- buf.push("class: " + classes);
- }
-
- return {
- buf: buf.join(', ').replace('class:', '"class":'),
- escaped: JSON.stringify(escaped),
- inherits: inherits,
- constant: constant
- };
- }
-};
-
-/**
- * Check if expression can be evaluated to a constant
- *
- * @param {String} expression
- * @return {Boolean}
- * @api private
- */
-
-function isConstant(val){
- // Check strings/literals
- if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))
- return true;
-
- // Check numbers
- if (!isNaN(Number(val)))
- return true;
-
- // Check arrays
- var matches;
- if (matches = /^ *\[(.*)\] *$/.exec(val))
- return matches[1].split(',').every(isConstant);
-
- return false;
-}
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-function escape(html){
- return String(html)
- .replace(/&(?!\w+;)/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/"/g, '&quot;');
-}
-
-}); // module: compiler.js
-
-require.register("doctypes.js", function(module, exports, require){
-
-/*!
- * Jade - doctypes
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = {
- '5': '<!DOCTYPE html>'
- , 'default': '<!DOCTYPE html>'
- , 'xml': '<?xml version="1.0" encoding="utf-8" ?>'
- , 'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
- , 'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
- , 'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
- , '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
- , 'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
- , 'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-};
-}); // module: doctypes.js
-
-require.register("filters.js", function(module, exports, require){
-
-/*!
- * Jade - filters
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = {
-
- /**
- * Wrap text with CDATA block.
- */
-
- cdata: function(str){
- return '<![CDATA[\\n' + str + '\\n]]>';
- },
-
- /**
- * Transform sass to css, wrapped in style tags.
- */
-
- sass: function(str){
- str = str.replace(/\\n/g, '\n');
- var sass = require('sass').render(str).replace(/\n/g, '\\n');
- return '<style type="text/css">' + sass + '</style>';
- },
-
- /**
- * Transform stylus to css, wrapped in style tags.
- */
-
- stylus: function(str, options){
- var ret;
- str = str.replace(/\\n/g, '\n');
- var stylus = require('stylus');
- stylus(str, options).render(function(err, css){
- if (err) throw err;
- ret = css.replace(/\n/g, '\\n');
- });
- return '<style type="text/css">' + ret + '</style>';
- },
-
- /**
- * Transform less to css, wrapped in style tags.
- */
-
- less: function(str){
- var ret;
- str = str.replace(/\\n/g, '\n');
- require('less').render(str, function(err, css){
- if (err) throw err;
- ret = '<style type="text/css">' + css.replace(/\n/g, '\\n') + '</style>';
- });
- return ret;
- },
-
- /**
- * Transform markdown to html.
- */
-
- markdown: function(str){
- var md;
-
- // support markdown / discount
- try {
- md = require('markdown');
- } catch (err){
- try {
- md = require('discount');
- } catch (err) {
- try {
- md = require('markdown-js');
- } catch (err) {
- try {
- md = require('marked');
- } catch (err) {
- throw new
- Error('Cannot find markdown library, install markdown, discount, or marked.');
- }
- }
- }
- }
-
- str = str.replace(/\\n/g, '\n');
- return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'&#39;');
- },
-
- /**
- * Transform coffeescript to javascript.
- */
-
- coffeescript: function(str){
- var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n');
- return '<script type="text/javascript">\\n' + js + '</script>';
- }
-};
-
-}); // module: filters.js
-
-require.register("inline-tags.js", function(module, exports, require){
-
-/*!
- * Jade - inline tags
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = [
- 'a'
- , 'abbr'
- , 'acronym'
- , 'b'
- , 'br'
- , 'code'
- , 'em'
- , 'font'
- , 'i'
- , 'img'
- , 'ins'
- , 'kbd'
- , 'map'
- , 'samp'
- , 'small'
- , 'span'
- , 'strong'
- , 'sub'
- , 'sup'
-];
-}); // module: inline-tags.js
-
-require.register("jade.js", function(module, exports, require){
-/*!
- * Jade
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Parser = require('./parser')
- , Lexer = require('./lexer')
- , Compiler = require('./compiler')
- , runtime = require('./runtime')
-
-/**
- * Library version.
- */
-
-exports.version = '0.27.6';
-
-/**
- * Expose self closing tags.
- */
-
-exports.selfClosing = require('./self-closing');
-
-/**
- * Default supported doctypes.
- */
-
-exports.doctypes = require('./doctypes');
-
-/**
- * Text filters.
- */
-
-exports.filters = require('./filters');
-
-/**
- * Utilities.
- */
-
-exports.utils = require('./utils');
-
-/**
- * Expose `Compiler`.
- */
-
-exports.Compiler = Compiler;
-
-/**
- * Expose `Parser`.
- */
-
-exports.Parser = Parser;
-
-/**
- * Expose `Lexer`.
- */
-
-exports.Lexer = Lexer;
-
-/**
- * Nodes.
- */
-
-exports.nodes = require('./nodes');
-
-/**
- * Jade runtime helpers.
- */
-
-exports.runtime = runtime;
-
-/**
- * Template function cache.
- */
-
-exports.cache = {};
-
-/**
- * Parse the given `str` of jade and return a function body.
- *
- * @param {String} str
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function parse(str, options){
- try {
- // Parse
- var parser = new Parser(str, options.filename, options);
-
- // Compile
- var compiler = new (options.compiler || Compiler)(parser.parse(), options)
- , js = compiler.compile();
-
- // Debug compiler
- if (options.debug) {
- console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' '));
- }
-
- return ''
- + 'var buf = [];\n'
- + (options.self
- ? 'var self = locals || {};\n' + js
- : 'with (locals || {}) {\n' + js + '\n}\n')
- + 'return buf.join("");';
- } catch (err) {
- parser = parser.context();
- runtime.rethrow(err, parser.filename, parser.lexer.lineno);
- }
-}
-
-/**
- * Strip any UTF-8 BOM off of the start of `str`, if it exists.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-function stripBOM(str){
- return 0xFEFF == str.charCodeAt(0)
- ? str.substring(1)
- : str;
-}
-
-/**
- * Compile a `Function` representation of the given jade `str`.
- *
- * Options:
- *
- * - `compileDebug` when `false` debugging code is stripped from the compiled template
- * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()`
- * for use with the Jade client-side runtime.js
- *
- * @param {String} str
- * @param {Options} options
- * @return {Function}
- * @api public
- */
-
-exports.compile = function(str, options){
- var options = options || {}
- , client = options.client
- , filename = options.filename
- ? JSON.stringify(options.filename)
- : 'undefined'
- , fn;
-
- str = stripBOM(String(str));
-
- if (options.compileDebug !== false) {
- fn = [
- 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];'
- , 'try {'
- , parse(str, options)
- , '} catch (err) {'
- , ' rethrow(err, __jade[0].filename, __jade[0].lineno);'
- , '}'
- ].join('\n');
- } else {
- fn = parse(str, options);
- }
-
- if (client) {
- fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn;
- }
-
- fn = new Function('locals, attrs, escape, rethrow, merge', fn);
-
- if (client) return fn;
-
- return function(locals){
- return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge);
- };
-};
-
-/**
- * Render the given `str` of jade and invoke
- * the callback `fn(err, str)`.
- *
- * Options:
- *
- * - `cache` enable template caching
- * - `filename` filename required for `include` / `extends` and caching
- *
- * @param {String} str
- * @param {Object|Function} options or fn
- * @param {Function} fn
- * @api public
- */
-
-exports.render = function(str, options, fn){
- // swap args
- if ('function' == typeof options) {
- fn = options, options = {};
- }
-
- // cache requires .filename
- if (options.cache && !options.filename) {
- return fn(new Error('the "filename" option is required for caching'));
- }
-
- try {
- var path = options.filename;
- var tmpl = options.cache
- ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options))
- : exports.compile(str, options);
- fn(null, tmpl(options));
- } catch (err) {
- fn(err);
- }
-};
-
-/**
- * Render a Jade file at the given `path` and callback `fn(err, str)`.
- *
- * @param {String} path
- * @param {Object|Function} options or callback
- * @param {Function} fn
- * @api public
- */
-
-exports.renderFile = function(path, options, fn){
- var key = path + ':string';
-
- if ('function' == typeof options) {
- fn = options, options = {};
- }
-
- try {
- options.filename = path;
- var str = options.cache
- ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8'))
- : fs.readFileSync(path, 'utf8');
- exports.render(str, options, fn);
- } catch (err) {
- fn(err);
- }
-};
-
-/**
- * Express support.
- */
-
-exports.__express = exports.renderFile;
-
-}); // module: jade.js
-
-require.register("lexer.js", function(module, exports, require){
-/*!
- * Jade - Lexer
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-var utils = require('./utils');
-
-/**
- * Initialize `Lexer` with the given `str`.
- *
- * Options:
- *
- * - `colons` allow colons for attr delimiters
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Lexer = module.exports = function Lexer(str, options) {
- options = options || {};
- this.input = str.replace(/\r\n|\r/g, '\n');
- this.colons = options.colons;
- this.deferredTokens = [];
- this.lastIndents = 0;
- this.lineno = 1;
- this.stash = [];
- this.indentStack = [];
- this.indentRe = null;
- this.pipeless = false;
-};
-
-/**
- * Lexer prototype.
- */
-
-Lexer.prototype = {
-
- /**
- * Construct a token with the given `type` and `val`.
- *
- * @param {String} type
- * @param {String} val
- * @return {Object}
- * @api private
- */
-
- tok: function(type, val){
- return {
- type: type
- , line: this.lineno
- , val: val
- }
- },
-
- /**
- * Consume the given `len` of input.
- *
- * @param {Number} len
- * @api private
- */
-
- consume: function(len){
- this.input = this.input.substr(len);
- },
-
- /**
- * Scan for `type` with the given `regexp`.
- *
- * @param {String} type
- * @param {RegExp} regexp
- * @return {Object}
- * @api private
- */
-
- scan: function(regexp, type){
- var captures;
- if (captures = regexp.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok(type, captures[1]);
- }
- },
-
- /**
- * Defer the given `tok`.
- *
- * @param {Object} tok
- * @api private
- */
-
- defer: function(tok){
- this.deferredTokens.push(tok);
- },
-
- /**
- * Lookahead `n` tokens.
- *
- * @param {Number} n
- * @return {Object}
- * @api private
- */
-
- lookahead: function(n){
- var fetch = n - this.stash.length;
- while (fetch-- > 0) this.stash.push(this.next());
- return this.stash[--n];
- },
-
- /**
- * Return the indexOf `start` / `end` delimiters.
- *
- * @param {String} start
- * @param {String} end
- * @return {Number}
- * @api private
- */
-
- indexOfDelimiters: function(start, end){
- var str = this.input
- , nstart = 0
- , nend = 0
- , pos = 0;
- for (var i = 0, len = str.length; i < len; ++i) {
- if (start == str.charAt(i)) {
- ++nstart;
- } else if (end == str.charAt(i)) {
- if (++nend == nstart) {
- pos = i;
- break;
- }
- }
- }
- return pos;
- },
-
- /**
- * Stashed token.
- */
-
- stashed: function() {
- return this.stash.length
- && this.stash.shift();
- },
-
- /**
- * Deferred token.
- */
-
- deferred: function() {
- return this.deferredTokens.length
- && this.deferredTokens.shift();
- },
-
- /**
- * end-of-source.
- */
-
- eos: function() {
- if (this.input.length) return;
- if (this.indentStack.length) {
- this.indentStack.shift();
- return this.tok('outdent');
- } else {
- return this.tok('eos');
- }
- },
-
- /**
- * Blank line.
- */
-
- blank: function() {
- var captures;
- if (captures = /^\n *\n/.exec(this.input)) {
- this.consume(captures[0].length - 1);
-
- ++this.lineno;
- if (this.pipeless) return this.tok('text', '');
- return this.next();
- }
- },
-
- /**
- * Comment.
- */
-
- comment: function() {
- var captures;
- if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('comment', captures[2]);
- tok.buffer = '-' != captures[1];
- return tok;
- }
- },
-
- /**
- * Interpolated tag.
- */
-
- interpolation: function() {
- var captures;
- if (captures = /^#\{(.*?)\}/.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok('interpolation', captures[1]);
- }
- },
-
- /**
- * Tag.
- */
-
- tag: function() {
- var captures;
- if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok, name = captures[1];
- if (':' == name[name.length - 1]) {
- name = name.slice(0, -1);
- tok = this.tok('tag', name);
- this.defer(this.tok(':'));
- while (' ' == this.input[0]) this.input = this.input.substr(1);
- } else {
- tok = this.tok('tag', name);
- }
- tok.selfClosing = !! captures[2];
- return tok;
- }
- },
-
- /**
- * Filter.
- */
-
- filter: function() {
- return this.scan(/^:(\w+)/, 'filter');
- },
-
- /**
- * Doctype.
- */
-
- doctype: function() {
- return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype');
- },
-
- /**
- * Id.
- */
-
- id: function() {
- return this.scan(/^#([\w-]+)/, 'id');
- },
-
- /**
- * Class.
- */
-
- className: function() {
- return this.scan(/^\.([\w-]+)/, 'class');
- },
-
- /**
- * Text.
- */
-
- text: function() {
- return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text');
- },
-
- /**
- * Extends.
- */
-
- "extends": function() {
- return this.scan(/^extends? +([^\n]+)/, 'extends');
- },
-
- /**
- * Block prepend.
- */
-
- prepend: function() {
- var captures;
- if (captures = /^prepend +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = 'prepend'
- , name = captures[1]
- , tok = this.tok('block', name);
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Block append.
- */
-
- append: function() {
- var captures;
- if (captures = /^append +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = 'append'
- , name = captures[1]
- , tok = this.tok('block', name);
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Block.
- */
-
- block: function() {
- var captures;
- if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = captures[1] || 'replace'
- , name = captures[2]
- , tok = this.tok('block', name);
-
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Yield.
- */
-
- yield: function() {
- return this.scan(/^yield */, 'yield');
- },
-
- /**
- * Include.
- */
-
- include: function() {
- return this.scan(/^include +([^\n]+)/, 'include');
- },
-
- /**
- * Case.
- */
-
- "case": function() {
- return this.scan(/^case +([^\n]+)/, 'case');
- },
-
- /**
- * When.
- */
-
- when: function() {
- return this.scan(/^when +([^:\n]+)/, 'when');
- },
-
- /**
- * Default.
- */
-
- "default": function() {
- return this.scan(/^default */, 'default');
- },
-
- /**
- * Assignment.
- */
-
- assignment: function() {
- var captures;
- if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) {
- this.consume(captures[0].length);
- var name = captures[1]
- , val = captures[2];
- return this.tok('code', 'var ' + name + ' = (' + val + ');');
- }
- },
-
- /**
- * Call mixin.
- */
-
- call: function(){
- var captures;
- if (captures = /^\+([-\w]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('call', captures[1]);
-
- // Check for args (not attributes)
- if (captures = /^ *\((.*?)\)/.exec(this.input)) {
- if (!/^ *[-\w]+ *=/.test(captures[1])) {
- this.consume(captures[0].length);
- tok.args = captures[1];
- }
- }
-
- return tok;
- }
- },
-
- /**
- * Mixin.
- */
-
- mixin: function(){
- var captures;
- if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('mixin', captures[1]);
- tok.args = captures[2];
- return tok;
- }
- },
-
- /**
- * Conditional.
- */
-
- conditional: function() {
- var captures;
- if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var type = captures[1]
- , js = captures[2];
-
- switch (type) {
- case 'if': js = 'if (' + js + ')'; break;
- case 'unless': js = 'if (!(' + js + '))'; break;
- case 'else if': js = 'else if (' + js + ')'; break;
- case 'else': js = 'else'; break;
- }
-
- return this.tok('code', js);
- }
- },
-
- /**
- * While.
- */
-
- "while": function() {
- var captures;
- if (captures = /^while +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok('code', 'while (' + captures[1] + ')');
- }
- },
-
- /**
- * Each.
- */
-
- each: function() {
- var captures;
- if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('each', captures[1]);
- tok.key = captures[2] || '$index';
- tok.code = captures[3];
- return tok;
- }
- },
-
- /**
- * Code.
- */
-
- code: function() {
- var captures;
- if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var flags = captures[1];
- captures[1] = captures[2];
- var tok = this.tok('code', captures[1]);
- tok.escape = flags.charAt(0) === '=';
- tok.buffer = flags.charAt(0) === '=' || flags.charAt(1) === '=';
- return tok;
- }
- },
-
- /**
- * Attributes.
- */
-
- attrs: function() {
- if ('(' == this.input.charAt(0)) {
- var index = this.indexOfDelimiters('(', ')')
- , str = this.input.substr(1, index-1)
- , tok = this.tok('attrs')
- , len = str.length
- , colons = this.colons
- , states = ['key']
- , escapedAttr
- , key = ''
- , val = ''
- , quote
- , c
- , p;
-
- function state(){
- return states[states.length - 1];
- }
-
- function interpolate(attr) {
- return attr.replace(/(\\)?#\{([^}]+)\}/g, function(_, escape, expr){
- return escape
- ? _
- : quote + " + (" + expr + ") + " + quote;
- });
- }
-
- this.consume(index + 1);
- tok.attrs = {};
- tok.escaped = {};
-
- function parse(c) {
- var real = c;
- // TODO: remove when people fix ":"
- if (colons && ':' == c) c = '=';
- switch (c) {
- case ',':
- case '\n':
- switch (state()) {
- case 'expr':
- case 'array':
- case 'string':
- case 'object':
- val += c;
- break;
- default:
- states.push('key');
- val = val.trim();
- key = key.trim();
- if ('' == key) return;
- key = key.replace(/^['"]|['"]$/g, '').replace('!', '');
- tok.escaped[key] = escapedAttr;
- tok.attrs[key] = '' == val
- ? true
- : interpolate(val);
- key = val = '';
- }
- break;
- case '=':
- switch (state()) {
- case 'key char':
- key += real;
- break;
- case 'val':
- case 'expr':
- case 'array':
- case 'string':
- case 'object':
- val += real;
- break;
- default:
- escapedAttr = '!' != p;
- states.push('val');
- }
- break;
- case '(':
- if ('val' == state()
- || 'expr' == state()) states.push('expr');
- val += c;
- break;
- case ')':
- if ('expr' == state()
- || 'val' == state()) states.pop();
- val += c;
- break;
- case '{':
- if ('val' == state()) states.push('object');
- val += c;
- break;
- case '}':
- if ('object' == state()) states.pop();
- val += c;
- break;
- case '[':
- if ('val' == state()) states.push('array');
- val += c;
- break;
- case ']':
- if ('array' == state()) states.pop();
- val += c;
- break;
- case '"':
- case "'":
- switch (state()) {
- case 'key':
- states.push('key char');
- break;
- case 'key char':
- states.pop();
- break;
- case 'string':
- if (c == quote) states.pop();
- val += c;
- break;
- default:
- states.push('string');
- val += c;
- quote = c;
- }
- break;
- case '':
- break;
- default:
- switch (state()) {
- case 'key':
- case 'key char':
- key += c;
- break;
- default:
- val += c;
- }
- }
- p = c;
- }
-
- for (var i = 0; i < len; ++i) {
- parse(str.charAt(i));
- }
-
- parse(',');
-
- if ('/' == this.input.charAt(0)) {
- this.consume(1);
- tok.selfClosing = true;
- }
-
- return tok;
- }
- },
-
- /**
- * Indent | Outdent | Newline.
- */
-
- indent: function() {
- var captures, re;
-
- // established regexp
- if (this.indentRe) {
- captures = this.indentRe.exec(this.input);
- // determine regexp
- } else {
- // tabs
- re = /^\n(\t*) */;
- captures = re.exec(this.input);
-
- // spaces
- if (captures && !captures[1].length) {
- re = /^\n( *)/;
- captures = re.exec(this.input);
- }
-
- // established
- if (captures && captures[1].length) this.indentRe = re;
- }
-
- if (captures) {
- var tok
- , indents = captures[1].length;
-
- ++this.lineno;
- this.consume(indents + 1);
-
- if (' ' == this.input[0] || '\t' == this.input[0]) {
- throw new Error('Invalid indentation, you can use tabs or spaces but not both');
- }
-
- // blank line
- if ('\n' == this.input[0]) return this.tok('newline');
-
- // outdent
- if (this.indentStack.length && indents < this.indentStack[0]) {
- while (this.indentStack.length && this.indentStack[0] > indents) {
- this.stash.push(this.tok('outdent'));
- this.indentStack.shift();
- }
- tok = this.stash.pop();
- // indent
- } else if (indents && indents != this.indentStack[0]) {
- this.indentStack.unshift(indents);
- tok = this.tok('indent', indents);
- // newline
- } else {
- tok = this.tok('newline');
- }
-
- return tok;
- }
- },
-
- /**
- * Pipe-less text consumed only when
- * pipeless is true;
- */
-
- pipelessText: function() {
- if (this.pipeless) {
- if ('\n' == this.input[0]) return;
- var i = this.input.indexOf('\n');
- if (-1 == i) i = this.input.length;
- var str = this.input.substr(0, i);
- this.consume(str.length);
- return this.tok('text', str);
- }
- },
-
- /**
- * ':'
- */
-
- colon: function() {
- return this.scan(/^: */, ':');
- },
-
- /**
- * Return the next token object, or those
- * previously stashed by lookahead.
- *
- * @return {Object}
- * @api private
- */
-
- advance: function(){
- return this.stashed()
- || this.next();
- },
-
- /**
- * Return the next token object.
- *
- * @return {Object}
- * @api private
- */
-
- next: function() {
- return this.deferred()
- || this.blank()
- || this.eos()
- || this.pipelessText()
- || this.yield()
- || this.doctype()
- || this.interpolation()
- || this["case"]()
- || this.when()
- || this["default"]()
- || this["extends"]()
- || this.append()
- || this.prepend()
- || this.block()
- || this.include()
- || this.mixin()
- || this.call()
- || this.conditional()
- || this.each()
- || this["while"]()
- || this.assignment()
- || this.tag()
- || this.filter()
- || this.code()
- || this.id()
- || this.className()
- || this.attrs()
- || this.indent()
- || this.comment()
- || this.colon()
- || this.text();
- }
-};
-
-}); // module: lexer.js
-
-require.register("nodes/attrs.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Attrs
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node'),
- Block = require('./block');
-
-/**
- * Initialize a `Attrs` node.
- *
- * @api public
- */
-
-var Attrs = module.exports = function Attrs() {
- this.attrs = [];
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Attrs.prototype = new Node;
-Attrs.prototype.constructor = Attrs;
-
-
-/**
- * Set attribute `name` to `val`, keep in mind these become
- * part of a raw js object literal, so to quote a value you must
- * '"quote me"', otherwise or example 'user.name' is literal JavaScript.
- *
- * @param {String} name
- * @param {String} val
- * @param {Boolean} escaped
- * @return {Tag} for chaining
- * @api public
- */
-
-Attrs.prototype.setAttribute = function(name, val, escaped){
- this.attrs.push({ name: name, val: val, escaped: escaped });
- return this;
-};
-
-/**
- * Remove attribute `name` when present.
- *
- * @param {String} name
- * @api public
- */
-
-Attrs.prototype.removeAttribute = function(name){
- for (var i = 0, len = this.attrs.length; i < len; ++i) {
- if (this.attrs[i] && this.attrs[i].name == name) {
- delete this.attrs[i];
- }
- }
-};
-
-/**
- * Get attribute value by `name`.
- *
- * @param {String} name
- * @return {String}
- * @api public
- */
-
-Attrs.prototype.getAttribute = function(name){
- for (var i = 0, len = this.attrs.length; i < len; ++i) {
- if (this.attrs[i] && this.attrs[i].name == name) {
- return this.attrs[i].val;
- }
- }
-};
-
-}); // module: nodes/attrs.js
-
-require.register("nodes/block-comment.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - BlockComment
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `BlockComment` with the given `block`.
- *
- * @param {String} val
- * @param {Block} block
- * @param {Boolean} buffer
- * @api public
- */
-
-var BlockComment = module.exports = function BlockComment(val, block, buffer) {
- this.block = block;
- this.val = val;
- this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-BlockComment.prototype = new Node;
-BlockComment.prototype.constructor = BlockComment;
-
-}); // module: nodes/block-comment.js
-
-require.register("nodes/block.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Block
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Block` with an optional `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-var Block = module.exports = function Block(node){
- this.nodes = [];
- if (node) this.push(node);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Block.prototype = new Node;
-Block.prototype.constructor = Block;
-
-
-/**
- * Block flag.
- */
-
-Block.prototype.isBlock = true;
-
-/**
- * Replace the nodes in `other` with the nodes
- * in `this` block.
- *
- * @param {Block} other
- * @api private
- */
-
-Block.prototype.replace = function(other){
- other.nodes = this.nodes;
-};
-
-/**
- * Pust the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.push = function(node){
- return this.nodes.push(node);
-};
-
-/**
- * Check if this block is empty.
- *
- * @return {Boolean}
- * @api public
- */
-
-Block.prototype.isEmpty = function(){
- return 0 == this.nodes.length;
-};
-
-/**
- * Unshift the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.unshift = function(node){
- return this.nodes.unshift(node);
-};
-
-/**
- * Return the "last" block, or the first `yield` node.
- *
- * @return {Block}
- * @api private
- */
-
-Block.prototype.includeBlock = function(){
- var ret = this
- , node;
-
- for (var i = 0, len = this.nodes.length; i < len; ++i) {
- node = this.nodes[i];
- if (node.yield) return node;
- else if (node.textOnly) continue;
- else if (node.includeBlock) ret = node.includeBlock();
- else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock();
- if (ret.yield) return ret;
- }
-
- return ret;
-};
-
-/**
- * Return a clone of this block.
- *
- * @return {Block}
- * @api private
- */
-
-Block.prototype.clone = function(){
- var clone = new Block;
- for (var i = 0, len = this.nodes.length; i < len; ++i) {
- clone.push(this.nodes[i].clone());
- }
- return clone;
-};
-
-
-}); // module: nodes/block.js
-
-require.register("nodes/case.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Case
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Case` with `expr`.
- *
- * @param {String} expr
- * @api public
- */
-
-var Case = exports = module.exports = function Case(expr, block){
- this.expr = expr;
- this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Case.prototype = new Node;
-Case.prototype.constructor = Case;
-
-
-var When = exports.When = function When(expr, block){
- this.expr = expr;
- this.block = block;
- this.debug = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-When.prototype = new Node;
-When.prototype.constructor = When;
-
-
-
-}); // module: nodes/case.js
-
-require.register("nodes/code.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Code
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Code` node with the given code `val`.
- * Code may also be optionally buffered and escaped.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @param {Boolean} escape
- * @api public
- */
-
-var Code = module.exports = function Code(val, buffer, escape) {
- this.val = val;
- this.buffer = buffer;
- this.escape = escape;
- if (val.match(/^ *else/)) this.debug = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Code.prototype = new Node;
-Code.prototype.constructor = Code;
-
-}); // module: nodes/code.js
-
-require.register("nodes/comment.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Comment
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Comment` with the given `val`, optionally `buffer`,
- * otherwise the comment may render in the output.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @api public
- */
-
-var Comment = module.exports = function Comment(val, buffer) {
- this.val = val;
- this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Comment.prototype = new Node;
-Comment.prototype.constructor = Comment;
-
-}); // module: nodes/comment.js
-
-require.register("nodes/doctype.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Doctype
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Doctype` with the given `val`.
- *
- * @param {String} val
- * @api public
- */
-
-var Doctype = module.exports = function Doctype(val) {
- this.val = val;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Doctype.prototype = new Node;
-Doctype.prototype.constructor = Doctype;
-
-}); // module: nodes/doctype.js
-
-require.register("nodes/each.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Each
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize an `Each` node, representing iteration
- *
- * @param {String} obj
- * @param {String} val
- * @param {String} key
- * @param {Block} block
- * @api public
- */
-
-var Each = module.exports = function Each(obj, val, key, block) {
- this.obj = obj;
- this.val = val;
- this.key = key;
- this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Each.prototype = new Node;
-Each.prototype.constructor = Each;
-
-}); // module: nodes/each.js
-
-require.register("nodes/filter.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Filter
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
- , Block = require('./block');
-
-/**
- * Initialize a `Filter` node with the given
- * filter `name` and `block`.
- *
- * @param {String} name
- * @param {Block|Node} block
- * @api public
- */
-
-var Filter = module.exports = function Filter(name, block, attrs) {
- this.name = name;
- this.block = block;
- this.attrs = attrs;
- this.isASTFilter = !block.nodes.every(function(node){ return node.isText });
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Filter.prototype = new Node;
-Filter.prototype.constructor = Filter;
-
-}); // module: nodes/filter.js
-
-require.register("nodes/index.js", function(module, exports, require){
-
-/*!
- * Jade - nodes
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-exports.Node = require('./node');
-exports.Tag = require('./tag');
-exports.Code = require('./code');
-exports.Each = require('./each');
-exports.Case = require('./case');
-exports.Text = require('./text');
-exports.Block = require('./block');
-exports.Mixin = require('./mixin');
-exports.Filter = require('./filter');
-exports.Comment = require('./comment');
-exports.Literal = require('./literal');
-exports.BlockComment = require('./block-comment');
-exports.Doctype = require('./doctype');
-
-}); // module: nodes/index.js
-
-require.register("nodes/literal.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Literal
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Literal` node with the given `str.
- *
- * @param {String} str
- * @api public
- */
-
-var Literal = module.exports = function Literal(str) {
- this.str = str
- .replace(/\\/g, "\\\\")
- .replace(/\n|\r\n/g, "\\n")
- .replace(/'/g, "\\'");
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Literal.prototype = new Node;
-Literal.prototype.constructor = Literal;
-
-
-}); // module: nodes/literal.js
-
-require.register("nodes/mixin.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Mixin
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Attrs = require('./attrs');
-
-/**
- * Initialize a new `Mixin` with `name` and `block`.
- *
- * @param {String} name
- * @param {String} args
- * @param {Block} block
- * @api public
- */
-
-var Mixin = module.exports = function Mixin(name, args, block, call){
- this.name = name;
- this.args = args;
- this.block = block;
- this.attrs = [];
- this.call = call;
-};
-
-/**
- * Inherit from `Attrs`.
- */
-
-Mixin.prototype = new Attrs;
-Mixin.prototype.constructor = Mixin;
-
-
-
-}); // module: nodes/mixin.js
-
-require.register("nodes/node.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Node
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Initialize a `Node`.
- *
- * @api public
- */
-
-var Node = module.exports = function Node(){};
-
-/**
- * Clone this node (return itself)
- *
- * @return {Node}
- * @api private
- */
-
-Node.prototype.clone = function(){
- return this;
-};
-
-}); // module: nodes/node.js
-
-require.register("nodes/tag.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Tag
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Attrs = require('./attrs'),
- Block = require('./block'),
- inlineTags = require('../inline-tags');
-
-/**
- * Initialize a `Tag` node with the given tag `name` and optional `block`.
- *
- * @param {String} name
- * @param {Block} block
- * @api public
- */
-
-var Tag = module.exports = function Tag(name, block) {
- this.name = name;
- this.attrs = [];
- this.block = block || new Block;
-};
-
-/**
- * Inherit from `Attrs`.
- */
-
-Tag.prototype = new Attrs;
-Tag.prototype.constructor = Tag;
-
-
-/**
- * Clone this tag.
- *
- * @return {Tag}
- * @api private
- */
-
-Tag.prototype.clone = function(){
- var clone = new Tag(this.name, this.block.clone());
- clone.line = this.line;
- clone.attrs = this.attrs;
- clone.textOnly = this.textOnly;
- return clone;
-};
-
-/**
- * Check if this tag is an inline tag.
- *
- * @return {Boolean}
- * @api private
- */
-
-Tag.prototype.isInline = function(){
- return ~inlineTags.indexOf(this.name);
-};
-
-/**
- * Check if this tag's contents can be inlined. Used for pretty printing.
- *
- * @return {Boolean}
- * @api private
- */
-
-Tag.prototype.canInline = function(){
- var nodes = this.block.nodes;
-
- function isInline(node){
- // Recurse if the node is a block
- if (node.isBlock) return node.nodes.every(isInline);
- return node.isText || (node.isInline && node.isInline());
- }
-
- // Empty tag
- if (!nodes.length) return true;
-
- // Text-only or inline-only tag
- if (1 == nodes.length) return isInline(nodes[0]);
-
- // Multi-line inline-only tag
- if (this.block.nodes.every(isInline)) {
- for (var i = 1, len = nodes.length; i < len; ++i) {
- if (nodes[i-1].isText && nodes[i].isText)
- return false;
- }
- return true;
- }
-
- // Mixed tag
- return false;
-};
-}); // module: nodes/tag.js
-
-require.register("nodes/text.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Text
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Text` node with optional `line`.
- *
- * @param {String} line
- * @api public
- */
-
-var Text = module.exports = function Text(line) {
- this.val = '';
- if ('string' == typeof line) this.val = line;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Text.prototype = new Node;
-Text.prototype.constructor = Text;
-
-
-/**
- * Flag as text.
- */
-
-Text.prototype.isText = true;
-}); // module: nodes/text.js
-
-require.register("parser.js", function(module, exports, require){
-
-/*!
- * Jade - Parser
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Lexer = require('./lexer')
- , nodes = require('./nodes')
- , utils = require('./utils');
-
-/**
- * Initialize `Parser` with the given input `str` and `filename`.
- *
- * @param {String} str
- * @param {String} filename
- * @param {Object} options
- * @api public
- */
-
-var Parser = exports = module.exports = function Parser(str, filename, options){
- this.input = str;
- this.lexer = new Lexer(str, options);
- this.filename = filename;
- this.blocks = {};
- this.mixins = {};
- this.options = options;
- this.contexts = [this];
-};
-
-/**
- * Tags that may not contain tags.
- */
-
-var textOnly = exports.textOnly = ['script', 'style'];
-
-/**
- * Parser prototype.
- */
-
-Parser.prototype = {
-
- /**
- * Push `parser` onto the context stack,
- * or pop and return a `Parser`.
- */
-
- context: function(parser){
- if (parser) {
- this.contexts.push(parser);
- } else {
- return this.contexts.pop();
- }
- },
-
- /**
- * Return the next token object.
- *
- * @return {Object}
- * @api private
- */
-
- advance: function(){
- return this.lexer.advance();
- },
-
- /**
- * Skip `n` tokens.
- *
- * @param {Number} n
- * @api private
- */
-
- skip: function(n){
- while (n--) this.advance();
- },
-
- /**
- * Single token lookahead.
- *
- * @return {Object}
- * @api private
- */
-
- peek: function() {
- return this.lookahead(1);
- },
-
- /**
- * Return lexer lineno.
- *
- * @return {Number}
- * @api private
- */
-
- line: function() {
- return this.lexer.lineno;
- },
-
- /**
- * `n` token lookahead.
- *
- * @param {Number} n
- * @return {Object}
- * @api private
- */
-
- lookahead: function(n){
- return this.lexer.lookahead(n);
- },
-
- /**
- * Parse input returning a string of js for evaluation.
- *
- * @return {String}
- * @api public
- */
-
- parse: function(){
- var block = new nodes.Block, parser;
- block.line = this.line();
-
- while ('eos' != this.peek().type) {
- if ('newline' == this.peek().type) {
- this.advance();
- } else {
- block.push(this.parseExpr());
- }
- }
-
- if (parser = this.extending) {
- this.context(parser);
- var ast = parser.parse();
- this.context();
- // hoist mixins
- for (var name in this.mixins)
- ast.unshift(this.mixins[name]);
- return ast;
- }
-
- return block;
- },
-
- /**
- * Expect the given type, or throw an exception.
- *
- * @param {String} type
- * @api private
- */
-
- expect: function(type){
- if (this.peek().type === type) {
- return this.advance();
- } else {
- throw new Error('expected "' + type + '", but got "' + this.peek().type + '"');
- }
- },
-
- /**
- * Accept the given `type`.
- *
- * @param {String} type
- * @api private
- */
-
- accept: function(type){
- if (this.peek().type === type) {
- return this.advance();
- }
- },
-
- /**
- * tag
- * | doctype
- * | mixin
- * | include
- * | filter
- * | comment
- * | text
- * | each
- * | code
- * | yield
- * | id
- * | class
- * | interpolation
- */
-
- parseExpr: function(){
- switch (this.peek().type) {
- case 'tag':
- return this.parseTag();
- case 'mixin':
- return this.parseMixin();
- case 'block':
- return this.parseBlock();
- case 'case':
- return this.parseCase();
- case 'when':
- return this.parseWhen();
- case 'default':
- return this.parseDefault();
- case 'extends':
- return this.parseExtends();
- case 'include':
- return this.parseInclude();
- case 'doctype':
- return this.parseDoctype();
- case 'filter':
- return this.parseFilter();
- case 'comment':
- return this.parseComment();
- case 'text':
- return this.parseText();
- case 'each':
- return this.parseEach();
- case 'code':
- return this.parseCode();
- case 'call':
- return this.parseCall();
- case 'interpolation':
- return this.parseInterpolation();
- case 'yield':
- this.advance();
- var block = new nodes.Block;
- block.yield = true;
- return block;
- case 'id':
- case 'class':
- var tok = this.advance();
- this.lexer.defer(this.lexer.tok('tag', 'div'));
- this.lexer.defer(tok);
- return this.parseExpr();
- default:
- throw new Error('unexpected token "' + this.peek().type + '"');
- }
- },
-
- /**
- * Text
- */
-
- parseText: function(){
- var tok = this.expect('text')
- , node = new nodes.Text(tok.val);
- node.line = this.line();
- return node;
- },
-
- /**
- * ':' expr
- * | block
- */
-
- parseBlockExpansion: function(){
- if (':' == this.peek().type) {
- this.advance();
- return new nodes.Block(this.parseExpr());
- } else {
- return this.block();
- }
- },
-
- /**
- * case
- */
-
- parseCase: function(){
- var val = this.expect('case').val
- , node = new nodes.Case(val);
- node.line = this.line();
- node.block = this.block();
- return node;
- },
-
- /**
- * when
- */
-
- parseWhen: function(){
- var val = this.expect('when').val
- return new nodes.Case.When(val, this.parseBlockExpansion());
- },
-
- /**
- * default
- */
-
- parseDefault: function(){
- this.expect('default');
- return new nodes.Case.When('default', this.parseBlockExpansion());
- },
-
- /**
- * code
- */
-
- parseCode: function(){
- var tok = this.expect('code')
- , node = new nodes.Code(tok.val, tok.buffer, tok.escape)
- , block
- , i = 1;
- node.line = this.line();
- while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i;
- block = 'indent' == this.lookahead(i).type;
- if (block) {
- this.skip(i-1);
- node.block = this.block();
- }
- return node;
- },
-
- /**
- * comment
- */
-
- parseComment: function(){
- var tok = this.expect('comment')
- , node;
-
- if ('indent' == this.peek().type) {
- node = new nodes.BlockComment(tok.val, this.block(), tok.buffer);
- } else {
- node = new nodes.Comment(tok.val, tok.buffer);
- }
-
- node.line = this.line();
- return node;
- },
-
- /**
- * doctype
- */
-
- parseDoctype: function(){
- var tok = this.expect('doctype')
- , node = new nodes.Doctype(tok.val);
- node.line = this.line();
- return node;
- },
-
- /**
- * filter attrs? text-block
- */
-
- parseFilter: function(){
- var block
- , tok = this.expect('filter')
- , attrs = this.accept('attrs');
-
- this.lexer.pipeless = true;
- block = this.parseTextBlock();
- this.lexer.pipeless = false;
-
- var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
- node.line = this.line();
- return node;
- },
-
- /**
- * tag ':' attrs? block
- */
-
- parseASTFilter: function(){
- var block
- , tok = this.expect('tag')
- , attrs = this.accept('attrs');
-
- this.expect(':');
- block = this.block();
-
- var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
- node.line = this.line();
- return node;
- },
-
- /**
- * each block
- */
-
- parseEach: function(){
- var tok = this.expect('each')
- , node = new nodes.Each(tok.code, tok.val, tok.key);
- node.line = this.line();
- node.block = this.block();
- if (this.peek().type == 'code' && this.peek().val == 'else') {
- this.advance();
- node.alternative = this.block();
- }
- return node;
- },
-
- /**
- * 'extends' name
- */
-
- parseExtends: function(){
- var path = require('path')
- , fs = require('fs')
- , dirname = path.dirname
- , basename = path.basename
- , join = path.join;
-
- if (!this.filename)
- throw new Error('the "filename" option is required to extend templates');
-
- var path = this.expect('extends').val.trim()
- , dir = dirname(this.filename);
-
- var path = join(dir, path + '.jade')
- , str = fs.readFileSync(path, 'utf8')
- , parser = new Parser(str, path, this.options);
-
- parser.blocks = this.blocks;
- parser.contexts = this.contexts;
- this.extending = parser;
-
- // TODO: null node
- return new nodes.Literal('');
- },
-
- /**
- * 'block' name block
- */
-
- parseBlock: function(){
- var block = this.expect('block')
- , mode = block.mode
- , name = block.val.trim();
-
- block = 'indent' == this.peek().type
- ? this.block()
- : new nodes.Block(new nodes.Literal(''));
-
- var prev = this.blocks[name];
-
- if (prev) {
- switch (prev.mode) {
- case 'append':
- block.nodes = block.nodes.concat(prev.nodes);
- prev = block;
- break;
- case 'prepend':
- block.nodes = prev.nodes.concat(block.nodes);
- prev = block;
- break;
- }
- }
-
- block.mode = mode;
- return this.blocks[name] = prev || block;
- },
-
- /**
- * include block?
- */
-
- parseInclude: function(){
- var path = require('path')
- , fs = require('fs')
- , dirname = path.dirname
- , basename = path.basename
- , join = path.join;
-
- var path = this.expect('include').val.trim()
- , dir = dirname(this.filename);
-
- if (!this.filename)
- throw new Error('the "filename" option is required to use includes');
-
- // no extension
- if (!~basename(path).indexOf('.')) {
- path += '.jade';
- }
-
- // non-jade
- if ('.jade' != path.substr(-5)) {
- var path = join(dir, path)
- , str = fs.readFileSync(path, 'utf8');
- return new nodes.Literal(str);
- }
-
- var path = join(dir, path)
- , str = fs.readFileSync(path, 'utf8')
- , parser = new Parser(str, path, this.options);
- parser.blocks = utils.merge({}, this.blocks);
- parser.mixins = this.mixins;
-
- this.context(parser);
- var ast = parser.parse();
- this.context();
- ast.filename = path;
-
- if ('indent' == this.peek().type) {
- ast.includeBlock().push(this.block());
- }
-
- return ast;
- },
-
- /**
- * call ident block
- */
-
- parseCall: function(){
- var tok = this.expect('call')
- , name = tok.val
- , args = tok.args
- , mixin = new nodes.Mixin(name, args, new nodes.Block, true);
-
- this.tag(mixin);
- if (mixin.block.isEmpty()) mixin.block = null;
- return mixin;
- },
-
- /**
- * mixin block
- */
-
- parseMixin: function(){
- var tok = this.expect('mixin')
- , name = tok.val
- , args = tok.args
- , mixin;
-
- // definition
- if ('indent' == this.peek().type) {
- mixin = new nodes.Mixin(name, args, this.block(), false);
- this.mixins[name] = mixin;
- return mixin;
- // call
- } else {
- return new nodes.Mixin(name, args, null, true);
- }
- },
-
- /**
- * indent (text | newline)* outdent
- */
-
- parseTextBlock: function(){
- var block = new nodes.Block;
- block.line = this.line();
- var spaces = this.expect('indent').val;
- if (null == this._spaces) this._spaces = spaces;
- var indent = Array(spaces - this._spaces + 1).join(' ');
- while ('outdent' != this.peek().type) {
- switch (this.peek().type) {
- case 'newline':
- this.advance();
- break;
- case 'indent':
- this.parseTextBlock().nodes.forEach(function(node){
- block.push(node);
- });
- break;
- default:
- var text = new nodes.Text(indent + this.advance().val);
- text.line = this.line();
- block.push(text);
- }
- }
-
- if (spaces == this._spaces) this._spaces = null;
- this.expect('outdent');
- return block;
- },
-
- /**
- * indent expr* outdent
- */
-
- block: function(){
- var block = new nodes.Block;
- block.line = this.line();
- this.expect('indent');
- while ('outdent' != this.peek().type) {
- if ('newline' == this.peek().type) {
- this.advance();
- } else {
- block.push(this.parseExpr());
- }
- }
- this.expect('outdent');
- return block;
- },
-
- /**
- * interpolation (attrs | class | id)* (text | code | ':')? newline* block?
- */
-
- parseInterpolation: function(){
- var tok = this.advance();
- var tag = new nodes.Tag(tok.val);
- tag.buffer = true;
- return this.tag(tag);
- },
-
- /**
- * tag (attrs | class | id)* (text | code | ':')? newline* block?
- */
-
- parseTag: function(){
- // ast-filter look-ahead
- var i = 2;
- if ('attrs' == this.lookahead(i).type) ++i;
- if (':' == this.lookahead(i).type) {
- if ('indent' == this.lookahead(++i).type) {
- return this.parseASTFilter();
- }
- }
-
- var tok = this.advance()
- , tag = new nodes.Tag(tok.val);
-
- tag.selfClosing = tok.selfClosing;
-
- return this.tag(tag);
- },
-
- /**
- * Parse tag.
- */
-
- tag: function(tag){
- var dot;
-
- tag.line = this.line();
-
- // (attrs | class | id)*
- out:
- while (true) {
- switch (this.peek().type) {
- case 'id':
- case 'class':
- var tok = this.advance();
- tag.setAttribute(tok.type, "'" + tok.val + "'");
- continue;
- case 'attrs':
- var tok = this.advance()
- , obj = tok.attrs
- , escaped = tok.escaped
- , names = Object.keys(obj);
-
- if (tok.selfClosing) tag.selfClosing = true;
-
- for (var i = 0, len = names.length; i < len; ++i) {
- var name = names[i]
- , val = obj[name];
- tag.setAttribute(name, val, escaped[name]);
- }
- continue;
- default:
- break out;
- }
- }
-
- // check immediate '.'
- if ('.' == this.peek().val) {
- dot = tag.textOnly = true;
- this.advance();
- }
-
- // (text | code | ':')?
- switch (this.peek().type) {
- case 'text':
- tag.block.push(this.parseText());
- break;
- case 'code':
- tag.code = this.parseCode();
- break;
- case ':':
- this.advance();
- tag.block = new nodes.Block;
- tag.block.push(this.parseExpr());
- break;
- }
-
- // newline*
- while ('newline' == this.peek().type) this.advance();
-
- tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name);
-
- // script special-case
- if ('script' == tag.name) {
- var type = tag.getAttribute('type');
- if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) {
- tag.textOnly = false;
- }
- }
-
- // block?
- if ('indent' == this.peek().type) {
- if (tag.textOnly) {
- this.lexer.pipeless = true;
- tag.block = this.parseTextBlock();
- this.lexer.pipeless = false;
- } else {
- var block = this.block();
- if (tag.block) {
- for (var i = 0, len = block.nodes.length; i < len; ++i) {
- tag.block.push(block.nodes[i]);
- }
- } else {
- tag.block = block;
- }
- }
- }
-
- return tag;
- }
-};
-
-}); // module: parser.js
-
-require.register("runtime.js", function(module, exports, require){
-
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
- Array.isArray = function(arr){
- return '[object Array]' == Object.prototype.toString.call(arr);
- };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
- Object.keys = function(obj){
- var arr = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr.push(key);
- }
- }
- return arr;
- }
-}
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- ac = ac.filter(nulls);
- bc = bc.filter(nulls);
- a['class'] = ac.concat(bc).join(' ');
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
-
-function nulls(val) {
- return val != null;
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj, escaped){
- var buf = []
- , terse = obj.terse;
-
- delete obj.terse;
- var keys = Object.keys(obj)
- , len = keys.length;
-
- if (len) {
- buf.push('');
- for (var i = 0; i < len; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('boolean' == typeof val || null == val) {
- if (val) {
- terse
- ? buf.push(key)
- : buf.push(key + '="' + key + '"');
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- buf.push(key + "='" + JSON.stringify(val) + "'");
- } else if ('class' == key && Array.isArray(val)) {
- buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
- } else if (escaped && escaped[key]) {
- buf.push(key + '="' + exports.escape(val) + '"');
- } else {
- buf.push(key + '="' + val + '"');
- }
- }
- }
-
- return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
- return String(html)
- .replace(/&(?!(\w+|\#\d+);)/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno){
- if (!filename) throw err;
-
- var context = 3
- , str = require('fs').readFileSync(filename, 'utf8')
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
-
-}); // module: runtime.js
-
-require.register("self-closing.js", function(module, exports, require){
-
-/*!
- * Jade - self closing tags
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = [
- 'meta'
- , 'img'
- , 'link'
- , 'input'
- , 'source'
- , 'area'
- , 'base'
- , 'col'
- , 'br'
- , 'hr'
-];
-}); // module: self-closing.js
-
-require.register("utils.js", function(module, exports, require){
-
-/*!
- * Jade - utils
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Convert interpolation in the given string to JavaScript.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var interpolate = exports.interpolate = function(str){
- return str.replace(/(_SLASH_)?([#!]){(.*?)}/g, function(str, escape, flag, code){
- code = code
- .replace(/\\'/g, "'")
- .replace(/_SLASH_/g, '\\');
-
- return escape
- ? str.slice(7)
- : "' + "
- + ('!' == flag ? '' : 'escape')
- + "((interp = " + code
- + ") == null ? '' : interp) + '";
- });
-};
-
-/**
- * Escape single quotes in `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var escape = exports.escape = function(str) {
- return str.replace(/'/g, "\\'");
-};
-
-/**
- * Interpolate, and escape the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.text = function(str){
- return interpolate(escape(str));
-};
-
-/**
- * Merge `b` into `a`.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object}
- * @api public
- */
-
-exports.merge = function(a, b) {
- for (var key in b) a[key] = b[key];
- return a;
-};
-
-
-}); // module: utils.js
-
-window.jade = require("jade");
-})();
diff --git a/node_modules/jade/jade.md b/node_modules/jade/jade.md
deleted file mode 100644
index 051dc031..00000000
--- a/node_modules/jade/jade.md
+++ /dev/null
@@ -1,510 +0,0 @@
-
-# Jade
-
- The jade template engine for node.js
-
-## Synopsis
-
- jade [-h|--help] [-v|--version] [-o|--obj STR]
- [-O|--out DIR] [-p|--path PATH] [-P|--pretty]
- [-c|--client] [-D|--no-debug]
-
-## Examples
-
- translate jade the templates dir
-
- $ jade templates
-
- create {foo,bar}.html
-
- $ jade {foo,bar}.jade
-
- jade over stdio
-
- $ jade < my.jade > my.html
-
- jade over s
-
- $ echo "h1 Jade!" | jade
-
- foo, bar dirs rendering to /tmp
-
- $ jade foo bar --out /tmp
-
- compile client-side templates without debugging
- instrumentation, making the output javascript
- very light-weight. This requires runtime.js
- in your projects.
-
- $ jade --client --no-debug < my.jade
-
-## Tags
-
- Tags are simply nested via whitespace, closing
- tags defined for you. These indents are called "blocks".
-
- ul
- li
- a Foo
- li
- a Bar
-
- You may have several tags in one "block":
-
- ul
- li
- a Foo
- a Bar
- a Baz
-
-## Self-closing Tags
-
- Some tags are flagged as self-closing by default, such
- as `meta`, `link`, and so on. To explicitly self-close
- a tag simply append the `/` character:
-
- foo/
- foo(bar='baz')/
-
- Would yield:
-
- <foo/>
- <foo bar="baz"/>
-
-## Attributes
-
- Tag attributes look similar to HTML, however
- the values are regular JavaScript, here are
- some examples:
-
- a(href='google.com') Google
- a(class='button', href='google.com') Google
-
- As mentioned the attribute values are just JavaScript,
- this means ternary operations and other JavaScript expressions
- work just fine:
-
- body(class=user.authenticated ? 'authenticated' : 'anonymous')
- a(href=user.website || 'http://google.com')
-
- Multiple lines work too:
-
- input(type='checkbox',
- name='agreement',
- checked)
-
- Multiple lines without the comma work fine:
-
- input(type='checkbox'
- name='agreement'
- checked)
-
- Funky whitespace? fine:
-
- input(
- type='checkbox'
- name='agreement'
- checked)
-
-## Boolean attributes
-
- Boolean attributes are mirrored by Jade, and accept
- bools, aka _true_ or _false_. When no value is specified
- _true_ is assumed. For example:
-
- input(type="checkbox", checked)
- // => "<input type="checkbox" checked="checked" />"
-
- For example if the checkbox was for an agreement, perhaps `user.agreed`
- was _true_ the following would also output 'checked="checked"':
-
- input(type="checkbox", checked=user.agreed)
-
-## Class attributes
-
- The _class_ attribute accepts an array of classes,
- this can be handy when generated from a javascript
- function etc:
-
- classes = ['foo', 'bar', 'baz']
- a(class=classes)
- // => "<a class="foo bar baz"></a>"
-
-## Class literal
-
- Classes may be defined using a ".CLASSNAME" syntax:
-
- .button
- // => "<div class="button"></div>"
-
- Or chained:
-
- .large.button
- // => "<div class="large button"></div>"
-
- The previous defaulted to divs, however you
- may also specify the tag type:
-
- h1.title My Title
- // => "<h1 class="title">My Title</h1>"
-
-## Id literal
-
- Much like the class literal there's an id literal:
-
- #user-1
- // => "<div id="user-1"></div>"
-
- Again we may specify the tag as well:
-
- ul#menu
- li: a(href='/home') Home
- li: a(href='/store') Store
- li: a(href='/contact') Contact
-
- Finally all of these may be used in any combination,
- the following are all valid tags:
-
- a.button#contact(style: 'color: red') Contact
- a.button(style: 'color: red')#contact Contact
- a(style: 'color: red').button#contact Contact
-
-## Block expansion
-
- Jade supports the concept of "block expansion", in which
- using a trailing ":" after a tag will inject a block:
-
- ul
- li: a Foo
- li: a Bar
- li: a Baz
-
-## Text
-
- Arbitrary text may follow tags:
-
- p Welcome to my site
-
- yields:
-
- <p>Welcome to my site</p>
-
-## Pipe text
-
- Another form of text is "pipe" text. Pipes act
- as the text margin for large bodies of text.
-
- p
- | This is a large
- | body of text for
- | this tag.
- |
- | Nothing too
- | exciting.
-
- yields:
-
- <p>This is a large
- body of text for
- this tag.
-
- Nothing too
- exciting.
- </p>
-
- Using pipes we can also specify regular Jade tags
- within the text:
-
- p
- | Click to visit
- a(href='http://google.com') Google
- | if you want.
-
-## Text only tags
-
- As an alternative to pipe text you may add
- a trailing "." to indicate that the block
- contains nothing but plain-text, no tags:
-
- p.
- This is a large
- body of text for
- this tag.
-
- Nothing too
- exciting.
-
- Some tags are text-only by default, for example
- _script_, _textarea_, and _style_ tags do not
- contain nested HTML so Jade implies the trailing ".":
-
- script
- if (foo) {
- bar();
- }
-
- style
- body {
- padding: 50px;
- font: 14px Helvetica;
- }
-
-## Template script tags
-
- Sometimes it's useful to define HTML in script
- tags using Jade, typically for client-side templates.
-
- To do this simply give the _script_ tag an arbitrary
- _type_ attribute such as _text/x-template_:
-
- script(type='text/template')
- h1 Look!
- p Jade still works in here!
-
-## Interpolation
-
- Both plain-text and piped-text support interpolation,
- which comes in two forms, escapes and non-escaped. The
- following will output the _user.name_ in the paragraph
- but HTML within it will be escaped to prevent XSS attacks:
-
- p Welcome #{user.name}
-
- The following syntax is identical however it will _not_ escape
- HTML, and should only be used with strings that you trust:
-
- p Welcome !{user.name}
-
-## Inline HTML
-
- Sometimes constructing small inline snippets of HTML
- in Jade can be annoying, luckily we can add plain
- HTML as well:
-
- p Welcome <em>#{user.name}</em>
-
-## Code
-
- To buffer output with Jade simply use _=_ at the beginning
- of a line or after a tag. This method escapes any HTML
- present in the string.
-
- p= user.description
-
- To buffer output unescaped use the _!=_ variant, but again
- be careful of XSS.
-
- p!= user.description
-
- The final way to mess with JavaScript code in Jade is the unbuffered
- _-_, which can be used for conditionals, defining variables etc:
-
- - var user = { description: 'foo bar baz' }
- #user
- - if (user.description) {
- h2 Description
- p.description= user.description
- - }
-
- When compiled blocks are wrapped in anonymous functions, so the
- following is also valid, without braces:
-
- - var user = { description: 'foo bar baz' }
- #user
- - if (user.description)
- h2 Description
- p.description= user.description
-
- If you really want you could even use `.forEach()` and others:
-
- - users.forEach(function(user){
- .user
- h2= user.name
- p User #{user.name} is #{user.age} years old
- - })
-
- Taking this further Jade provides some syntax for conditionals,
- iteration, switch statements etc. Let's look at those next!
-
-## Assignment
-
- Jade's first-class assignment is simple, simply use the _=_
- operator and Jade will _var_ it for you. The following are equivalent:
-
- - var user = { name: 'tobi' }
- user = { name: 'tobi' }
-
-## Conditionals
-
- Jade's first-class conditional syntax allows for optional
- parenthesis, and you may now omit the leading _-_ otherwise
- it's identical, still just regular javascript:
-
- user = { description: 'foo bar baz' }
- #user
- if user.description
- h2 Description
- p.description= user.description
-
- Jade provides the negated version, _unless_ as well, the following
- are equivalent:
-
- - if (!(user.isAnonymous))
- p You're logged in as #{user.name}
-
- unless user.isAnonymous
- p You're logged in as #{user.name}
-
-## Iteration
-
- JavaScript's _for_ loops don't look very declarative, so Jade
- also provides its own _for_ loop construct, aliased as _each_:
-
- for user in users
- .user
- h2= user.name
- p user #{user.name} is #{user.age} year old
-
- As mentioned _each_ is identical:
-
- each user in users
- .user
- h2= user.name
-
- If necessary the index is available as well:
-
- for user, i in users
- .user(class='user-#{i}')
- h2= user.name
-
- Remember, it's just JavaScript:
-
- ul#letters
- for letter in ['a', 'b', 'c']
- li= letter
-
-## Mixins
-
- Mixins provide a way to define jade "functions" which "mix in"
- their contents when called. This is useful for abstracting
- out large fragments of Jade.
-
- The simplest possible mixin which accepts no arguments might
- look like this:
-
- mixin hello
- p Hello
-
- You use a mixin by placing `+` before the name:
-
- +hello
-
- For something a little more dynamic, mixins can take
- arguments, the mixin itself is converted to a javascript
- function internally:
-
- mixin hello(user)
- p Hello #{user}
-
- +hello('Tobi')
-
- Yields:
-
- <p>Hello Tobi</p>
-
- Mixins may optionally take blocks, when a block is passed
- its contents becomes the implicit `block` argument. For
- example here is a mixin passed a block, and also invoked
- without passing a block:
-
- mixin article(title)
- .article
- .article-wrapper
- h1= title
- if block
- block
- else
- p No content provided
-
- +article('Hello world')
-
- +article('Hello world')
- p This is my
- p Amazing article
-
- yields:
-
- <div class="article">
- <div class="article-wrapper">
- <h1>Hello world</h1>
- <p>No content provided</p>
- </div>
- </div>
-
- <div class="article">
- <div class="article-wrapper">
- <h1>Hello world</h1>
- <p>This is my</p>
- <p>Amazing article</p>
- </div>
- </div>
-
- Mixins can even take attributes, just like a tag. When
- attributes are passed they become the implicit `attributes`
- argument. Individual attributes can be accessed just like
- normal object properties:
-
- mixin centered
- .centered(class=attributes.class)
- block
-
- +centered.bold Hello world
-
- +centered.red
- p This is my
- p Amazing article
-
- yields:
-
- <div class="centered bold">Hello world</div>
- <div class="centered red">
- <p>This is my</p>
- <p>Amazing article</p>
- </div>
-
- If you use `attributes` directly, *all* passed attributes
- get used:
-
- mixin link
- a.menu(attributes)
- block
-
- +link.highlight(href='#top') Top
- +link#sec1.plain(href='#section1') Section 1
- +link#sec2.plain(href='#section2') Section 2
-
- yields:
-
- <a href="#top" class="highlight menu">Top</a>
- <a id="sec1" href="#section1" class="plain menu">Section 1</a>
- <a id="sec2" href="#section2" class="plain menu">Section 2</a>
-
- If you pass arguments, they must directly follow the mixin:
-
- mixin list(arr)
- if block
- .title
- block
- ul(attributes)
- each item in arr
- li= item
-
- +list(['foo', 'bar', 'baz'])(id='myList', class='bold')
-
- yields:
-
- <ul id="myList" class="bold">
- <li>foo</li>
- <li>bar</li>
- <li>baz</li>
- </ul>
diff --git a/node_modules/jade/jade.min.js b/node_modules/jade/jade.min.js
deleted file mode 100644
index 93f3b3d0..00000000
--- a/node_modules/jade/jade.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(){function require(p){var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&&reg||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.charAt(0))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i<segs.length;i++){var seg=segs[i];".."==seg?path.pop():"."!=seg&&path.push(seg)}return require(path.join("/"))}},require.register("compiler.js",function(module,exports,require){function isConstant(val){if(/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))return!0;if(!isNaN(Number(val)))return!0;var matches;return(matches=/^ *\[(.*)\] *$/.exec(val))?matches[1].split(",").every(isConstant):!1}function escape(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var nodes=require("./nodes"),filters=require("./filters"),doctypes=require("./doctypes"),selfClosing=require("./self-closing"),runtime=require("./runtime"),utils=require("./utils");Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),String.prototype.trimLeft||(String.prototype.trimLeft=function(){return this.replace(/^\s+/,"")});var Compiler=module.exports=function Compiler(node,options){this.options=options=options||{},this.node=node,this.hasCompiledDoctype=!1,this.hasCompiledTag=!1,this.pp=options.pretty||!1,this.debug=!1!==options.compileDebug,this.indents=0,this.parentIndents=0,options.doctype&&this.setDoctype(options.doctype)};Compiler.prototype={compile:function(){return this.buf=["var interp;"],this.pp&&this.buf.push("var __indent = [];"),this.lastBufferedIdx=-1,this.visit(this.node),this.buf.join("\n")},setDoctype:function(name){name=name&&name.toLowerCase()||"default",this.doctype=doctypes[name]||"<!DOCTYPE "+name+">",this.terse=this.doctype.toLowerCase()=="<!doctype html>",this.xml=0==this.doctype.indexOf("<?xml")},buffer:function(str,esc){esc&&(str=utils.escape(str)),this.lastBufferedIdx==this.buf.length?(this.lastBuffered+=str,this.buf[this.lastBufferedIdx-1]="buf.push('"+this.lastBuffered+"');"):(this.buf.push("buf.push('"+str+"');"),this.lastBuffered=str,this.lastBufferedIdx=this.buf.length)},prettyIndent:function(offset,newline){offset=offset||0,newline=newline?"\\n":"",this.buffer(newline+Array(this.indents+offset).join(" ")),this.parentIndents&&this.buf.push("buf.push.apply(buf, __indent);")},visit:function(node){var debug=this.debug;debug&&this.buf.push("__jade.unshift({ lineno: "+node.line+", filename: "+(node.filename?JSON.stringify(node.filename):"__jade[0].filename")+" });"),!1===node.debug&&this.debug&&(this.buf.pop(),this.buf.pop()),this.visitNode(node),debug&&this.buf.push("__jade.shift();")},visitNode:function(node){var name=node.constructor.name||node.constructor.toString().match(/function ([^(\s]+)()/)[1];return this["visit"+name](node)},visitCase:function(node){var _=this.withinCase;this.withinCase=!0,this.buf.push("switch ("+node.expr+"){"),this.visit(node.block),this.buf.push("}"),this.withinCase=_},visitWhen:function(node){"default"==node.expr?this.buf.push("default:"):this.buf.push("case "+node.expr+":"),this.visit(node.block),this.buf.push(" break;")},visitLiteral:function(node){var str=node.str.replace(/\n/g,"\\\\n");this.buffer(str)},visitBlock:function(block){var len=block.nodes.length,escape=this.escape,pp=this.pp;if(this.parentIndents&&block.mode){pp&&this.buf.push("__indent.push('"+Array(this.indents+1).join(" ")+"');"),this.buf.push("block && block();"),pp&&this.buf.push("__indent.pop();");return}pp&&len>1&&!escape&&block.nodes[0].isText&&block.nodes[1].isText&&this.prettyIndent(1,!0);for(var i=0;i<len;++i)pp&&i>0&&!escape&&block.nodes[i].isText&&block.nodes[i-1].isText&&this.prettyIndent(1,!1),this.visit(block.nodes[i]),block.nodes[i+1]&&block.nodes[i].isText&&block.nodes[i+1].isText&&this.buffer("\\n")},visitDoctype:function(doctype){doctype&&(doctype.val||!this.doctype)&&this.setDoctype(doctype.val||"default"),this.doctype&&this.buffer(this.doctype),this.hasCompiledDoctype=!0},visitMixin:function(mixin){var name=mixin.name.replace(/-/g,"_")+"_mixin",args=mixin.args||"",block=mixin.block,attrs=mixin.attrs,pp=this.pp;if(mixin.call){pp&&this.buf.push("__indent.push('"+Array(this.indents+1).join(" ")+"');");if(block||attrs.length){this.buf.push(name+".call({");if(block){this.buf.push("block: function(){"),this.parentIndents++;var _indents=this.indents;this.indents=0,this.visit(mixin.block),this.indents=_indents,this.parentIndents--,attrs.length?this.buf.push("},"):this.buf.push("}")}if(attrs.length){var val=this.attrs(attrs);val.inherits?this.buf.push("attributes: merge({"+val.buf+"}, attributes), escaped: merge("+val.escaped+", escaped, true)"):this.buf.push("attributes: {"+val.buf+"}, escaped: "+val.escaped)}args?this.buf.push("}, "+args+");"):this.buf.push("});")}else this.buf.push(name+"("+args+");");pp&&this.buf.push("__indent.pop();")}else this.buf.push("var "+name+" = function("+args+"){"),this.buf.push("var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};"),this.parentIndents++,this.visit(block),this.parentIndents--,this.buf.push("};")},visitTag:function(tag){this.indents++;var name=tag.name,pp=this.pp;tag.buffer&&(name="' + ("+name+") + '"),this.hasCompiledTag||(!this.hasCompiledDoctype&&"html"==name&&this.visitDoctype(),this.hasCompiledTag=!0),pp&&!tag.isInline()&&this.prettyIndent(0,!0),(~selfClosing.indexOf(name)||tag.selfClosing)&&!this.xml?(this.buffer("<"+name),this.visitAttributes(tag.attrs),this.terse?this.buffer(">"):this.buffer("/>")):(tag.attrs.length?(this.buffer("<"+name),tag.attrs.length&&this.visitAttributes(tag.attrs),this.buffer(">")):this.buffer("<"+name+">"),tag.code&&this.visitCode(tag.code),this.escape="pre"==tag.name,this.visit(tag.block),pp&&!tag.isInline()&&"pre"!=tag.name&&!tag.canInline()&&this.prettyIndent(0,!0),this.buffer("</"+name+">")),this.indents--},visitFilter:function(filter){var fn=filters[filter.name];if(!fn)throw filter.isASTFilter?new Error('unknown ast filter "'+filter.name+':"'):new Error('unknown filter ":'+filter.name+'"');if(filter.isASTFilter)this.buf.push(fn(filter.block,this,filter.attrs));else{var text=filter.block.nodes.map(function(node){return node.val}).join("\n");filter.attrs=filter.attrs||{},filter.attrs.filename=this.options.filename,this.buffer(utils.text(fn(text,filter.attrs)))}},visitText:function(text){text=utils.text(text.val.replace(/\\/g,"_SLASH_")),this.escape&&(text=escape(text)),text=text.replace(/_SLASH_/g,"\\\\"),this.buffer(text)},visitComment:function(comment){if(!comment.buffer)return;this.pp&&this.prettyIndent(1,!0),this.buffer("<!--"+utils.escape(comment.val)+"-->")},visitBlockComment:function(comment){if(!comment.buffer)return;0==comment.val.trim().indexOf("if")?(this.buffer("<!--["+comment.val.trim()+"]>"),this.visit(comment.block),this.buffer("<![endif]-->")):(this.buffer("<!--"+comment.val),this.visit(comment.block),this.buffer("-->"))},visitCode:function(code){if(code.buffer){var val=code.val.trimLeft();this.buf.push("var __val__ = "+val),val='null == __val__ ? "" : __val__',code.escape&&(val="escape("+val+")"),this.buf.push("buf.push("+val+");")}else this.buf.push(code.val);code.block&&(code.buffer||this.buf.push("{"),this.visit(code.block),code.buffer||this.buf.push("}"))},visitEach:function(each){this.buf.push("// iterate "+each.obj+"\n"+";(function(){\n"+" if ('number' == typeof "+each.obj+".length) {\n"),each.alternative&&this.buf.push(" if ("+each.obj+".length) {"),this.buf.push(" for (var "+each.key+" = 0, $$l = "+each.obj+".length; "+each.key+" < $$l; "+each.key+"++) {\n"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n"),each.alternative&&(this.buf.push(" } else {"),this.visit(each.alternative),this.buf.push(" }")),this.buf.push(" } else {\n var $$l = 0;\n for (var "+each.key+" in "+each.obj+") {\n"+" $$l++;"+" if ("+each.obj+".hasOwnProperty("+each.key+")){"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n"),this.buf.push(" }\n"),each.alternative&&(this.buf.push(" if ($$l === 0) {"),this.visit(each.alternative),this.buf.push(" }")),this.buf.push(" }\n}).call(this);\n")},visitAttributes:function(attrs){var val=this.attrs(attrs);val.inherits?this.buf.push("buf.push(attrs(merge({ "+val.buf+" }, attributes), merge("+val.escaped+", escaped, true)));"):val.constant?(eval("var buf={"+val.buf+"};"),this.buffer(runtime.attrs(buf,JSON.parse(val.escaped)),!0)):this.buf.push("buf.push(attrs({ "+val.buf+" }, "+val.escaped+"));")},attrs:function(attrs){var buf=[],classes=[],escaped={},constant=attrs.every(function(attr){return isConstant(attr.val)}),inherits=!1;return this.terse&&buf.push("terse: true"),attrs.forEach(function(attr){if(attr.name=="attributes")return inherits=!0;escaped[attr.name]=attr.escaped;if(attr.name=="class")classes.push("("+attr.val+")");else{var pair="'"+attr.name+"':("+attr.val+")";buf.push(pair)}}),classes.length&&(classes=classes.join(" + ' ' + "),buf.push("class: "+classes)),{buf:buf.join(", ").replace("class:",'"class":'),escaped:JSON.stringify(escaped),inherits:inherits,constant:constant}}}}),require.register("doctypes.js",function(module,exports,require){module.exports={5:"<!DOCTYPE html>","default":"<!DOCTYPE html>",xml:'<?xml version="1.0" encoding="utf-8" ?>',transitional:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',strict:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',frameset:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',1.1:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',basic:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',mobile:'<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'}}),require.register("filters.js",function(module,exports,require){module.exports={cdata:function(str){return"<![CDATA[\\n"+str+"\\n]]>"},sass:function(str){str=str.replace(/\\n/g,"\n");var sass=require("sass").render(str).replace(/\n/g,"\\n");return'<style type="text/css">'+sass+"</style>"},stylus:function(str,options){var ret;str=str.replace(/\\n/g,"\n");var stylus=require("stylus");return stylus(str,options).render(function(err,css){if(err)throw err;ret=css.replace(/\n/g,"\\n")}),'<style type="text/css">'+ret+"</style>"},less:function(str){var ret;return str=str.replace(/\\n/g,"\n"),require("less").render(str,function(err,css){if(err)throw err;ret='<style type="text/css">'+css.replace(/\n/g,"\\n")+"</style>"}),ret},markdown:function(str){var md;try{md=require("markdown")}catch(err){try{md=require("discount")}catch(err){try{md=require("markdown-js")}catch(err){try{md=require("marked")}catch(err){throw new Error("Cannot find markdown library, install markdown, discount, or marked.")}}}}return str=str.replace(/\\n/g,"\n"),md.parse(str).replace(/\n/g,"\\n").replace(/'/g,"&#39;")},coffeescript:function(str){var js=require("coffee-script").compile(str).replace(/\\/g,"\\\\").replace(/\n/g,"\\n");return'<script type="text/javascript">\\n'+js+"</script>"}}}),require.register("inline-tags.js",function(module,exports,require){module.exports=["a","abbr","acronym","b","br","code","em","font","i","img","ins","kbd","map","samp","small","span","strong","sub","sup"]}),require.register("jade.js",function(module,exports,require){function parse(str,options){try{var parser=new Parser(str,options.filename,options),compiler=new(options.compiler||Compiler)(parser.parse(),options),js=compiler.compile();return options.debug&&console.error("\nCompiled Function:\n\n%s",js.replace(/^/gm," ")),"var buf = [];\n"+(options.self?"var self = locals || {};\n"+js:"with (locals || {}) {\n"+js+"\n}\n")+'return buf.join("");'}catch(err){parser=parser.context(),runtime.rethrow(err,parser.filename,parser.lexer.lineno)}}function stripBOM(str){return 65279==str.charCodeAt(0)?str.substring(1):str}var Parser=require("./parser"),Lexer=require("./lexer"),Compiler=require("./compiler"),runtime=require("./runtime");exports.version="0.27.6",exports.selfClosing=require("./self-closing"),exports.doctypes=require("./doctypes"),exports.filters=require("./filters"),exports.utils=require("./utils"),exports.Compiler=Compiler,exports.Parser=Parser,exports.Lexer=Lexer,exports.nodes=require("./nodes"),exports.runtime=runtime,exports.cache={},exports.compile=function(str,options){var options=options||{},client=options.client,filename=options.filename?JSON.stringify(options.filename):"undefined",fn;return str=stripBOM(String(str)),options.compileDebug!==!1?fn=["var __jade = [{ lineno: 1, filename: "+filename+" }];","try {",parse(str,options),"} catch (err) {"," rethrow(err, __jade[0].filename, __jade[0].lineno);","}"].join("\n"):fn=parse(str,options),client&&(fn="attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n"+fn),fn=new Function("locals, attrs, escape, rethrow, merge",fn),client?fn:function(locals){return fn(locals,runtime.attrs,runtime.escape,runtime.rethrow,runtime.merge)}},exports.render=function(str,options,fn){"function"==typeof options&&(fn=options,options={});if(options.cache&&!options.filename)return fn(new Error('the "filename" option is required for caching'));try{var path=options.filename,tmpl=options.cache?exports.cache[path]||(exports.cache[path]=exports.compile(str,options)):exports.compile(str,options);fn(null,tmpl(options))}catch(err){fn(err)}},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={});try{options.filename=path;var str=options.cache?exports.cache[key]||(exports.cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");exports.render(str,options,fn)}catch(err){fn(err)}},exports.__express=exports.renderFile}),require.register("lexer.js",function(module,exports,require){var utils=require("./utils"),Lexer=module.exports=function Lexer(str,options){options=options||{},this.input=str.replace(/\r\n|\r/g,"\n"),this.colons=options.colons,this.deferredTokens=[],this.lastIndents=0,this.lineno=1,this.stash=[],this.indentStack=[],this.indentRe=null,this.pipeless=!1};Lexer.prototype={tok:function(type,val){return{type:type,line:this.lineno,val:val}},consume:function(len){this.input=this.input.substr(len)},scan:function(regexp,type){var captures;if(captures=regexp.exec(this.input))return this.consume(captures[0].length),this.tok(type,captures[1])},defer:function(tok){this.deferredTokens.push(tok)},lookahead:function(n){var fetch=n-this.stash.length;while(fetch-->0)this.stash.push(this.next());return this.stash[--n]},indexOfDelimiters:function(start,end){var str=this.input,nstart=0,nend=0,pos=0;for(var i=0,len=str.length;i<len;++i)if(start==str.charAt(i))++nstart;else if(end==str.charAt(i)&&++nend==nstart){pos=i;break}return pos},stashed:function(){return this.stash.length&&this.stash.shift()},deferred:function(){return this.deferredTokens.length&&this.deferredTokens.shift()},eos:function(){if(this.input.length)return;return this.indentStack.length?(this.indentStack.shift(),this.tok("outdent")):this.tok("eos")},blank:function(){var captures;if(captures=/^\n *\n/.exec(this.input))return this.consume(captures[0].length-1),++this.lineno,this.pipeless?this.tok("text",""):this.next()},comment:function(){var captures;if(captures=/^ *\/\/(-)?([^\n]*)/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("comment",captures[2]);return tok.buffer="-"!=captures[1],tok}},interpolation:function(){var captures;if(captures=/^#\{(.*?)\}/.exec(this.input))return this.consume(captures[0].length),this.tok("interpolation",captures[1])},tag:function(){var captures;if(captures=/^(\w[-:\w]*)(\/?)/.exec(this.input)){this.consume(captures[0].length);var tok,name=captures[1];if(":"==name[name.length-1]){name=name.slice(0,-1),tok=this.tok("tag",name),this.defer(this.tok(":"));while(" "==this.input[0])this.input=this.input.substr(1)}else tok=this.tok("tag",name);return tok.selfClosing=!!captures[2],tok}},filter:function(){return this.scan(/^:(\w+)/,"filter")},doctype:function(){return this.scan(/^(?:!!!|doctype) *([^\n]+)?/,"doctype")},id:function(){return this.scan(/^#([\w-]+)/,"id")},className:function(){return this.scan(/^\.([\w-]+)/,"class")},text:function(){return this.scan(/^(?:\| ?| ?)?([^\n]+)/,"text")},"extends":function(){return this.scan(/^extends? +([^\n]+)/,"extends")},prepend:function(){var captures;if(captures=/^prepend +([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var mode="prepend",name=captures[1],tok=this.tok("block",name);return tok.mode=mode,tok}},append:function(){var captures;if(captures=/^append +([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var mode="append",name=captures[1],tok=this.tok("block",name);return tok.mode=mode,tok}},block:function(){var captures;if(captures=/^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)){this.consume(captures[0].length);var mode=captures[1]||"replace",name=captures[2],tok=this.tok("block",name);return tok.mode=mode,tok}},yield:function(){return this.scan(/^yield */,"yield")},include:function(){return this.scan(/^include +([^\n]+)/,"include")},"case":function(){return this.scan(/^case +([^\n]+)/,"case")},when:function(){return this.scan(/^when +([^:\n]+)/,"when")},"default":function(){return this.scan(/^default */,"default")},assignment:function(){var captures;if(captures=/^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)){this.consume(captures[0].length);var name=captures[1],val=captures[2];return this.tok("code","var "+name+" = ("+val+");")}},call:function(){var captures;if(captures=/^\+([-\w]+)/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("call",captures[1]);if(captures=/^ *\((.*?)\)/.exec(this.input))/^ *[-\w]+ *=/.test(captures[1])||(this.consume(captures[0].length),tok.args=captures[1]);return tok}},mixin:function(){var captures;if(captures=/^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("mixin",captures[1]);return tok.args=captures[2],tok}},conditional:function(){var captures;if(captures=/^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)){this.consume(captures[0].length);var type=captures[1],js=captures[2];switch(type){case"if":js="if ("+js+")";break;case"unless":js="if (!("+js+"))";break;case"else if":js="else if ("+js+")";break;case"else":js="else"}return this.tok("code",js)}},"while":function(){var captures;if(captures=/^while +([^\n]+)/.exec(this.input))return this.consume(captures[0].length),this.tok("code","while ("+captures[1]+")")},each:function(){var captures;if(captures=/^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("each",captures[1]);return tok.key=captures[2]||"$index",tok.code=captures[3],tok}},code:function(){var captures;if(captures=/^(!?=|-)([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var flags=captures[1];captures[1]=captures[2];var tok=this.tok("code",captures[1]);return tok.escape=flags.charAt(0)==="=",tok.buffer=flags.charAt(0)==="="||flags.charAt(1)==="=",tok}},attrs:function(){if("("==this.input.charAt(0)){var index=this.indexOfDelimiters("(",")"),str=this.input.substr(1,index-1),tok=this.tok("attrs"),len=str.length,colons=this.colons,states=["key"],escapedAttr,key="",val="",quote,c,p;function state(){return states[states.length-1]}function interpolate(attr){return attr.replace(/(\\)?#\{([^}]+)\}/g,function(_,escape,expr){return escape?_:quote+" + ("+expr+") + "+quote})}this.consume(index+1),tok.attrs={},tok.escaped={};function parse(c){var real=c;colons&&":"==c&&(c="=");switch(c){case",":case"\n":switch(state()){case"expr":case"array":case"string":case"object":val+=c;break;default:states.push("key"),val=val.trim(),key=key.trim();if(""==key)return;key=key.replace(/^['"]|['"]$/g,"").replace("!",""),tok.escaped[key]=escapedAttr,tok.attrs[key]=""==val?!0:interpolate(val),key=val=""}break;case"=":switch(state()){case"key char":key+=real;break;case"val":case"expr":case"array":case"string":case"object":val+=real;break;default:escapedAttr="!"!=p,states.push("val")}break;case"(":("val"==state()||"expr"==state())&&states.push("expr"),val+=c;break;case")":("expr"==state()||"val"==state())&&states.pop(),val+=c;break;case"{":"val"==state()&&states.push("object"),val+=c;break;case"}":"object"==state()&&states.pop(),val+=c;break;case"[":"val"==state()&&states.push("array"),val+=c;break;case"]":"array"==state()&&states.pop(),val+=c;break;case'"':case"'":switch(state()){case"key":states.push("key char");break;case"key char":states.pop();break;case"string":c==quote&&states.pop(),val+=c;break;default:states.push("string"),val+=c,quote=c}break;case"":break;default:switch(state()){case"key":case"key char":key+=c;break;default:val+=c}}p=c}for(var i=0;i<len;++i)parse(str.charAt(i));return parse(","),"/"==this.input.charAt(0)&&(this.consume(1),tok.selfClosing=!0),tok}},indent:function(){var captures,re;this.indentRe?captures=this.indentRe.exec(this.input):(re=/^\n(\t*) */,captures=re.exec(this.input),captures&&!captures[1].length&&(re=/^\n( *)/,captures=re.exec(this.input)),captures&&captures[1].length&&(this.indentRe=re));if(captures){var tok,indents=captures[1].length;++this.lineno,this.consume(indents+1);if(" "==this.input[0]||" "==this.input[0])throw new Error("Invalid indentation, you can use tabs or spaces but not both");if("\n"==this.input[0])return this.tok("newline");if(this.indentStack.length&&indents<this.indentStack[0]){while(this.indentStack.length&&this.indentStack[0]>indents)this.stash.push(this.tok("outdent")),this.indentStack.shift();tok=this.stash.pop()}else indents&&indents!=this.indentStack[0]?(this.indentStack.unshift(indents),tok=this.tok("indent",indents)):tok=this.tok("newline");return tok}},pipelessText:function(){if(this.pipeless){if("\n"==this.input[0])return;var i=this.input.indexOf("\n");-1==i&&(i=this.input.length);var str=this.input.substr(0,i);return this.consume(str.length),this.tok("text",str)}},colon:function(){return this.scan(/^: */,":")},advance:function(){return this.stashed()||this.next()},next:function(){return this.deferred()||this.blank()||this.eos()||this.pipelessText()||this.yield()||this.doctype()||this.interpolation()||this["case"]()||this.when()||this["default"]()||this["extends"]()||this.append()||this.prepend()||this.block()||this.include()||this.mixin()||this.call()||this.conditional()||this.each()||this["while"]()||this.assignment()||this.tag()||this.filter()||this.code()||this.id()||this.className()||this.attrs()||this.indent()||this.comment()||this.colon()||this.text()}}}),require.register("nodes/attrs.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Attrs=module.exports=function Attrs(){this.attrs=[]};Attrs.prototype=new Node,Attrs.prototype.constructor=Attrs,Attrs.prototype.setAttribute=function(name,val,escaped){return this.attrs.push({name:name,val:val,escaped:escaped}),this},Attrs.prototype.removeAttribute=function(name){for(var i=0,len=this.attrs.length;i<len;++i)this.attrs[i]&&this.attrs[i].name==name&&delete this.attrs[i]},Attrs.prototype.getAttribute=function(name){for(var i=0,len=this.attrs.length;i<len;++i)if(this.attrs[i]&&this.attrs[i].name==name)return this.attrs[i].val}}),require.register("nodes/block-comment.js",function(module,exports,require){var Node=require("./node"),BlockComment=module.exports=function BlockComment(val,block,buffer){this.block=block,this.val=val,this.buffer=buffer};BlockComment.prototype=new Node,BlockComment.prototype.constructor=BlockComment}),require.register("nodes/block.js",function(module,exports,require){var Node=require("./node"),Block=module.exports=function Block(node){this.nodes=[],node&&this.push(node)};Block.prototype=new Node,Block.prototype.constructor=Block,Block.prototype.isBlock=!0,Block.prototype.replace=function(other){other.nodes=this.nodes},Block.prototype.push=function(node){return this.nodes.push(node)},Block.prototype.isEmpty=function(){return 0==this.nodes.length},Block.prototype.unshift=function(node){return this.nodes.unshift(node)},Block.prototype.includeBlock=function(){var ret=this,node;for(var i=0,len=this.nodes.length;i<len;++i){node=this.nodes[i];if(node.yield)return node;if(node.textOnly)continue;node.includeBlock?ret=node.includeBlock():node.block&&!node.block.isEmpty()&&(ret=node.block.includeBlock());if(ret.yield)return ret}return ret},Block.prototype.clone=function(){var clone=new Block;for(var i=0,len=this.nodes.length;i<len;++i)clone.push(this.nodes[i].clone());return clone}}),require.register("nodes/case.js",function(module,exports,require){var Node=require("./node"),Case=exports=module.exports=function Case(expr,block){this.expr=expr,this.block=block};Case.prototype=new Node,Case.prototype.constructor=Case;var When=exports.When=function When(expr,block){this.expr=expr,this.block=block,this.debug=!1};When.prototype=new Node,When.prototype.constructor=When}),require.register("nodes/code.js",function(module,exports,require){var Node=require("./node"),Code=module.exports=function Code(val,buffer,escape){this.val=val,this.buffer=buffer,this.escape=escape,val.match(/^ *else/)&&(this.debug=!1)};Code.prototype=new Node,Code.prototype.constructor=Code}),require.register("nodes/comment.js",function(module,exports,require){var Node=require("./node"),Comment=module.exports=function Comment(val,buffer){this.val=val,this.buffer=buffer};Comment.prototype=new Node,Comment.prototype.constructor=Comment}),require.register("nodes/doctype.js",function(module,exports,require){var Node=require("./node"),Doctype=module.exports=function Doctype(val){this.val=val};Doctype.prototype=new Node,Doctype.prototype.constructor=Doctype}),require.register("nodes/each.js",function(module,exports,require){var Node=require("./node"),Each=module.exports=function Each(obj,val,key,block){this.obj=obj,this.val=val,this.key=key,this.block=block};Each.prototype=new Node,Each.prototype.constructor=Each}),require.register("nodes/filter.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Filter=module.exports=function Filter(name,block,attrs){this.name=name,this.block=block,this.attrs=attrs,this.isASTFilter=!block.nodes.every(function(node){return node.isText})};Filter.prototype=new Node,Filter.prototype.constructor=Filter}),require.register("nodes/index.js",function(module,exports,require){exports.Node=require("./node"),exports.Tag=require("./tag"),exports.Code=require("./code"),exports.Each=require("./each"),exports.Case=require("./case"),exports.Text=require("./text"),exports.Block=require("./block"),exports.Mixin=require("./mixin"),exports.Filter=require("./filter"),exports.Comment=require("./comment"),exports.Literal=require("./literal"),exports.BlockComment=require("./block-comment"),exports.Doctype=require("./doctype")}),require.register("nodes/literal.js",function(module,exports,require){var Node=require("./node"),Literal=module.exports=function Literal(str){this.str=str.replace(/\\/g,"\\\\").replace(/\n|\r\n/g,"\\n").replace(/'/g,"\\'")};Literal.prototype=new Node,Literal.prototype.constructor=Literal}),require.register("nodes/mixin.js",function(module,exports,require){var Attrs=require("./attrs"),Mixin=module.exports=function Mixin(name,args,block,call){this.name=name,this.args=args,this.block=block,this.attrs=[],this.call=call};Mixin.prototype=new Attrs,Mixin.prototype.constructor=Mixin}),require.register("nodes/node.js",function(module,exports,require){var Node=module.exports=function Node(){};Node.prototype.clone=function(){return this}}),require.register("nodes/tag.js",function(module,exports,require){var Attrs=require("./attrs"),Block=require("./block"),inlineTags=require("../inline-tags"),Tag=module.exports=function Tag(name,block){this.name=name,this.attrs=[],this.block=block||new Block};Tag.prototype=new Attrs,Tag.prototype.constructor=Tag,Tag.prototype.clone=function(){var clone=new Tag(this.name,this.block.clone());return clone.line=this.line,clone.attrs=this.attrs,clone.textOnly=this.textOnly,clone},Tag.prototype.isInline=function(){return~inlineTags.indexOf(this.name)},Tag.prototype.canInline=function(){function isInline(node){return node.isBlock?node.nodes.every(isInline):node.isText||node.isInline&&node.isInline()}var nodes=this.block.nodes;if(!nodes.length)return!0;if(1==nodes.length)return isInline(nodes[0]);if(this.block.nodes.every(isInline)){for(var i=1,len=nodes.length;i<len;++i)if(nodes[i-1].isText&&nodes[i].isText)return!1;return!0}return!1}}),require.register("nodes/text.js",function(module,exports,require){var Node=require("./node"),Text=module.exports=function Text(line){this.val="","string"==typeof line&&(this.val=line)};Text.prototype=new Node,Text.prototype.constructor=Text,Text.prototype.isText=!0}),require.register("parser.js",function(module,exports,require){var Lexer=require("./lexer"),nodes=require("./nodes"),utils=require("./utils"),Parser=exports=module.exports=function Parser(str,filename,options){this.input=str,this.lexer=new Lexer(str,options),this.filename=filename,this.blocks={},this.mixins={},this.options=options,this.contexts=[this]},textOnly=exports.textOnly=["script","style"];Parser.prototype={context:function(parser){if(!parser)return this.contexts.pop();this.contexts.push(parser)},advance:function(){return this.lexer.advance()},skip:function(n){while(n--)this.advance()},peek:function(){return this.lookahead(1)},line:function(){return this.lexer.lineno},lookahead:function(n){return this.lexer.lookahead(n)},parse:function(){var block=new nodes.Block,parser;block.line=this.line();while("eos"!=this.peek().type)"newline"==this.peek().type?this.advance():block.push(this.parseExpr());if(parser=this.extending){this.context(parser);var ast=parser.parse();this.context();for(var name in this.mixins)ast.unshift(this.mixins[name]);return ast}return block},expect:function(type){if(this.peek().type===type)return this.advance();throw new Error('expected "'+type+'", but got "'+this.peek().type+'"')},accept:function(type){if(this.peek().type===type)return this.advance()},parseExpr:function(){switch(this.peek().type){case"tag":return this.parseTag();case"mixin":return this.parseMixin();case"block":return this.parseBlock();case"case":return this.parseCase();case"when":return this.parseWhen();case"default":return this.parseDefault();case"extends":return this.parseExtends();case"include":return this.parseInclude();case"doctype":return this.parseDoctype();case"filter":return this.parseFilter();case"comment":return this.parseComment();case"text":return this.parseText();case"each":return this.parseEach();case"code":return this.parseCode();case"call":return this.parseCall();case"interpolation":return this.parseInterpolation();case"yield":this.advance();var block=new nodes.Block;return block.yield=!0,block;case"id":case"class":var tok=this.advance();return this.lexer.defer(this.lexer.tok("tag","div")),this.lexer.defer(tok),this.parseExpr();default:throw new Error('unexpected token "'+this.peek().type+'"')}},parseText:function(){var tok=this.expect("text"),node=new nodes.Text(tok.val);return node.line=this.line(),node},parseBlockExpansion:function(){return":"==this.peek().type?(this.advance(),new nodes.Block(this.parseExpr())):this.block()},parseCase:function(){var val=this.expect("case").val,node=new nodes.Case(val);return node.line=this.line(),node.block=this.block(),node},parseWhen:function(){var val=this.expect("when").val;return new nodes.Case.When(val,this.parseBlockExpansion())},parseDefault:function(){return this.expect("default"),new nodes.Case.When("default",this.parseBlockExpansion())},parseCode:function(){var tok=this.expect("code"),node=new nodes.Code(tok.val,tok.buffer,tok.escape),block,i=1;node.line=this.line();while(this.lookahead(i)&&"newline"==this.lookahead(i).type)++i;return block="indent"==this.lookahead(i).type,block&&(this.skip(i-1),node.block=this.block(
-)),node},parseComment:function(){var tok=this.expect("comment"),node;return"indent"==this.peek().type?node=new nodes.BlockComment(tok.val,this.block(),tok.buffer):node=new nodes.Comment(tok.val,tok.buffer),node.line=this.line(),node},parseDoctype:function(){var tok=this.expect("doctype"),node=new nodes.Doctype(tok.val);return node.line=this.line(),node},parseFilter:function(){var block,tok=this.expect("filter"),attrs=this.accept("attrs");this.lexer.pipeless=!0,block=this.parseTextBlock(),this.lexer.pipeless=!1;var node=new nodes.Filter(tok.val,block,attrs&&attrs.attrs);return node.line=this.line(),node},parseASTFilter:function(){var block,tok=this.expect("tag"),attrs=this.accept("attrs");this.expect(":"),block=this.block();var node=new nodes.Filter(tok.val,block,attrs&&attrs.attrs);return node.line=this.line(),node},parseEach:function(){var tok=this.expect("each"),node=new nodes.Each(tok.code,tok.val,tok.key);return node.line=this.line(),node.block=this.block(),this.peek().type=="code"&&this.peek().val=="else"&&(this.advance(),node.alternative=this.block()),node},parseExtends:function(){var path=require("path"),fs=require("fs"),dirname=path.dirname,basename=path.basename,join=path.join;if(!this.filename)throw new Error('the "filename" option is required to extend templates');var path=this.expect("extends").val.trim(),dir=dirname(this.filename),path=join(dir,path+".jade"),str=fs.readFileSync(path,"utf8"),parser=new Parser(str,path,this.options);return parser.blocks=this.blocks,parser.contexts=this.contexts,this.extending=parser,new nodes.Literal("")},parseBlock:function(){var block=this.expect("block"),mode=block.mode,name=block.val.trim();block="indent"==this.peek().type?this.block():new nodes.Block(new nodes.Literal(""));var prev=this.blocks[name];if(prev)switch(prev.mode){case"append":block.nodes=block.nodes.concat(prev.nodes),prev=block;break;case"prepend":block.nodes=prev.nodes.concat(block.nodes),prev=block}return block.mode=mode,this.blocks[name]=prev||block},parseInclude:function(){var path=require("path"),fs=require("fs"),dirname=path.dirname,basename=path.basename,join=path.join,path=this.expect("include").val.trim(),dir=dirname(this.filename);if(!this.filename)throw new Error('the "filename" option is required to use includes');~basename(path).indexOf(".")||(path+=".jade");if(".jade"!=path.substr(-5)){var path=join(dir,path),str=fs.readFileSync(path,"utf8");return new nodes.Literal(str)}var path=join(dir,path),str=fs.readFileSync(path,"utf8"),parser=new Parser(str,path,this.options);parser.blocks=utils.merge({},this.blocks),parser.mixins=this.mixins,this.context(parser);var ast=parser.parse();return this.context(),ast.filename=path,"indent"==this.peek().type&&ast.includeBlock().push(this.block()),ast},parseCall:function(){var tok=this.expect("call"),name=tok.val,args=tok.args,mixin=new nodes.Mixin(name,args,new nodes.Block,!0);return this.tag(mixin),mixin.block.isEmpty()&&(mixin.block=null),mixin},parseMixin:function(){var tok=this.expect("mixin"),name=tok.val,args=tok.args,mixin;return"indent"==this.peek().type?(mixin=new nodes.Mixin(name,args,this.block(),!1),this.mixins[name]=mixin,mixin):new nodes.Mixin(name,args,null,!0)},parseTextBlock:function(){var block=new nodes.Block;block.line=this.line();var spaces=this.expect("indent").val;null==this._spaces&&(this._spaces=spaces);var indent=Array(spaces-this._spaces+1).join(" ");while("outdent"!=this.peek().type)switch(this.peek().type){case"newline":this.advance();break;case"indent":this.parseTextBlock().nodes.forEach(function(node){block.push(node)});break;default:var text=new nodes.Text(indent+this.advance().val);text.line=this.line(),block.push(text)}return spaces==this._spaces&&(this._spaces=null),this.expect("outdent"),block},block:function(){var block=new nodes.Block;block.line=this.line(),this.expect("indent");while("outdent"!=this.peek().type)"newline"==this.peek().type?this.advance():block.push(this.parseExpr());return this.expect("outdent"),block},parseInterpolation:function(){var tok=this.advance(),tag=new nodes.Tag(tok.val);return tag.buffer=!0,this.tag(tag)},parseTag:function(){var i=2;"attrs"==this.lookahead(i).type&&++i;if(":"==this.lookahead(i).type&&"indent"==this.lookahead(++i).type)return this.parseASTFilter();var tok=this.advance(),tag=new nodes.Tag(tok.val);return tag.selfClosing=tok.selfClosing,this.tag(tag)},tag:function(tag){var dot;tag.line=this.line();e:for(;;)switch(this.peek().type){case"id":case"class":var tok=this.advance();tag.setAttribute(tok.type,"'"+tok.val+"'");continue;case"attrs":var tok=this.advance(),obj=tok.attrs,escaped=tok.escaped,names=Object.keys(obj);tok.selfClosing&&(tag.selfClosing=!0);for(var i=0,len=names.length;i<len;++i){var name=names[i],val=obj[name];tag.setAttribute(name,val,escaped[name])}continue;default:break e}"."==this.peek().val&&(dot=tag.textOnly=!0,this.advance());switch(this.peek().type){case"text":tag.block.push(this.parseText());break;case"code":tag.code=this.parseCode();break;case":":this.advance(),tag.block=new nodes.Block,tag.block.push(this.parseExpr())}while("newline"==this.peek().type)this.advance();tag.textOnly=tag.textOnly||~textOnly.indexOf(tag.name);if("script"==tag.name){var type=tag.getAttribute("type");!dot&&type&&"text/javascript"!=type.replace(/^['"]|['"]$/g,"")&&(tag.textOnly=!1)}if("indent"==this.peek().type)if(tag.textOnly)this.lexer.pipeless=!0,tag.block=this.parseTextBlock(),this.lexer.pipeless=!1;else{var block=this.block();if(tag.block)for(var i=0,len=block.nodes.length;i<len;++i)tag.block.push(block.nodes[i]);else tag.block=block}return tag}}}),require.register("runtime.js",function(module,exports,require){function nulls(val){return val!=null}Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a},exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i<len;++i){var key=keys[i],val=obj[key];"boolean"==typeof val||null==val?val&&(terse?buf.push(key):buf.push(key+'="'+key+'"')):0==key.indexOf("data")&&"string"!=typeof val?buf.push(key+"='"+JSON.stringify(val)+"'"):"class"==key&&Array.isArray(val)?buf.push(key+'="'+exports.escape(val.join(" "))+'"'):escaped&&escaped[key]?buf.push(key+'="'+exports.escape(val)+'"'):buf.push(key+'="'+val+'"')}}return buf.join(" ")},exports.escape=function escape(html){return String(html).replace(/&(?!(\w+|\#\d+);)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err}}),require.register("self-closing.js",function(module,exports,require){module.exports=["meta","img","link","input","source","area","base","col","br","hr"]}),require.register("utils.js",function(module,exports,require){var interpolate=exports.interpolate=function(str){return str.replace(/(_SLASH_)?([#!]){(.*?)}/g,function(str,escape,flag,code){return code=code.replace(/\\'/g,"'").replace(/_SLASH_/g,"\\"),escape?str.slice(7):"' + "+("!"==flag?"":"escape")+"((interp = "+code+") == null ? '' : interp) + '"})},escape=exports.escape=function(str){return str.replace(/'/g,"\\'")};exports.text=function(str){return interpolate(escape(str))},exports.merge=function(a,b){for(var key in b)a[key]=b[key];return a}}),window.jade=require("jade")})(); \ No newline at end of file
diff --git a/node_modules/jade/lib/compiler.js b/node_modules/jade/lib/compiler.js
deleted file mode 100644
index 7059ce12..00000000
--- a/node_modules/jade/lib/compiler.js
+++ /dev/null
@@ -1,663 +0,0 @@
-
-/*!
- * Jade - Compiler
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('./nodes')
- , filters = require('./filters')
- , doctypes = require('./doctypes')
- , selfClosing = require('./self-closing')
- , runtime = require('./runtime')
- , utils = require('./utils');
-
-// if browser
-//
-// if (!Object.keys) {
-// Object.keys = function(obj){
-// var arr = [];
-// for (var key in obj) {
-// if (obj.hasOwnProperty(key)) {
-// arr.push(key);
-// }
-// }
-// return arr;
-// }
-// }
-//
-// if (!String.prototype.trimLeft) {
-// String.prototype.trimLeft = function(){
-// return this.replace(/^\s+/, '');
-// }
-// }
-//
-// end
-
-
-/**
- * Initialize `Compiler` with the given `node`.
- *
- * @param {Node} node
- * @param {Object} options
- * @api public
- */
-
-var Compiler = module.exports = function Compiler(node, options) {
- this.options = options = options || {};
- this.node = node;
- this.hasCompiledDoctype = false;
- this.hasCompiledTag = false;
- this.pp = options.pretty || false;
- this.debug = false !== options.compileDebug;
- this.indents = 0;
- this.parentIndents = 0;
- if (options.doctype) this.setDoctype(options.doctype);
-};
-
-/**
- * Compiler prototype.
- */
-
-Compiler.prototype = {
-
- /**
- * Compile parse tree to JavaScript.
- *
- * @api public
- */
-
- compile: function(){
- this.buf = ['var interp;'];
- if (this.pp) this.buf.push("var __indent = [];");
- this.lastBufferedIdx = -1;
- this.visit(this.node);
- return this.buf.join('\n');
- },
-
- /**
- * Sets the default doctype `name`. Sets terse mode to `true` when
- * html 5 is used, causing self-closing tags to end with ">" vs "/>",
- * and boolean attributes are not mirrored.
- *
- * @param {string} name
- * @api public
- */
-
- setDoctype: function(name){
- name = (name && name.toLowerCase()) || 'default';
- this.doctype = doctypes[name] || '<!DOCTYPE ' + name + '>';
- this.terse = this.doctype.toLowerCase() == '<!doctype html>';
- this.xml = 0 == this.doctype.indexOf('<?xml');
- },
-
- /**
- * Buffer the given `str` optionally escaped.
- *
- * @param {String} str
- * @param {Boolean} esc
- * @api public
- */
-
- buffer: function(str, esc){
- if (esc) str = utils.escape(str);
-
- if (this.lastBufferedIdx == this.buf.length) {
- this.lastBuffered += str;
- this.buf[this.lastBufferedIdx - 1] = "buf.push('" + this.lastBuffered + "');"
- } else {
- this.buf.push("buf.push('" + str + "');");
- this.lastBuffered = str;
- this.lastBufferedIdx = this.buf.length;
- }
- },
-
- /**
- * Buffer an indent based on the current `indent`
- * property and an additional `offset`.
- *
- * @param {Number} offset
- * @param {Boolean} newline
- * @api public
- */
-
- prettyIndent: function(offset, newline){
- offset = offset || 0;
- newline = newline ? '\\n' : '';
- this.buffer(newline + Array(this.indents + offset).join(' '));
- if (this.parentIndents)
- this.buf.push("buf.push.apply(buf, __indent);");
- },
-
- /**
- * Visit `node`.
- *
- * @param {Node} node
- * @api public
- */
-
- visit: function(node){
- var debug = this.debug;
-
- if (debug) {
- this.buf.push('__jade.unshift({ lineno: ' + node.line
- + ', filename: ' + (node.filename
- ? JSON.stringify(node.filename)
- : '__jade[0].filename')
- + ' });');
- }
-
- // Massive hack to fix our context
- // stack for - else[ if] etc
- if (false === node.debug && this.debug) {
- this.buf.pop();
- this.buf.pop();
- }
-
- this.visitNode(node);
-
- if (debug) this.buf.push('__jade.shift();');
- },
-
- /**
- * Visit `node`.
- *
- * @param {Node} node
- * @api public
- */
-
- visitNode: function(node){
- var name = node.constructor.name
- || node.constructor.toString().match(/function ([^(\s]+)()/)[1];
- return this['visit' + name](node);
- },
-
- /**
- * Visit case `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitCase: function(node){
- var _ = this.withinCase;
- this.withinCase = true;
- this.buf.push('switch (' + node.expr + '){');
- this.visit(node.block);
- this.buf.push('}');
- this.withinCase = _;
- },
-
- /**
- * Visit when `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitWhen: function(node){
- if ('default' == node.expr) {
- this.buf.push('default:');
- } else {
- this.buf.push('case ' + node.expr + ':');
- }
- this.visit(node.block);
- this.buf.push(' break;');
- },
-
- /**
- * Visit literal `node`.
- *
- * @param {Literal} node
- * @api public
- */
-
- visitLiteral: function(node){
- var str = node.str.replace(/\n/g, '\\\\n');
- this.buffer(str);
- },
-
- /**
- * Visit all nodes in `block`.
- *
- * @param {Block} block
- * @api public
- */
-
- visitBlock: function(block){
- var len = block.nodes.length
- , escape = this.escape
- , pp = this.pp
-
- // Block keyword has a special meaning in mixins
- if (this.parentIndents && block.mode) {
- if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');")
- this.buf.push('block && block();');
- if (pp) this.buf.push("__indent.pop();")
- return;
- }
-
- // Pretty print multi-line text
- if (pp && len > 1 && !escape && block.nodes[0].isText && block.nodes[1].isText)
- this.prettyIndent(1, true);
-
- for (var i = 0; i < len; ++i) {
- // Pretty print text
- if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText)
- this.prettyIndent(1, false);
-
- this.visit(block.nodes[i]);
- // Multiple text nodes are separated by newlines
- if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText)
- this.buffer('\\n');
- }
- },
-
- /**
- * Visit `doctype`. Sets terse mode to `true` when html 5
- * is used, causing self-closing tags to end with ">" vs "/>",
- * and boolean attributes are not mirrored.
- *
- * @param {Doctype} doctype
- * @api public
- */
-
- visitDoctype: function(doctype){
- if (doctype && (doctype.val || !this.doctype)) {
- this.setDoctype(doctype.val || 'default');
- }
-
- if (this.doctype) this.buffer(this.doctype);
- this.hasCompiledDoctype = true;
- },
-
- /**
- * Visit `mixin`, generating a function that
- * may be called within the template.
- *
- * @param {Mixin} mixin
- * @api public
- */
-
- visitMixin: function(mixin){
- var name = mixin.name.replace(/-/g, '_') + '_mixin'
- , args = mixin.args || ''
- , block = mixin.block
- , attrs = mixin.attrs
- , pp = this.pp;
-
- if (mixin.call) {
- if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');")
- if (block || attrs.length) {
-
- this.buf.push(name + '.call({');
-
- if (block) {
- this.buf.push('block: function(){');
-
- // Render block with no indents, dynamically added when rendered
- this.parentIndents++;
- var _indents = this.indents;
- this.indents = 0;
- this.visit(mixin.block);
- this.indents = _indents;
- this.parentIndents--;
-
- if (attrs.length) {
- this.buf.push('},');
- } else {
- this.buf.push('}');
- }
- }
-
- if (attrs.length) {
- var val = this.attrs(attrs);
- if (val.inherits) {
- this.buf.push('attributes: merge({' + val.buf
- + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)');
- } else {
- this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped);
- }
- }
-
- if (args) {
- this.buf.push('}, ' + args + ');');
- } else {
- this.buf.push('});');
- }
-
- } else {
- this.buf.push(name + '(' + args + ');');
- }
- if (pp) this.buf.push("__indent.pop();")
- } else {
- this.buf.push('var ' + name + ' = function(' + args + '){');
- this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};');
- this.parentIndents++;
- this.visit(block);
- this.parentIndents--;
- this.buf.push('};');
- }
- },
-
- /**
- * Visit `tag` buffering tag markup, generating
- * attributes, visiting the `tag`'s code and block.
- *
- * @param {Tag} tag
- * @api public
- */
-
- visitTag: function(tag){
- this.indents++;
- var name = tag.name
- , pp = this.pp;
-
- if (tag.buffer) name = "' + (" + name + ") + '";
-
- if (!this.hasCompiledTag) {
- if (!this.hasCompiledDoctype && 'html' == name) {
- this.visitDoctype();
- }
- this.hasCompiledTag = true;
- }
-
- // pretty print
- if (pp && !tag.isInline())
- this.prettyIndent(0, true);
-
- if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) {
- this.buffer('<' + name);
- this.visitAttributes(tag.attrs);
- this.terse
- ? this.buffer('>')
- : this.buffer('/>');
- } else {
- // Optimize attributes buffering
- if (tag.attrs.length) {
- this.buffer('<' + name);
- if (tag.attrs.length) this.visitAttributes(tag.attrs);
- this.buffer('>');
- } else {
- this.buffer('<' + name + '>');
- }
- if (tag.code) this.visitCode(tag.code);
- this.escape = 'pre' == tag.name;
- this.visit(tag.block);
-
- // pretty print
- if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline())
- this.prettyIndent(0, true);
-
- this.buffer('</' + name + '>');
- }
- this.indents--;
- },
-
- /**
- * Visit `filter`, throwing when the filter does not exist.
- *
- * @param {Filter} filter
- * @api public
- */
-
- visitFilter: function(filter){
- var fn = filters[filter.name];
-
- // unknown filter
- if (!fn) {
- if (filter.isASTFilter) {
- throw new Error('unknown ast filter "' + filter.name + ':"');
- } else {
- throw new Error('unknown filter ":' + filter.name + '"');
- }
- }
-
- if (filter.isASTFilter) {
- this.buf.push(fn(filter.block, this, filter.attrs));
- } else {
- var text = filter.block.nodes.map(function(node){ return node.val }).join('\n');
- filter.attrs = filter.attrs || {};
- filter.attrs.filename = this.options.filename;
- this.buffer(utils.text(fn(text, filter.attrs)));
- }
- },
-
- /**
- * Visit `text` node.
- *
- * @param {Text} text
- * @api public
- */
-
- visitText: function(text){
- text = utils.text(text.val.replace(/\\/g, '_SLASH_'));
- if (this.escape) text = escape(text);
- text = text.replace(/_SLASH_/g, '\\\\');
- this.buffer(text);
- },
-
- /**
- * Visit a `comment`, only buffering when the buffer flag is set.
- *
- * @param {Comment} comment
- * @api public
- */
-
- visitComment: function(comment){
- if (!comment.buffer) return;
- if (this.pp) this.prettyIndent(1, true);
- this.buffer('<!--' + utils.escape(comment.val) + '-->');
- },
-
- /**
- * Visit a `BlockComment`.
- *
- * @param {Comment} comment
- * @api public
- */
-
- visitBlockComment: function(comment){
- if (!comment.buffer) return;
- if (0 == comment.val.trim().indexOf('if')) {
- this.buffer('<!--[' + comment.val.trim() + ']>');
- this.visit(comment.block);
- this.buffer('<![endif]-->');
- } else {
- this.buffer('<!--' + comment.val);
- this.visit(comment.block);
- this.buffer('-->');
- }
- },
-
- /**
- * Visit `code`, respecting buffer / escape flags.
- * If the code is followed by a block, wrap it in
- * a self-calling function.
- *
- * @param {Code} code
- * @api public
- */
-
- visitCode: function(code){
- // Wrap code blocks with {}.
- // we only wrap unbuffered code blocks ATM
- // since they are usually flow control
-
- // Buffer code
- if (code.buffer) {
- var val = code.val.trimLeft();
- this.buf.push('var __val__ = ' + val);
- val = 'null == __val__ ? "" : __val__';
- if (code.escape) val = 'escape(' + val + ')';
- this.buf.push("buf.push(" + val + ");");
- } else {
- this.buf.push(code.val);
- }
-
- // Block support
- if (code.block) {
- if (!code.buffer) this.buf.push('{');
- this.visit(code.block);
- if (!code.buffer) this.buf.push('}');
- }
- },
-
- /**
- * Visit `each` block.
- *
- * @param {Each} each
- * @api public
- */
-
- visitEach: function(each){
- this.buf.push(''
- + '// iterate ' + each.obj + '\n'
- + ';(function(){\n'
- + ' if (\'number\' == typeof ' + each.obj + '.length) {\n');
-
- if (each.alternative) {
- this.buf.push(' if (' + each.obj + '.length) {');
- }
-
- this.buf.push(''
- + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n'
- + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
- this.visit(each.block);
-
- this.buf.push(' }\n');
-
- if (each.alternative) {
- this.buf.push(' } else {');
- this.visit(each.alternative);
- this.buf.push(' }');
- }
-
- this.buf.push(''
- + ' } else {\n'
- + ' var $$l = 0;\n'
- + ' for (var ' + each.key + ' in ' + each.obj + ') {\n'
- + ' $$l++;'
- // if browser
- // + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){'
- // end
- + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
- this.visit(each.block);
-
- // if browser
- // this.buf.push(' }\n');
- // end
-
- this.buf.push(' }\n');
- if (each.alternative) {
- this.buf.push(' if ($$l === 0) {');
- this.visit(each.alternative);
- this.buf.push(' }');
- }
- this.buf.push(' }\n}).call(this);\n');
- },
-
- /**
- * Visit `attrs`.
- *
- * @param {Array} attrs
- * @api public
- */
-
- visitAttributes: function(attrs){
- var val = this.attrs(attrs);
- if (val.inherits) {
- this.buf.push("buf.push(attrs(merge({ " + val.buf +
- " }, attributes), merge(" + val.escaped + ", escaped, true)));");
- } else if (val.constant) {
- eval('var buf={' + val.buf + '};');
- this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true);
- } else {
- this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));");
- }
- },
-
- /**
- * Compile attributes.
- */
-
- attrs: function(attrs){
- var buf = []
- , classes = []
- , escaped = {}
- , constant = attrs.every(function(attr){ return isConstant(attr.val) })
- , inherits = false;
-
- if (this.terse) buf.push('terse: true');
-
- attrs.forEach(function(attr){
- if (attr.name == 'attributes') return inherits = true;
- escaped[attr.name] = attr.escaped;
- if (attr.name == 'class') {
- classes.push('(' + attr.val + ')');
- } else {
- var pair = "'" + attr.name + "':(" + attr.val + ')';
- buf.push(pair);
- }
- });
-
- if (classes.length) {
- classes = classes.join(" + ' ' + ");
- buf.push("class: " + classes);
- }
-
- return {
- buf: buf.join(', ').replace('class:', '"class":'),
- escaped: JSON.stringify(escaped),
- inherits: inherits,
- constant: constant
- };
- }
-};
-
-/**
- * Check if expression can be evaluated to a constant
- *
- * @param {String} expression
- * @return {Boolean}
- * @api private
- */
-
-function isConstant(val){
- // Check strings/literals
- if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))
- return true;
-
- // Check numbers
- if (!isNaN(Number(val)))
- return true;
-
- // Check arrays
- var matches;
- if (matches = /^ *\[(.*)\] *$/.exec(val))
- return matches[1].split(',').every(isConstant);
-
- return false;
-}
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-function escape(html){
- return String(html)
- .replace(/&(?!\w+;)/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/"/g, '&quot;');
-}
diff --git a/node_modules/jade/lib/doctypes.js b/node_modules/jade/lib/doctypes.js
deleted file mode 100644
index e87ca1e4..00000000
--- a/node_modules/jade/lib/doctypes.js
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*!
- * Jade - doctypes
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = {
- '5': '<!DOCTYPE html>'
- , 'default': '<!DOCTYPE html>'
- , 'xml': '<?xml version="1.0" encoding="utf-8" ?>'
- , 'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
- , 'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
- , 'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
- , '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
- , 'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
- , 'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-}; \ No newline at end of file
diff --git a/node_modules/jade/lib/filters.js b/node_modules/jade/lib/filters.js
deleted file mode 100644
index 37666324..00000000
--- a/node_modules/jade/lib/filters.js
+++ /dev/null
@@ -1,96 +0,0 @@
-
-/*!
- * Jade - filters
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = {
-
- /**
- * Wrap text with CDATA block.
- */
-
- cdata: function(str){
- return '<![CDATA[\\n' + str + '\\n]]>';
- },
-
- /**
- * Transform sass to css, wrapped in style tags.
- */
-
- sass: function(str){
- str = str.replace(/\\n/g, '\n');
- var sass = require('sass').render(str).replace(/\n/g, '\\n');
- return '<style type="text/css">' + sass + '</style>';
- },
-
- /**
- * Transform stylus to css, wrapped in style tags.
- */
-
- stylus: function(str, options){
- var ret;
- str = str.replace(/\\n/g, '\n');
- var stylus = require('stylus');
- stylus(str, options).render(function(err, css){
- if (err) throw err;
- ret = css.replace(/\n/g, '\\n');
- });
- return '<style type="text/css">' + ret + '</style>';
- },
-
- /**
- * Transform less to css, wrapped in style tags.
- */
-
- less: function(str){
- var ret;
- str = str.replace(/\\n/g, '\n');
- require('less').render(str, function(err, css){
- if (err) throw err;
- ret = '<style type="text/css">' + css.replace(/\n/g, '\\n') + '</style>';
- });
- return ret;
- },
-
- /**
- * Transform markdown to html.
- */
-
- markdown: function(str){
- var md;
-
- // support markdown / discount
- try {
- md = require('markdown');
- } catch (err){
- try {
- md = require('discount');
- } catch (err) {
- try {
- md = require('markdown-js');
- } catch (err) {
- try {
- md = require('marked');
- } catch (err) {
- throw new
- Error('Cannot find markdown library, install markdown, discount, or marked.');
- }
- }
- }
- }
-
- str = str.replace(/\\n/g, '\n');
- return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'&#39;');
- },
-
- /**
- * Transform coffeescript to javascript.
- */
-
- coffeescript: function(str){
- var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n');
- return '<script type="text/javascript">\\n' + js + '</script>';
- }
-};
diff --git a/node_modules/jade/lib/inline-tags.js b/node_modules/jade/lib/inline-tags.js
deleted file mode 100644
index 491de0b5..00000000
--- a/node_modules/jade/lib/inline-tags.js
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*!
- * Jade - inline tags
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = [
- 'a'
- , 'abbr'
- , 'acronym'
- , 'b'
- , 'br'
- , 'code'
- , 'em'
- , 'font'
- , 'i'
- , 'img'
- , 'ins'
- , 'kbd'
- , 'map'
- , 'samp'
- , 'small'
- , 'span'
- , 'strong'
- , 'sub'
- , 'sup'
-]; \ No newline at end of file
diff --git a/node_modules/jade/lib/jade.js b/node_modules/jade/lib/jade.js
deleted file mode 100644
index 3021156a..00000000
--- a/node_modules/jade/lib/jade.js
+++ /dev/null
@@ -1,253 +0,0 @@
-/*!
- * Jade
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Parser = require('./parser')
- , Lexer = require('./lexer')
- , Compiler = require('./compiler')
- , runtime = require('./runtime')
-// if node
- , fs = require('fs');
-// end
-
-/**
- * Library version.
- */
-
-exports.version = '0.27.7';
-
-/**
- * Expose self closing tags.
- */
-
-exports.selfClosing = require('./self-closing');
-
-/**
- * Default supported doctypes.
- */
-
-exports.doctypes = require('./doctypes');
-
-/**
- * Text filters.
- */
-
-exports.filters = require('./filters');
-
-/**
- * Utilities.
- */
-
-exports.utils = require('./utils');
-
-/**
- * Expose `Compiler`.
- */
-
-exports.Compiler = Compiler;
-
-/**
- * Expose `Parser`.
- */
-
-exports.Parser = Parser;
-
-/**
- * Expose `Lexer`.
- */
-
-exports.Lexer = Lexer;
-
-/**
- * Nodes.
- */
-
-exports.nodes = require('./nodes');
-
-/**
- * Jade runtime helpers.
- */
-
-exports.runtime = runtime;
-
-/**
- * Template function cache.
- */
-
-exports.cache = {};
-
-/**
- * Parse the given `str` of jade and return a function body.
- *
- * @param {String} str
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function parse(str, options){
- try {
- // Parse
- var parser = new Parser(str, options.filename, options);
-
- // Compile
- var compiler = new (options.compiler || Compiler)(parser.parse(), options)
- , js = compiler.compile();
-
- // Debug compiler
- if (options.debug) {
- console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' '));
- }
-
- return ''
- + 'var buf = [];\n'
- + (options.self
- ? 'var self = locals || {};\n' + js
- : 'with (locals || {}) {\n' + js + '\n}\n')
- + 'return buf.join("");';
- } catch (err) {
- parser = parser.context();
- runtime.rethrow(err, parser.filename, parser.lexer.lineno);
- }
-}
-
-/**
- * Strip any UTF-8 BOM off of the start of `str`, if it exists.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-function stripBOM(str){
- return 0xFEFF == str.charCodeAt(0)
- ? str.substring(1)
- : str;
-}
-
-/**
- * Compile a `Function` representation of the given jade `str`.
- *
- * Options:
- *
- * - `compileDebug` when `false` debugging code is stripped from the compiled template
- * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()`
- * for use with the Jade client-side runtime.js
- *
- * @param {String} str
- * @param {Options} options
- * @return {Function}
- * @api public
- */
-
-exports.compile = function(str, options){
- var options = options || {}
- , client = options.client
- , filename = options.filename
- ? JSON.stringify(options.filename)
- : 'undefined'
- , fn;
-
- str = stripBOM(String(str));
-
- if (options.compileDebug !== false) {
- fn = [
- 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];'
- , 'try {'
- , parse(str, options)
- , '} catch (err) {'
- , ' rethrow(err, __jade[0].filename, __jade[0].lineno);'
- , '}'
- ].join('\n');
- } else {
- fn = parse(str, options);
- }
-
- if (client) {
- fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn;
- }
-
- fn = new Function('locals, attrs, escape, rethrow, merge', fn);
-
- if (client) return fn;
-
- return function(locals){
- return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge);
- };
-};
-
-/**
- * Render the given `str` of jade and invoke
- * the callback `fn(err, str)`.
- *
- * Options:
- *
- * - `cache` enable template caching
- * - `filename` filename required for `include` / `extends` and caching
- *
- * @param {String} str
- * @param {Object|Function} options or fn
- * @param {Function} fn
- * @api public
- */
-
-exports.render = function(str, options, fn){
- // swap args
- if ('function' == typeof options) {
- fn = options, options = {};
- }
-
- // cache requires .filename
- if (options.cache && !options.filename) {
- return fn(new Error('the "filename" option is required for caching'));
- }
-
- try {
- var path = options.filename;
- var tmpl = options.cache
- ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options))
- : exports.compile(str, options);
- fn(null, tmpl(options));
- } catch (err) {
- fn(err);
- }
-};
-
-/**
- * Render a Jade file at the given `path` and callback `fn(err, str)`.
- *
- * @param {String} path
- * @param {Object|Function} options or callback
- * @param {Function} fn
- * @api public
- */
-
-exports.renderFile = function(path, options, fn){
- var key = path + ':string';
-
- if ('function' == typeof options) {
- fn = options, options = {};
- }
-
- try {
- options.filename = path;
- var str = options.cache
- ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8'))
- : fs.readFileSync(path, 'utf8');
- exports.render(str, options, fn);
- } catch (err) {
- fn(err);
- }
-};
-
-/**
- * Express support.
- */
-
-exports.__express = exports.renderFile;
diff --git a/node_modules/jade/lib/lexer.js b/node_modules/jade/lib/lexer.js
deleted file mode 100644
index 1e0bfff7..00000000
--- a/node_modules/jade/lib/lexer.js
+++ /dev/null
@@ -1,775 +0,0 @@
-/*!
- * Jade - Lexer
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-var utils = require('./utils');
-
-/**
- * Initialize `Lexer` with the given `str`.
- *
- * Options:
- *
- * - `colons` allow colons for attr delimiters
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Lexer = module.exports = function Lexer(str, options) {
- options = options || {};
- this.input = str.replace(/\r\n|\r/g, '\n');
- this.colons = options.colons;
- this.deferredTokens = [];
- this.lastIndents = 0;
- this.lineno = 1;
- this.stash = [];
- this.indentStack = [];
- this.indentRe = null;
- this.pipeless = false;
-};
-
-/**
- * Lexer prototype.
- */
-
-Lexer.prototype = {
-
- /**
- * Construct a token with the given `type` and `val`.
- *
- * @param {String} type
- * @param {String} val
- * @return {Object}
- * @api private
- */
-
- tok: function(type, val){
- return {
- type: type
- , line: this.lineno
- , val: val
- }
- },
-
- /**
- * Consume the given `len` of input.
- *
- * @param {Number} len
- * @api private
- */
-
- consume: function(len){
- this.input = this.input.substr(len);
- },
-
- /**
- * Scan for `type` with the given `regexp`.
- *
- * @param {String} type
- * @param {RegExp} regexp
- * @return {Object}
- * @api private
- */
-
- scan: function(regexp, type){
- var captures;
- if (captures = regexp.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok(type, captures[1]);
- }
- },
-
- /**
- * Defer the given `tok`.
- *
- * @param {Object} tok
- * @api private
- */
-
- defer: function(tok){
- this.deferredTokens.push(tok);
- },
-
- /**
- * Lookahead `n` tokens.
- *
- * @param {Number} n
- * @return {Object}
- * @api private
- */
-
- lookahead: function(n){
- var fetch = n - this.stash.length;
- while (fetch-- > 0) this.stash.push(this.next());
- return this.stash[--n];
- },
-
- /**
- * Return the indexOf `start` / `end` delimiters.
- *
- * @param {String} start
- * @param {String} end
- * @return {Number}
- * @api private
- */
-
- indexOfDelimiters: function(start, end){
- var str = this.input
- , nstart = 0
- , nend = 0
- , pos = 0;
- for (var i = 0, len = str.length; i < len; ++i) {
- if (start == str.charAt(i)) {
- ++nstart;
- } else if (end == str.charAt(i)) {
- if (++nend == nstart) {
- pos = i;
- break;
- }
- }
- }
- return pos;
- },
-
- /**
- * Stashed token.
- */
-
- stashed: function() {
- return this.stash.length
- && this.stash.shift();
- },
-
- /**
- * Deferred token.
- */
-
- deferred: function() {
- return this.deferredTokens.length
- && this.deferredTokens.shift();
- },
-
- /**
- * end-of-source.
- */
-
- eos: function() {
- if (this.input.length) return;
- if (this.indentStack.length) {
- this.indentStack.shift();
- return this.tok('outdent');
- } else {
- return this.tok('eos');
- }
- },
-
- /**
- * Blank line.
- */
-
- blank: function() {
- var captures;
- if (captures = /^\n *\n/.exec(this.input)) {
- this.consume(captures[0].length - 1);
- ++this.lineno;
- if (this.pipeless) return this.tok('text', '');
- return this.next();
- }
- },
-
- /**
- * Comment.
- */
-
- comment: function() {
- var captures;
- if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('comment', captures[2]);
- tok.buffer = '-' != captures[1];
- return tok;
- }
- },
-
- /**
- * Interpolated tag.
- */
-
- interpolation: function() {
- var captures;
- if (captures = /^#\{(.*?)\}/.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok('interpolation', captures[1]);
- }
- },
-
- /**
- * Tag.
- */
-
- tag: function() {
- var captures;
- if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok, name = captures[1];
- if (':' == name[name.length - 1]) {
- name = name.slice(0, -1);
- tok = this.tok('tag', name);
- this.defer(this.tok(':'));
- while (' ' == this.input[0]) this.input = this.input.substr(1);
- } else {
- tok = this.tok('tag', name);
- }
- tok.selfClosing = !! captures[2];
- return tok;
- }
- },
-
- /**
- * Filter.
- */
-
- filter: function() {
- return this.scan(/^:(\w+)/, 'filter');
- },
-
- /**
- * Doctype.
- */
-
- doctype: function() {
- return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype');
- },
-
- /**
- * Id.
- */
-
- id: function() {
- return this.scan(/^#([\w-]+)/, 'id');
- },
-
- /**
- * Class.
- */
-
- className: function() {
- return this.scan(/^\.([\w-]+)/, 'class');
- },
-
- /**
- * Text.
- */
-
- text: function() {
- return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text');
- },
-
- /**
- * Extends.
- */
-
- "extends": function() {
- return this.scan(/^extends? +([^\n]+)/, 'extends');
- },
-
- /**
- * Block prepend.
- */
-
- prepend: function() {
- var captures;
- if (captures = /^prepend +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = 'prepend'
- , name = captures[1]
- , tok = this.tok('block', name);
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Block append.
- */
-
- append: function() {
- var captures;
- if (captures = /^append +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = 'append'
- , name = captures[1]
- , tok = this.tok('block', name);
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Block.
- */
-
- block: function() {
- var captures;
- if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var mode = captures[1] || 'replace'
- , name = captures[2]
- , tok = this.tok('block', name);
-
- tok.mode = mode;
- return tok;
- }
- },
-
- /**
- * Yield.
- */
-
- yield: function() {
- return this.scan(/^yield */, 'yield');
- },
-
- /**
- * Include.
- */
-
- include: function() {
- return this.scan(/^include +([^\n]+)/, 'include');
- },
-
- /**
- * Case.
- */
-
- "case": function() {
- return this.scan(/^case +([^\n]+)/, 'case');
- },
-
- /**
- * When.
- */
-
- when: function() {
- return this.scan(/^when +([^:\n]+)/, 'when');
- },
-
- /**
- * Default.
- */
-
- "default": function() {
- return this.scan(/^default */, 'default');
- },
-
- /**
- * Assignment.
- */
-
- assignment: function() {
- var captures;
- if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) {
- this.consume(captures[0].length);
- var name = captures[1]
- , val = captures[2];
- return this.tok('code', 'var ' + name + ' = (' + val + ');');
- }
- },
-
- /**
- * Call mixin.
- */
-
- call: function(){
- var captures;
- if (captures = /^\+([-\w]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('call', captures[1]);
-
- // Check for args (not attributes)
- if (captures = /^ *\((.*?)\)/.exec(this.input)) {
- if (!/^ *[-\w]+ *=/.test(captures[1])) {
- this.consume(captures[0].length);
- tok.args = captures[1];
- }
- }
-
- return tok;
- }
- },
-
- /**
- * Mixin.
- */
-
- mixin: function(){
- var captures;
- if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('mixin', captures[1]);
- tok.args = captures[2];
- return tok;
- }
- },
-
- /**
- * Conditional.
- */
-
- conditional: function() {
- var captures;
- if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) {
- this.consume(captures[0].length);
- var type = captures[1]
- , js = captures[2];
-
- switch (type) {
- case 'if': js = 'if (' + js + ')'; break;
- case 'unless': js = 'if (!(' + js + '))'; break;
- case 'else if': js = 'else if (' + js + ')'; break;
- case 'else': js = 'else'; break;
- }
-
- return this.tok('code', js);
- }
- },
-
- /**
- * While.
- */
-
- "while": function() {
- var captures;
- if (captures = /^while +([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- return this.tok('code', 'while (' + captures[1] + ')');
- }
- },
-
- /**
- * Each.
- */
-
- each: function() {
- var captures;
- if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var tok = this.tok('each', captures[1]);
- tok.key = captures[2] || '$index';
- tok.code = captures[3];
- return tok;
- }
- },
-
- /**
- * Code.
- */
-
- code: function() {
- var captures;
- if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) {
- this.consume(captures[0].length);
- var flags = captures[1];
- captures[1] = captures[2];
- var tok = this.tok('code', captures[1]);
- tok.escape = flags.charAt(0) === '=';
- tok.buffer = flags.charAt(0) === '=' || flags.charAt(1) === '=';
- return tok;
- }
- },
-
- /**
- * Attributes.
- */
-
- attrs: function() {
- if ('(' == this.input.charAt(0)) {
- var index = this.indexOfDelimiters('(', ')')
- , str = this.input.substr(1, index-1)
- , tok = this.tok('attrs')
- , len = str.length
- , colons = this.colons
- , states = ['key']
- , escapedAttr
- , key = ''
- , val = ''
- , quote
- , c
- , p;
-
- function state(){
- return states[states.length - 1];
- }
-
- function interpolate(attr) {
- return attr.replace(/(\\)?#\{([^}]+)\}/g, function(_, escape, expr){
- return escape
- ? _
- : quote + " + (" + expr + ") + " + quote;
- });
- }
-
- this.consume(index + 1);
- tok.attrs = {};
- tok.escaped = {};
-
- function parse(c) {
- var real = c;
- // TODO: remove when people fix ":"
- if (colons && ':' == c) c = '=';
- switch (c) {
- case ',':
- case '\n':
- switch (state()) {
- case 'expr':
- case 'array':
- case 'string':
- case 'object':
- val += c;
- break;
- default:
- states.push('key');
- val = val.trim();
- key = key.trim();
- if ('' == key) return;
- key = key.replace(/^['"]|['"]$/g, '').replace('!', '');
- tok.escaped[key] = escapedAttr;
- tok.attrs[key] = '' == val
- ? true
- : interpolate(val);
- key = val = '';
- }
- break;
- case '=':
- switch (state()) {
- case 'key char':
- key += real;
- break;
- case 'val':
- case 'expr':
- case 'array':
- case 'string':
- case 'object':
- val += real;
- break;
- default:
- escapedAttr = '!' != p;
- states.push('val');
- }
- break;
- case '(':
- if ('val' == state()
- || 'expr' == state()) states.push('expr');
- val += c;
- break;
- case ')':
- if ('expr' == state()
- || 'val' == state()) states.pop();
- val += c;
- break;
- case '{':
- if ('val' == state()) states.push('object');
- val += c;
- break;
- case '}':
- if ('object' == state()) states.pop();
- val += c;
- break;
- case '[':
- if ('val' == state()) states.push('array');
- val += c;
- break;
- case ']':
- if ('array' == state()) states.pop();
- val += c;
- break;
- case '"':
- case "'":
- switch (state()) {
- case 'key':
- states.push('key char');
- break;
- case 'key char':
- states.pop();
- break;
- case 'string':
- if (c == quote) states.pop();
- val += c;
- break;
- default:
- states.push('string');
- val += c;
- quote = c;
- }
- break;
- case '':
- break;
- default:
- switch (state()) {
- case 'key':
- case 'key char':
- key += c;
- break;
- default:
- val += c;
- }
- }
- p = c;
- }
-
- for (var i = 0; i < len; ++i) {
- parse(str.charAt(i));
- }
-
- parse(',');
-
- if ('/' == this.input.charAt(0)) {
- this.consume(1);
- tok.selfClosing = true;
- }
-
- return tok;
- }
- },
-
- /**
- * Indent | Outdent | Newline.
- */
-
- indent: function() {
- var captures, re;
-
- // established regexp
- if (this.indentRe) {
- captures = this.indentRe.exec(this.input);
- // determine regexp
- } else {
- // tabs
- re = /^\n(\t*) */;
- captures = re.exec(this.input);
-
- // spaces
- if (captures && !captures[1].length) {
- re = /^\n( *)/;
- captures = re.exec(this.input);
- }
-
- // established
- if (captures && captures[1].length) this.indentRe = re;
- }
-
- if (captures) {
- var tok
- , indents = captures[1].length;
-
- ++this.lineno;
- this.consume(indents + 1);
-
- if (' ' == this.input[0] || '\t' == this.input[0]) {
- throw new Error('Invalid indentation, you can use tabs or spaces but not both');
- }
-
- // blank line
- if ('\n' == this.input[0]) return this.tok('newline');
-
- // outdent
- if (this.indentStack.length && indents < this.indentStack[0]) {
- while (this.indentStack.length && this.indentStack[0] > indents) {
- this.stash.push(this.tok('outdent'));
- this.indentStack.shift();
- }
- tok = this.stash.pop();
- // indent
- } else if (indents && indents != this.indentStack[0]) {
- this.indentStack.unshift(indents);
- tok = this.tok('indent', indents);
- // newline
- } else {
- tok = this.tok('newline');
- }
-
- return tok;
- }
- },
-
- /**
- * Pipe-less text consumed only when
- * pipeless is true;
- */
-
- pipelessText: function() {
- if (this.pipeless) {
- if ('\n' == this.input[0]) return;
- var i = this.input.indexOf('\n');
- if (-1 == i) i = this.input.length;
- var str = this.input.substr(0, i);
- this.consume(str.length);
- return this.tok('text', str);
- }
- },
-
- /**
- * ':'
- */
-
- colon: function() {
- return this.scan(/^: */, ':');
- },
-
- /**
- * Return the next token object, or those
- * previously stashed by lookahead.
- *
- * @return {Object}
- * @api private
- */
-
- advance: function(){
- return this.stashed()
- || this.next();
- },
-
- /**
- * Return the next token object.
- *
- * @return {Object}
- * @api private
- */
-
- next: function() {
- return this.deferred()
- || this.blank()
- || this.eos()
- || this.pipelessText()
- || this.yield()
- || this.doctype()
- || this.interpolation()
- || this["case"]()
- || this.when()
- || this["default"]()
- || this["extends"]()
- || this.append()
- || this.prepend()
- || this.block()
- || this.include()
- || this.mixin()
- || this.call()
- || this.conditional()
- || this.each()
- || this["while"]()
- || this.assignment()
- || this.tag()
- || this.filter()
- || this.code()
- || this.id()
- || this.className()
- || this.attrs()
- || this.indent()
- || this.comment()
- || this.colon()
- || this.text();
- }
-};
diff --git a/node_modules/jade/lib/nodes/attrs.js b/node_modules/jade/lib/nodes/attrs.js
deleted file mode 100644
index 5de9b59c..00000000
--- a/node_modules/jade/lib/nodes/attrs.js
+++ /dev/null
@@ -1,77 +0,0 @@
-
-/*!
- * Jade - nodes - Attrs
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node'),
- Block = require('./block');
-
-/**
- * Initialize a `Attrs` node.
- *
- * @api public
- */
-
-var Attrs = module.exports = function Attrs() {
- this.attrs = [];
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Attrs.prototype.__proto__ = Node.prototype;
-
-/**
- * Set attribute `name` to `val`, keep in mind these become
- * part of a raw js object literal, so to quote a value you must
- * '"quote me"', otherwise or example 'user.name' is literal JavaScript.
- *
- * @param {String} name
- * @param {String} val
- * @param {Boolean} escaped
- * @return {Tag} for chaining
- * @api public
- */
-
-Attrs.prototype.setAttribute = function(name, val, escaped){
- this.attrs.push({ name: name, val: val, escaped: escaped });
- return this;
-};
-
-/**
- * Remove attribute `name` when present.
- *
- * @param {String} name
- * @api public
- */
-
-Attrs.prototype.removeAttribute = function(name){
- for (var i = 0, len = this.attrs.length; i < len; ++i) {
- if (this.attrs[i] && this.attrs[i].name == name) {
- delete this.attrs[i];
- }
- }
-};
-
-/**
- * Get attribute value by `name`.
- *
- * @param {String} name
- * @return {String}
- * @api public
- */
-
-Attrs.prototype.getAttribute = function(name){
- for (var i = 0, len = this.attrs.length; i < len; ++i) {
- if (this.attrs[i] && this.attrs[i].name == name) {
- return this.attrs[i].val;
- }
- }
-};
diff --git a/node_modules/jade/lib/nodes/block-comment.js b/node_modules/jade/lib/nodes/block-comment.js
deleted file mode 100644
index 4f41e4a5..00000000
--- a/node_modules/jade/lib/nodes/block-comment.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*!
- * Jade - nodes - BlockComment
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `BlockComment` with the given `block`.
- *
- * @param {String} val
- * @param {Block} block
- * @param {Boolean} buffer
- * @api public
- */
-
-var BlockComment = module.exports = function BlockComment(val, block, buffer) {
- this.block = block;
- this.val = val;
- this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-BlockComment.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/block.js b/node_modules/jade/lib/nodes/block.js
deleted file mode 100644
index 6bb18c94..00000000
--- a/node_modules/jade/lib/nodes/block.js
+++ /dev/null
@@ -1,122 +0,0 @@
-
-/*!
- * Jade - nodes - Block
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Block` with an optional `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-var Block = module.exports = function Block(node){
- this.nodes = [];
- if (node) this.push(node);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Block.prototype.__proto__ = Node.prototype;
-
-/**
- * Block flag.
- */
-
-Block.prototype.isBlock = true;
-
-/**
- * Replace the nodes in `other` with the nodes
- * in `this` block.
- *
- * @param {Block} other
- * @api private
- */
-
-Block.prototype.replace = function(other){
- other.nodes = this.nodes;
-};
-
-/**
- * Pust the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.push = function(node){
- return this.nodes.push(node);
-};
-
-/**
- * Check if this block is empty.
- *
- * @return {Boolean}
- * @api public
- */
-
-Block.prototype.isEmpty = function(){
- return 0 == this.nodes.length;
-};
-
-/**
- * Unshift the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.unshift = function(node){
- return this.nodes.unshift(node);
-};
-
-/**
- * Return the "last" block, or the first `yield` node.
- *
- * @return {Block}
- * @api private
- */
-
-Block.prototype.includeBlock = function(){
- var ret = this
- , node;
-
- for (var i = 0, len = this.nodes.length; i < len; ++i) {
- node = this.nodes[i];
- if (node.yield) return node;
- else if (node.textOnly) continue;
- else if (node.includeBlock) ret = node.includeBlock();
- else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock();
- if (ret.yield) return ret;
- }
-
- return ret;
-};
-
-/**
- * Return a clone of this block.
- *
- * @return {Block}
- * @api private
- */
-
-Block.prototype.clone = function(){
- var clone = new Block;
- for (var i = 0, len = this.nodes.length; i < len; ++i) {
- clone.push(this.nodes[i].clone());
- }
- return clone;
-};
-
diff --git a/node_modules/jade/lib/nodes/case.js b/node_modules/jade/lib/nodes/case.js
deleted file mode 100644
index 08ff0337..00000000
--- a/node_modules/jade/lib/nodes/case.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*!
- * Jade - nodes - Case
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Case` with `expr`.
- *
- * @param {String} expr
- * @api public
- */
-
-var Case = exports = module.exports = function Case(expr, block){
- this.expr = expr;
- this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Case.prototype.__proto__ = Node.prototype;
-
-var When = exports.When = function When(expr, block){
- this.expr = expr;
- this.block = block;
- this.debug = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-When.prototype.__proto__ = Node.prototype;
-
diff --git a/node_modules/jade/lib/nodes/code.js b/node_modules/jade/lib/nodes/code.js
deleted file mode 100644
index babc6759..00000000
--- a/node_modules/jade/lib/nodes/code.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Code
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Code` node with the given code `val`.
- * Code may also be optionally buffered and escaped.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @param {Boolean} escape
- * @api public
- */
-
-var Code = module.exports = function Code(val, buffer, escape) {
- this.val = val;
- this.buffer = buffer;
- this.escape = escape;
- if (val.match(/^ *else/)) this.debug = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Code.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/comment.js b/node_modules/jade/lib/nodes/comment.js
deleted file mode 100644
index 2e1469e7..00000000
--- a/node_modules/jade/lib/nodes/comment.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*!
- * Jade - nodes - Comment
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Comment` with the given `val`, optionally `buffer`,
- * otherwise the comment may render in the output.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @api public
- */
-
-var Comment = module.exports = function Comment(val, buffer) {
- this.val = val;
- this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Comment.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/doctype.js b/node_modules/jade/lib/nodes/doctype.js
deleted file mode 100644
index b8f33e56..00000000
--- a/node_modules/jade/lib/nodes/doctype.js
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*!
- * Jade - nodes - Doctype
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Doctype` with the given `val`.
- *
- * @param {String} val
- * @api public
- */
-
-var Doctype = module.exports = function Doctype(val) {
- this.val = val;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Doctype.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/each.js b/node_modules/jade/lib/nodes/each.js
deleted file mode 100644
index f54101f1..00000000
--- a/node_modules/jade/lib/nodes/each.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Each
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize an `Each` node, representing iteration
- *
- * @param {String} obj
- * @param {String} val
- * @param {String} key
- * @param {Block} block
- * @api public
- */
-
-var Each = module.exports = function Each(obj, val, key, block) {
- this.obj = obj;
- this.val = val;
- this.key = key;
- this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Each.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/filter.js b/node_modules/jade/lib/nodes/filter.js
deleted file mode 100644
index 851a0040..00000000
--- a/node_modules/jade/lib/nodes/filter.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Filter
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
- , Block = require('./block');
-
-/**
- * Initialize a `Filter` node with the given
- * filter `name` and `block`.
- *
- * @param {String} name
- * @param {Block|Node} block
- * @api public
- */
-
-var Filter = module.exports = function Filter(name, block, attrs) {
- this.name = name;
- this.block = block;
- this.attrs = attrs;
- this.isASTFilter = !block.nodes.every(function(node){ return node.isText });
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Filter.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/index.js b/node_modules/jade/lib/nodes/index.js
deleted file mode 100644
index 386ad2f9..00000000
--- a/node_modules/jade/lib/nodes/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*!
- * Jade - nodes
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-exports.Node = require('./node');
-exports.Tag = require('./tag');
-exports.Code = require('./code');
-exports.Each = require('./each');
-exports.Case = require('./case');
-exports.Text = require('./text');
-exports.Block = require('./block');
-exports.Mixin = require('./mixin');
-exports.Filter = require('./filter');
-exports.Comment = require('./comment');
-exports.Literal = require('./literal');
-exports.BlockComment = require('./block-comment');
-exports.Doctype = require('./doctype');
diff --git a/node_modules/jade/lib/nodes/literal.js b/node_modules/jade/lib/nodes/literal.js
deleted file mode 100644
index fde586be..00000000
--- a/node_modules/jade/lib/nodes/literal.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*!
- * Jade - nodes - Literal
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Literal` node with the given `str.
- *
- * @param {String} str
- * @api public
- */
-
-var Literal = module.exports = function Literal(str) {
- this.str = str
- .replace(/\\/g, "\\\\")
- .replace(/\n|\r\n/g, "\\n")
- .replace(/'/g, "\\'");
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Literal.prototype.__proto__ = Node.prototype;
diff --git a/node_modules/jade/lib/nodes/mixin.js b/node_modules/jade/lib/nodes/mixin.js
deleted file mode 100644
index 8407bc79..00000000
--- a/node_modules/jade/lib/nodes/mixin.js
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*!
- * Jade - nodes - Mixin
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Attrs = require('./attrs');
-
-/**
- * Initialize a new `Mixin` with `name` and `block`.
- *
- * @param {String} name
- * @param {String} args
- * @param {Block} block
- * @api public
- */
-
-var Mixin = module.exports = function Mixin(name, args, block, call){
- this.name = name;
- this.args = args;
- this.block = block;
- this.attrs = [];
- this.call = call;
-};
-
-/**
- * Inherit from `Attrs`.
- */
-
-Mixin.prototype.__proto__ = Attrs.prototype;
-
diff --git a/node_modules/jade/lib/nodes/node.js b/node_modules/jade/lib/nodes/node.js
deleted file mode 100644
index e98f042c..00000000
--- a/node_modules/jade/lib/nodes/node.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*!
- * Jade - nodes - Node
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Initialize a `Node`.
- *
- * @api public
- */
-
-var Node = module.exports = function Node(){};
-
-/**
- * Clone this node (return itself)
- *
- * @return {Node}
- * @api private
- */
-
-Node.prototype.clone = function(){
- return this;
-};
diff --git a/node_modules/jade/lib/nodes/tag.js b/node_modules/jade/lib/nodes/tag.js
deleted file mode 100644
index 4b6728ad..00000000
--- a/node_modules/jade/lib/nodes/tag.js
+++ /dev/null
@@ -1,95 +0,0 @@
-
-/*!
- * Jade - nodes - Tag
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Attrs = require('./attrs'),
- Block = require('./block'),
- inlineTags = require('../inline-tags');
-
-/**
- * Initialize a `Tag` node with the given tag `name` and optional `block`.
- *
- * @param {String} name
- * @param {Block} block
- * @api public
- */
-
-var Tag = module.exports = function Tag(name, block) {
- this.name = name;
- this.attrs = [];
- this.block = block || new Block;
-};
-
-/**
- * Inherit from `Attrs`.
- */
-
-Tag.prototype.__proto__ = Attrs.prototype;
-
-/**
- * Clone this tag.
- *
- * @return {Tag}
- * @api private
- */
-
-Tag.prototype.clone = function(){
- var clone = new Tag(this.name, this.block.clone());
- clone.line = this.line;
- clone.attrs = this.attrs;
- clone.textOnly = this.textOnly;
- return clone;
-};
-
-/**
- * Check if this tag is an inline tag.
- *
- * @return {Boolean}
- * @api private
- */
-
-Tag.prototype.isInline = function(){
- return ~inlineTags.indexOf(this.name);
-};
-
-/**
- * Check if this tag's contents can be inlined. Used for pretty printing.
- *
- * @return {Boolean}
- * @api private
- */
-
-Tag.prototype.canInline = function(){
- var nodes = this.block.nodes;
-
- function isInline(node){
- // Recurse if the node is a block
- if (node.isBlock) return node.nodes.every(isInline);
- return node.isText || (node.isInline && node.isInline());
- }
-
- // Empty tag
- if (!nodes.length) return true;
-
- // Text-only or inline-only tag
- if (1 == nodes.length) return isInline(nodes[0]);
-
- // Multi-line inline-only tag
- if (this.block.nodes.every(isInline)) {
- for (var i = 1, len = nodes.length; i < len; ++i) {
- if (nodes[i-1].isText && nodes[i].isText)
- return false;
- }
- return true;
- }
-
- // Mixed tag
- return false;
-}; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/text.js b/node_modules/jade/lib/nodes/text.js
deleted file mode 100644
index 3b5dd557..00000000
--- a/node_modules/jade/lib/nodes/text.js
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*!
- * Jade - nodes - Text
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Text` node with optional `line`.
- *
- * @param {String} line
- * @api public
- */
-
-var Text = module.exports = function Text(line) {
- this.val = '';
- if ('string' == typeof line) this.val = line;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Text.prototype.__proto__ = Node.prototype;
-
-/**
- * Flag as text.
- */
-
-Text.prototype.isText = true; \ No newline at end of file
diff --git a/node_modules/jade/lib/parser.js b/node_modules/jade/lib/parser.js
deleted file mode 100644
index 2b162412..00000000
--- a/node_modules/jade/lib/parser.js
+++ /dev/null
@@ -1,715 +0,0 @@
-
-/*!
- * Jade - Parser
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Lexer = require('./lexer')
- , nodes = require('./nodes')
- , utils = require('./utils');
-
-/**
- * Initialize `Parser` with the given input `str` and `filename`.
- *
- * @param {String} str
- * @param {String} filename
- * @param {Object} options
- * @api public
- */
-
-var Parser = exports = module.exports = function Parser(str, filename, options){
- this.input = str;
- this.lexer = new Lexer(str, options);
- this.filename = filename;
- this.blocks = {};
- this.mixins = {};
- this.options = options;
- this.contexts = [this];
-};
-
-/**
- * Tags that may not contain tags.
- */
-
-var textOnly = exports.textOnly = ['script', 'style'];
-
-/**
- * Parser prototype.
- */
-
-Parser.prototype = {
-
- /**
- * Push `parser` onto the context stack,
- * or pop and return a `Parser`.
- */
-
- context: function(parser){
- if (parser) {
- this.contexts.push(parser);
- } else {
- return this.contexts.pop();
- }
- },
-
- /**
- * Return the next token object.
- *
- * @return {Object}
- * @api private
- */
-
- advance: function(){
- return this.lexer.advance();
- },
-
- /**
- * Skip `n` tokens.
- *
- * @param {Number} n
- * @api private
- */
-
- skip: function(n){
- while (n--) this.advance();
- },
-
- /**
- * Single token lookahead.
- *
- * @return {Object}
- * @api private
- */
-
- peek: function() {
- return this.lookahead(1);
- },
-
- /**
- * Return lexer lineno.
- *
- * @return {Number}
- * @api private
- */
-
- line: function() {
- return this.lexer.lineno;
- },
-
- /**
- * `n` token lookahead.
- *
- * @param {Number} n
- * @return {Object}
- * @api private
- */
-
- lookahead: function(n){
- return this.lexer.lookahead(n);
- },
-
- /**
- * Parse input returning a string of js for evaluation.
- *
- * @return {String}
- * @api public
- */
-
- parse: function(){
- var block = new nodes.Block, parser;
- block.line = this.line();
-
- while ('eos' != this.peek().type) {
- if ('newline' == this.peek().type) {
- this.advance();
- } else {
- block.push(this.parseExpr());
- }
- }
-
- if (parser = this.extending) {
- this.context(parser);
- var ast = parser.parse();
- this.context();
- // hoist mixins
- for (var name in this.mixins)
- ast.unshift(this.mixins[name]);
- return ast;
- }
-
- return block;
- },
-
- /**
- * Expect the given type, or throw an exception.
- *
- * @param {String} type
- * @api private
- */
-
- expect: function(type){
- if (this.peek().type === type) {
- return this.advance();
- } else {
- throw new Error('expected "' + type + '", but got "' + this.peek().type + '"');
- }
- },
-
- /**
- * Accept the given `type`.
- *
- * @param {String} type
- * @api private
- */
-
- accept: function(type){
- if (this.peek().type === type) {
- return this.advance();
- }
- },
-
- /**
- * tag
- * | doctype
- * | mixin
- * | include
- * | filter
- * | comment
- * | text
- * | each
- * | code
- * | yield
- * | id
- * | class
- * | interpolation
- */
-
- parseExpr: function(){
- switch (this.peek().type) {
- case 'tag':
- return this.parseTag();
- case 'mixin':
- return this.parseMixin();
- case 'block':
- return this.parseBlock();
- case 'case':
- return this.parseCase();
- case 'when':
- return this.parseWhen();
- case 'default':
- return this.parseDefault();
- case 'extends':
- return this.parseExtends();
- case 'include':
- return this.parseInclude();
- case 'doctype':
- return this.parseDoctype();
- case 'filter':
- return this.parseFilter();
- case 'comment':
- return this.parseComment();
- case 'text':
- return this.parseText();
- case 'each':
- return this.parseEach();
- case 'code':
- return this.parseCode();
- case 'call':
- return this.parseCall();
- case 'interpolation':
- return this.parseInterpolation();
- case 'yield':
- this.advance();
- var block = new nodes.Block;
- block.yield = true;
- return block;
- case 'id':
- case 'class':
- var tok = this.advance();
- this.lexer.defer(this.lexer.tok('tag', 'div'));
- this.lexer.defer(tok);
- return this.parseExpr();
- default:
- throw new Error('unexpected token "' + this.peek().type + '"');
- }
- },
-
- /**
- * Text
- */
-
- parseText: function(){
- var tok = this.expect('text')
- , node = new nodes.Text(tok.val);
- node.line = this.line();
- return node;
- },
-
- /**
- * ':' expr
- * | block
- */
-
- parseBlockExpansion: function(){
- if (':' == this.peek().type) {
- this.advance();
- return new nodes.Block(this.parseExpr());
- } else {
- return this.block();
- }
- },
-
- /**
- * case
- */
-
- parseCase: function(){
- var val = this.expect('case').val
- , node = new nodes.Case(val);
- node.line = this.line();
- node.block = this.block();
- return node;
- },
-
- /**
- * when
- */
-
- parseWhen: function(){
- var val = this.expect('when').val
- return new nodes.Case.When(val, this.parseBlockExpansion());
- },
-
- /**
- * default
- */
-
- parseDefault: function(){
- this.expect('default');
- return new nodes.Case.When('default', this.parseBlockExpansion());
- },
-
- /**
- * code
- */
-
- parseCode: function(){
- var tok = this.expect('code')
- , node = new nodes.Code(tok.val, tok.buffer, tok.escape)
- , block
- , i = 1;
- node.line = this.line();
- while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i;
- block = 'indent' == this.lookahead(i).type;
- if (block) {
- this.skip(i-1);
- node.block = this.block();
- }
- return node;
- },
-
- /**
- * comment
- */
-
- parseComment: function(){
- var tok = this.expect('comment')
- , node;
-
- if ('indent' == this.peek().type) {
- node = new nodes.BlockComment(tok.val, this.block(), tok.buffer);
- } else {
- node = new nodes.Comment(tok.val, tok.buffer);
- }
-
- node.line = this.line();
- return node;
- },
-
- /**
- * doctype
- */
-
- parseDoctype: function(){
- var tok = this.expect('doctype')
- , node = new nodes.Doctype(tok.val);
- node.line = this.line();
- return node;
- },
-
- /**
- * filter attrs? text-block
- */
-
- parseFilter: function(){
- var block
- , tok = this.expect('filter')
- , attrs = this.accept('attrs');
-
- this.lexer.pipeless = true;
- block = this.parseTextBlock();
- this.lexer.pipeless = false;
-
- var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
- node.line = this.line();
- return node;
- },
-
- /**
- * tag ':' attrs? block
- */
-
- parseASTFilter: function(){
- var block
- , tok = this.expect('tag')
- , attrs = this.accept('attrs');
-
- this.expect(':');
- block = this.block();
-
- var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
- node.line = this.line();
- return node;
- },
-
- /**
- * each block
- */
-
- parseEach: function(){
- var tok = this.expect('each')
- , node = new nodes.Each(tok.code, tok.val, tok.key);
- node.line = this.line();
- node.block = this.block();
- if (this.peek().type == 'code' && this.peek().val == 'else') {
- this.advance();
- node.alternative = this.block();
- }
- return node;
- },
-
- /**
- * 'extends' name
- */
-
- parseExtends: function(){
- var path = require('path')
- , fs = require('fs')
- , dirname = path.dirname
- , basename = path.basename
- , join = path.join;
-
- if (!this.filename)
- throw new Error('the "filename" option is required to extend templates');
-
- var path = this.expect('extends').val.trim()
- , dir = dirname(this.filename);
-
- var path = join(dir, path + '.jade')
- , str = fs.readFileSync(path, 'utf8')
- , parser = new Parser(str, path, this.options);
-
- parser.blocks = this.blocks;
- parser.contexts = this.contexts;
- this.extending = parser;
-
- // TODO: null node
- return new nodes.Literal('');
- },
-
- /**
- * 'block' name block
- */
-
- parseBlock: function(){
- var block = this.expect('block')
- , mode = block.mode
- , name = block.val.trim();
-
- block = 'indent' == this.peek().type
- ? this.block()
- : new nodes.Block(new nodes.Literal(''));
-
- var prev = this.blocks[name];
-
- if (prev) {
- switch (prev.mode) {
- case 'append':
- block.nodes = block.nodes.concat(prev.nodes);
- prev = block;
- break;
- case 'prepend':
- block.nodes = prev.nodes.concat(block.nodes);
- prev = block;
- break;
- }
- }
-
- block.mode = mode;
- return this.blocks[name] = prev || block;
- },
-
- /**
- * include block?
- */
-
- parseInclude: function(){
- var path = require('path')
- , fs = require('fs')
- , dirname = path.dirname
- , basename = path.basename
- , join = path.join;
-
- var path = this.expect('include').val.trim()
- , dir = dirname(this.filename);
-
- if (!this.filename)
- throw new Error('the "filename" option is required to use includes');
-
- // no extension
- if (!~basename(path).indexOf('.')) {
- path += '.jade';
- }
-
- // non-jade
- if ('.jade' != path.substr(-5)) {
- var path = join(dir, path)
- , str = fs.readFileSync(path, 'utf8');
- return new nodes.Literal(str);
- }
-
- var path = join(dir, path)
- , str = fs.readFileSync(path, 'utf8')
- , parser = new Parser(str, path, this.options);
- parser.blocks = utils.merge({}, this.blocks);
- parser.mixins = this.mixins;
-
- this.context(parser);
- var ast = parser.parse();
- this.context();
- ast.filename = path;
-
- if ('indent' == this.peek().type) {
- ast.includeBlock().push(this.block());
- }
-
- return ast;
- },
-
- /**
- * call ident block
- */
-
- parseCall: function(){
- var tok = this.expect('call')
- , name = tok.val
- , args = tok.args
- , mixin = new nodes.Mixin(name, args, new nodes.Block, true);
-
- this.tag(mixin);
- if (mixin.block.isEmpty()) mixin.block = null;
- return mixin;
- },
-
- /**
- * mixin block
- */
-
- parseMixin: function(){
- var tok = this.expect('mixin')
- , name = tok.val
- , args = tok.args
- , mixin;
-
- // definition
- if ('indent' == this.peek().type) {
- mixin = new nodes.Mixin(name, args, this.block(), false);
- this.mixins[name] = mixin;
- return mixin;
- // call
- } else {
- return new nodes.Mixin(name, args, null, true);
- }
- },
-
- /**
- * indent (text | newline)* outdent
- */
-
- parseTextBlock: function(){
- var block = new nodes.Block;
- block.line = this.line();
- var spaces = this.expect('indent').val;
- if (null == this._spaces) this._spaces = spaces;
- var indent = Array(spaces - this._spaces + 1).join(' ');
- while ('outdent' != this.peek().type) {
- switch (this.peek().type) {
- case 'newline':
- this.advance();
- break;
- case 'indent':
- this.parseTextBlock().nodes.forEach(function(node){
- block.push(node);
- });
- break;
- default:
- var text = new nodes.Text(indent + this.advance().val);
- text.line = this.line();
- block.push(text);
- }
- }
-
- if (spaces == this._spaces) this._spaces = null;
- this.expect('outdent');
- return block;
- },
-
- /**
- * indent expr* outdent
- */
-
- block: function(){
- var block = new nodes.Block;
- block.line = this.line();
- this.expect('indent');
- while ('outdent' != this.peek().type) {
- if ('newline' == this.peek().type) {
- this.advance();
- } else {
- block.push(this.parseExpr());
- }
- }
- this.expect('outdent');
- return block;
- },
-
- /**
- * interpolation (attrs | class | id)* (text | code | ':')? newline* block?
- */
-
- parseInterpolation: function(){
- var tok = this.advance();
- var tag = new nodes.Tag(tok.val);
- tag.buffer = true;
- return this.tag(tag);
- },
-
- /**
- * tag (attrs | class | id)* (text | code | ':')? newline* block?
- */
-
- parseTag: function(){
- // ast-filter look-ahead
- var i = 2;
- if ('attrs' == this.lookahead(i).type) ++i;
- if (':' == this.lookahead(i).type) {
- if ('indent' == this.lookahead(++i).type) {
- return this.parseASTFilter();
- }
- }
-
- var tok = this.advance()
- , tag = new nodes.Tag(tok.val);
-
- tag.selfClosing = tok.selfClosing;
-
- return this.tag(tag);
- },
-
- /**
- * Parse tag.
- */
-
- tag: function(tag){
- var dot;
-
- tag.line = this.line();
-
- // (attrs | class | id)*
- out:
- while (true) {
- switch (this.peek().type) {
- case 'id':
- case 'class':
- var tok = this.advance();
- tag.setAttribute(tok.type, "'" + tok.val + "'");
- continue;
- case 'attrs':
- var tok = this.advance()
- , obj = tok.attrs
- , escaped = tok.escaped
- , names = Object.keys(obj);
-
- if (tok.selfClosing) tag.selfClosing = true;
-
- for (var i = 0, len = names.length; i < len; ++i) {
- var name = names[i]
- , val = obj[name];
- tag.setAttribute(name, val, escaped[name]);
- }
- continue;
- default:
- break out;
- }
- }
-
- // check immediate '.'
- if ('.' == this.peek().val) {
- dot = tag.textOnly = true;
- this.advance();
- }
-
- // (text | code | ':')?
- switch (this.peek().type) {
- case 'text':
- tag.block.push(this.parseText());
- break;
- case 'code':
- tag.code = this.parseCode();
- break;
- case ':':
- this.advance();
- tag.block = new nodes.Block;
- tag.block.push(this.parseExpr());
- break;
- }
-
- // newline*
- while ('newline' == this.peek().type) this.advance();
-
- tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name);
-
- // script special-case
- if ('script' == tag.name) {
- var type = tag.getAttribute('type');
- if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) {
- tag.textOnly = false;
- }
- }
-
- // block?
- if ('indent' == this.peek().type) {
- if (tag.textOnly) {
- this.lexer.pipeless = true;
- tag.block = this.parseTextBlock();
- this.lexer.pipeless = false;
- } else {
- var block = this.block();
- if (tag.block) {
- for (var i = 0, len = block.nodes.length; i < len; ++i) {
- tag.block.push(block.nodes[i]);
- }
- } else {
- tag.block = block;
- }
- }
- }
-
- return tag;
- }
-};
diff --git a/node_modules/jade/lib/runtime.js b/node_modules/jade/lib/runtime.js
deleted file mode 100644
index fb711f5e..00000000
--- a/node_modules/jade/lib/runtime.js
+++ /dev/null
@@ -1,174 +0,0 @@
-
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
- Array.isArray = function(arr){
- return '[object Array]' == Object.prototype.toString.call(arr);
- };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
- Object.keys = function(obj){
- var arr = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr.push(key);
- }
- }
- return arr;
- }
-}
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- ac = ac.filter(nulls);
- bc = bc.filter(nulls);
- a['class'] = ac.concat(bc).join(' ');
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
-
-function nulls(val) {
- return val != null;
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj, escaped){
- var buf = []
- , terse = obj.terse;
-
- delete obj.terse;
- var keys = Object.keys(obj)
- , len = keys.length;
-
- if (len) {
- buf.push('');
- for (var i = 0; i < len; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('boolean' == typeof val || null == val) {
- if (val) {
- terse
- ? buf.push(key)
- : buf.push(key + '="' + key + '"');
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- buf.push(key + "='" + JSON.stringify(val) + "'");
- } else if ('class' == key && Array.isArray(val)) {
- buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
- } else if (escaped && escaped[key]) {
- buf.push(key + '="' + exports.escape(val) + '"');
- } else {
- buf.push(key + '="' + val + '"');
- }
- }
- }
-
- return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
- return String(html)
- .replace(/&(?!(\w+|\#\d+);)/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno){
- if (!filename) throw err;
-
- var context = 3
- , str = require('fs').readFileSync(filename, 'utf8')
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
diff --git a/node_modules/jade/lib/self-closing.js b/node_modules/jade/lib/self-closing.js
deleted file mode 100644
index 05487712..00000000
--- a/node_modules/jade/lib/self-closing.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*!
- * Jade - self closing tags
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-module.exports = [
- 'meta'
- , 'img'
- , 'link'
- , 'input'
- , 'source'
- , 'area'
- , 'base'
- , 'col'
- , 'br'
- , 'hr'
-]; \ No newline at end of file
diff --git a/node_modules/jade/lib/utils.js b/node_modules/jade/lib/utils.js
deleted file mode 100644
index ca4a7fa5..00000000
--- a/node_modules/jade/lib/utils.js
+++ /dev/null
@@ -1,68 +0,0 @@
-
-/*!
- * Jade - utils
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Convert interpolation in the given string to JavaScript.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var interpolate = exports.interpolate = function(str){
- return str.replace(/(_SLASH_)?([#!]){(.*?)}/g, function(str, escape, flag, code){
- code = code
- .replace(/\\'/g, "'")
- .replace(/_SLASH_/g, '\\');
-
- return escape
- ? str.slice(7)
- : "' + "
- + ('!' == flag ? '' : 'escape')
- + "((interp = " + code
- + ") == null ? '' : interp) + '";
- });
-};
-
-/**
- * Escape single quotes in `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var escape = exports.escape = function(str) {
- return str.replace(/'/g, "\\'");
-};
-
-/**
- * Interpolate, and escape the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.text = function(str){
- return interpolate(escape(str));
-};
-
-/**
- * Merge `b` into `a`.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object}
- * @api public
- */
-
-exports.merge = function(a, b) {
- for (var key in b) a[key] = b[key];
- return a;
-};
-
diff --git a/node_modules/jade/node_modules/.bin/cake b/node_modules/jade/node_modules/.bin/cake
deleted file mode 120000
index d95f32af..00000000
--- a/node_modules/jade/node_modules/.bin/cake
+++ /dev/null
@@ -1 +0,0 @@
-../coffee-script/bin/cake \ No newline at end of file
diff --git a/node_modules/jade/node_modules/.bin/coffee b/node_modules/jade/node_modules/.bin/coffee
deleted file mode 120000
index b57f275d..00000000
--- a/node_modules/jade/node_modules/.bin/coffee
+++ /dev/null
@@ -1 +0,0 @@
-../coffee-script/bin/coffee \ No newline at end of file
diff --git a/node_modules/jade/node_modules/coffee-script/.npmignore b/node_modules/jade/node_modules/coffee-script/.npmignore
deleted file mode 100644
index 21e430d2..00000000
--- a/node_modules/jade/node_modules/coffee-script/.npmignore
+++ /dev/null
@@ -1,11 +0,0 @@
-*.coffee
-*.html
-.DS_Store
-.git*
-Cakefile
-documentation/
-examples/
-extras/coffee-script.js
-raw/
-src/
-test/
diff --git a/node_modules/jade/node_modules/coffee-script/CNAME b/node_modules/jade/node_modules/coffee-script/CNAME
deleted file mode 100644
index faadabe5..00000000
--- a/node_modules/jade/node_modules/coffee-script/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-coffeescript.org \ No newline at end of file
diff --git a/node_modules/jade/node_modules/coffee-script/CONTRIBUTING.md b/node_modules/jade/node_modules/coffee-script/CONTRIBUTING.md
deleted file mode 100644
index 6390c68b..00000000
--- a/node_modules/jade/node_modules/coffee-script/CONTRIBUTING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## How to contribute to CoffeeScript
-
-* Before you open a ticket or send a pull request, [search](https://github.com/jashkenas/coffee-script/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one.
-
-* Before sending a pull request for a feature, be sure to have [tests](https://github.com/jashkenas/coffee-script/tree/master/test).
-
-* Use the same coding style as the rest of the [codebase](https://github.com/jashkenas/coffee-script/tree/master/src). If you're just getting started with CoffeeScript, there's a nice [style guide](https://github.com/polarmobile/coffeescript-style-guide).
-
-* In your pull request, do not add documentation to `index.html` or re-build the minified `coffee-script.js` file. We'll do those things before cutting a new release. \ No newline at end of file
diff --git a/node_modules/jade/node_modules/coffee-script/LICENSE b/node_modules/jade/node_modules/coffee-script/LICENSE
deleted file mode 100644
index dbe6b4e3..00000000
--- a/node_modules/jade/node_modules/coffee-script/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2009-2012 Jeremy Ashkenas
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/node_modules/jade/node_modules/coffee-script/README b/node_modules/jade/node_modules/coffee-script/README
deleted file mode 100644
index 69ee6f43..00000000
--- a/node_modules/jade/node_modules/coffee-script/README
+++ /dev/null
@@ -1,51 +0,0 @@
-
- {
- } } {
- { { } }
- } }{ {
- { }{ } } _____ __ __
- ( }{ }{ { ) / ____| / _|/ _|
- .- { { } { }} -. | | ___ | |_| |_ ___ ___
- ( ( } { } { } } ) | | / _ \| _| _/ _ \/ _ \
- |`-..________ ..-'| | |___| (_) | | | || __/ __/
- | | \_____\___/|_| |_| \___|\___|
- | ;--.
- | (__ \ _____ _ _
- | | ) ) / ____| (_) | |
- | |/ / | (___ ___ _ __ _ _ __ | |_
- | ( / \___ \ / __| '__| | '_ \| __|
- | |/ ____) | (__| | | | |_) | |_
- | | |_____/ \___|_| |_| .__/ \__|
- `-.._________..-' | |
- |_|
-
-
- CoffeeScript is a little language that compiles into JavaScript.
-
- Install Node.js, and then the CoffeeScript compiler:
- sudo bin/cake install
-
- Or, if you have the Node Package Manager installed:
- npm install -g coffee-script
- (Leave off the -g if you don't wish to install globally.)
-
- Execute a script:
- coffee /path/to/script.coffee
-
- Compile a script:
- coffee -c /path/to/script.coffee
-
- For documentation, usage, and examples, see:
- http://coffeescript.org/
-
- To suggest a feature, report a bug, or general discussion:
- http://github.com/jashkenas/coffee-script/issues/
-
- If you'd like to chat, drop by #coffeescript on Freenode IRC,
- or on webchat.freenode.net.
-
- The source repository:
- git://github.com/jashkenas/coffee-script.git
-
- All contributors are listed here:
- http://github.com/jashkenas/coffee-script/contributors
diff --git a/node_modules/jade/node_modules/coffee-script/Rakefile b/node_modules/jade/node_modules/coffee-script/Rakefile
deleted file mode 100644
index dfb85dab..00000000
--- a/node_modules/jade/node_modules/coffee-script/Rakefile
+++ /dev/null
@@ -1,78 +0,0 @@
-require 'rubygems'
-require 'erb'
-require 'fileutils'
-require 'rake/testtask'
-require 'json'
-
-desc "Build the documentation page"
-task :doc do
- source = 'documentation/index.html.erb'
- child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
- at_exit { Process.kill("INT", child) }
- Signal.trap("INT") { exit }
- loop do
- mtime = File.stat(source).mtime
- if !@mtime || mtime > @mtime
- rendered = ERB.new(File.read(source)).result(binding)
- File.open('index.html', 'w+') {|f| f.write(rendered) }
- end
- @mtime = mtime
- sleep 1
- end
-end
-
-desc "Build coffee-script-source gem"
-task :gem do
- require 'rubygems'
- require 'rubygems/package'
-
- gemspec = Gem::Specification.new do |s|
- s.name = 'coffee-script-source'
- s.version = JSON.parse(File.read('package.json'))["version"]
- s.date = Time.now.strftime("%Y-%m-%d")
-
- s.homepage = "http://jashkenas.github.com/coffee-script/"
- s.summary = "The CoffeeScript Compiler"
- s.description = <<-EOS
- CoffeeScript is a little language that compiles into JavaScript.
- Underneath all of those embarrassing braces and semicolons,
- JavaScript has always had a gorgeous object model at its heart.
- CoffeeScript is an attempt to expose the good parts of JavaScript
- in a simple way.
- EOS
-
- s.files = [
- 'lib/coffee_script/coffee-script.js',
- 'lib/coffee_script/source.rb'
- ]
-
- s.authors = ['Jeremy Ashkenas']
- s.email = '[email protected]'
- s.rubyforge_project = 'coffee-script-source'
- end
-
- file = File.open("coffee-script-source.gem", "w")
- Gem::Package.open(file, 'w') do |pkg|
- pkg.metadata = gemspec.to_yaml
-
- path = "lib/coffee_script/source.rb"
- contents = <<-ERUBY
-module CoffeeScript
- module Source
- def self.bundled_path
- File.expand_path("../coffee-script.js", __FILE__)
- end
- end
-end
- ERUBY
- pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
- tar_io.write(contents)
- end
-
- contents = File.read("extras/coffee-script.js")
- path = "lib/coffee_script/coffee-script.js"
- pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
- tar_io.write(contents)
- end
- end
-end
diff --git a/node_modules/jade/node_modules/coffee-script/bin/cake b/node_modules/jade/node_modules/coffee-script/bin/cake
deleted file mode 100755
index 5965f4ee..00000000
--- a/node_modules/jade/node_modules/coffee-script/bin/cake
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs = require('fs');
-var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/coffee-script/cake').run();
diff --git a/node_modules/jade/node_modules/coffee-script/bin/coffee b/node_modules/jade/node_modules/coffee-script/bin/coffee
deleted file mode 100755
index 3d1d71c8..00000000
--- a/node_modules/jade/node_modules/coffee-script/bin/coffee
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs = require('fs');
-var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/coffee-script/command').run();
diff --git a/node_modules/jade/node_modules/coffee-script/extras/jsl.conf b/node_modules/jade/node_modules/coffee-script/extras/jsl.conf
deleted file mode 100644
index 1190da52..00000000
--- a/node_modules/jade/node_modules/coffee-script/extras/jsl.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-# JavaScriptLint configuration file for CoffeeScript.
-
-+no_return_value # function {0} does not always return a value
-+duplicate_formal # duplicate formal argument {0}
--equal_as_assign # test for equality (==) mistyped as assignment (=)?{0}
-+var_hides_arg # variable {0} hides argument
-+redeclared_var # redeclaration of {0} {1}
--anon_no_return_value # anonymous function does not always return a value
-+missing_semicolon # missing semicolon
-+meaningless_block # meaningless block; curly braces have no impact
--comma_separated_stmts # multiple statements separated by commas (use semicolons?)
-+unreachable_code # unreachable code
-+missing_break # missing break statement
--missing_break_for_last_case # missing break statement for last case in switch
--comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)
--inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement
--useless_void # use of the void type may be unnecessary (void is always undefined)
-+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs
-+use_of_label # use of label
--block_without_braces # block statement without curly braces
-+leading_decimal_point # leading decimal point may indicate a number or an object member
-+trailing_decimal_point # trailing decimal point may indicate a number or an object member
-+octal_number # leading zeros make an octal number
-+nested_comment # nested comment
-+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma
-+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement
-+empty_statement # empty statement or extra semicolon
--missing_option_explicit # the "option explicit" control comment is missing
-+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag
-+dup_option_explicit # duplicate "option explicit" control comment
-+useless_assign # useless assignment
-+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity
-+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent)
--missing_default_case # missing default case in switch statement
-+duplicate_case_in_switch # duplicate case in switch statements
-+default_not_at_end # the default case is not at the end of the switch statement
-+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax
-+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax
-+useless_comparison # useless comparison; comparing identical expressions
-+with_statement # with statement hides undeclared variables; use temporary variable instead
-+trailing_comma_in_array # extra comma is not recommended in array initializers
-+assign_to_function_call # assignment to a function call
-+parseint_missing_radix # parseInt missing radix parameter
-+lambda_assign_requires_semicolon
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/browser.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/browser.js
deleted file mode 100644
index 045156f7..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/browser.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var CoffeeScript, runScripts;
-
- CoffeeScript = require('./coffee-script');
-
- CoffeeScript.require = require;
-
- CoffeeScript["eval"] = function(code, options) {
- var _ref;
- if (options == null) {
- options = {};
- }
- if ((_ref = options.bare) == null) {
- options.bare = true;
- }
- return eval(CoffeeScript.compile(code, options));
- };
-
- CoffeeScript.run = function(code, options) {
- if (options == null) {
- options = {};
- }
- options.bare = true;
- return Function(CoffeeScript.compile(code, options))();
- };
-
- if (typeof window === "undefined" || window === null) {
- return;
- }
-
- CoffeeScript.load = function(url, callback) {
- var xhr;
- xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
- xhr.open('GET', url, true);
- if ('overrideMimeType' in xhr) {
- xhr.overrideMimeType('text/plain');
- }
- xhr.onreadystatechange = function() {
- var _ref;
- if (xhr.readyState === 4) {
- if ((_ref = xhr.status) === 0 || _ref === 200) {
- CoffeeScript.run(xhr.responseText);
- } else {
- throw new Error("Could not load " + url);
- }
- if (callback) {
- return callback();
- }
- }
- };
- return xhr.send(null);
- };
-
- runScripts = function() {
- var coffees, execute, index, length, s, scripts;
- scripts = document.getElementsByTagName('script');
- coffees = (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = scripts.length; _i < _len; _i++) {
- s = scripts[_i];
- if (s.type === 'text/coffeescript') {
- _results.push(s);
- }
- }
- return _results;
- })();
- index = 0;
- length = coffees.length;
- (execute = function() {
- var script;
- script = coffees[index++];
- if ((script != null ? script.type : void 0) === 'text/coffeescript') {
- if (script.src) {
- return CoffeeScript.load(script.src, execute);
- } else {
- CoffeeScript.run(script.innerHTML);
- return execute();
- }
- }
- })();
- return null;
- };
-
- if (window.addEventListener) {
- addEventListener('DOMContentLoaded', runScripts, false);
- } else {
- attachEvent('onload', runScripts);
- }
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/cake.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/cake.js
deleted file mode 100644
index 0e7f1cc3..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/cake.js
+++ /dev/null
@@ -1,113 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
-
- fs = require('fs');
-
- path = require('path');
-
- helpers = require('./helpers');
-
- optparse = require('./optparse');
-
- CoffeeScript = require('./coffee-script');
-
- existsSync = fs.existsSync || path.existsSync;
-
- tasks = {};
-
- options = {};
-
- switches = [];
-
- oparse = null;
-
- helpers.extend(global, {
- task: function(name, description, action) {
- var _ref;
- if (!action) {
- _ref = [description, action], action = _ref[0], description = _ref[1];
- }
- return tasks[name] = {
- name: name,
- description: description,
- action: action
- };
- },
- option: function(letter, flag, description) {
- return switches.push([letter, flag, description]);
- },
- invoke: function(name) {
- if (!tasks[name]) {
- missingTask(name);
- }
- return tasks[name].action(options);
- }
- });
-
- exports.run = function() {
- var arg, args, _i, _len, _ref, _results;
- global.__originalDirname = fs.realpathSync('.');
- process.chdir(cakefileDirectory(__originalDirname));
- args = process.argv.slice(2);
- CoffeeScript.run(fs.readFileSync('Cakefile').toString(), {
- filename: 'Cakefile'
- });
- oparse = new optparse.OptionParser(switches);
- if (!args.length) {
- return printTasks();
- }
- try {
- options = oparse.parse(args);
- } catch (e) {
- return fatalError("" + e);
- }
- _ref = options["arguments"];
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- arg = _ref[_i];
- _results.push(invoke(arg));
- }
- return _results;
- };
-
- printTasks = function() {
- var cakefilePath, desc, name, relative, spaces, task;
- relative = path.relative || path.resolve;
- cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
- console.log("" + cakefilePath + " defines the following tasks:\n");
- for (name in tasks) {
- task = tasks[name];
- spaces = 20 - name.length;
- spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
- desc = task.description ? "# " + task.description : '';
- console.log("cake " + name + spaces + " " + desc);
- }
- if (switches.length) {
- return console.log(oparse.help());
- }
- };
-
- fatalError = function(message) {
- console.error(message + '\n');
- console.log('To see a list of all tasks/options, run "cake"');
- return process.exit(1);
- };
-
- missingTask = function(task) {
- return fatalError("No such task: " + task);
- };
-
- cakefileDirectory = function(dir) {
- var parent;
- if (existsSync(path.join(dir, 'Cakefile'))) {
- return dir;
- }
- parent = path.normalize(path.join(dir, '..'));
- if (parent !== dir) {
- return cakefileDirectory(parent);
- }
- throw new Error("Cakefile not found in " + (process.cwd()));
- };
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/coffee-script.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/coffee-script.js
deleted file mode 100644
index 7ee55cd4..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/coffee-script.js
+++ /dev/null
@@ -1,171 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var Lexer, RESERVED, compile, fs, lexer, parser, path, stripBOM, vm, _ref,
- __hasProp = {}.hasOwnProperty;
-
- fs = require('fs');
-
- path = require('path');
-
- _ref = require('./lexer'), Lexer = _ref.Lexer, RESERVED = _ref.RESERVED;
-
- parser = require('./parser').parser;
-
- vm = require('vm');
-
- stripBOM = function(content) {
- if (content.charCodeAt(0) === 0xFEFF) {
- return content.substring(1);
- } else {
- return content;
- }
- };
-
- if (require.extensions) {
- require.extensions['.coffee'] = function(module, filename) {
- var content;
- content = compile(stripBOM(fs.readFileSync(filename, 'utf8')), {
- filename: filename
- });
- return module._compile(content, filename);
- };
- }
-
- exports.VERSION = '1.4.0';
-
- exports.RESERVED = RESERVED;
-
- exports.helpers = require('./helpers');
-
- exports.compile = compile = function(code, options) {
- var header, js, merge;
- if (options == null) {
- options = {};
- }
- merge = exports.helpers.merge;
- try {
- js = (parser.parse(lexer.tokenize(code))).compile(options);
- if (!options.header) {
- return js;
- }
- } catch (err) {
- if (options.filename) {
- err.message = "In " + options.filename + ", " + err.message;
- }
- throw err;
- }
- header = "Generated by CoffeeScript " + this.VERSION;
- return "// " + header + "\n" + js;
- };
-
- exports.tokens = function(code, options) {
- return lexer.tokenize(code, options);
- };
-
- exports.nodes = function(source, options) {
- if (typeof source === 'string') {
- return parser.parse(lexer.tokenize(source, options));
- } else {
- return parser.parse(source);
- }
- };
-
- exports.run = function(code, options) {
- var mainModule;
- if (options == null) {
- options = {};
- }
- mainModule = require.main;
- mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
- mainModule.moduleCache && (mainModule.moduleCache = {});
- mainModule.paths = require('module')._nodeModulePaths(path.dirname(fs.realpathSync(options.filename)));
- if (path.extname(mainModule.filename) !== '.coffee' || require.extensions) {
- return mainModule._compile(compile(code, options), mainModule.filename);
- } else {
- return mainModule._compile(code, mainModule.filename);
- }
- };
-
- exports["eval"] = function(code, options) {
- var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref1, _ref2, _require;
- if (options == null) {
- options = {};
- }
- if (!(code = code.trim())) {
- return;
- }
- Script = vm.Script;
- if (Script) {
- if (options.sandbox != null) {
- if (options.sandbox instanceof Script.createContext().constructor) {
- sandbox = options.sandbox;
- } else {
- sandbox = Script.createContext();
- _ref1 = options.sandbox;
- for (k in _ref1) {
- if (!__hasProp.call(_ref1, k)) continue;
- v = _ref1[k];
- sandbox[k] = v;
- }
- }
- sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
- } else {
- sandbox = global;
- }
- sandbox.__filename = options.filename || 'eval';
- sandbox.__dirname = path.dirname(sandbox.__filename);
- if (!(sandbox !== global || sandbox.module || sandbox.require)) {
- Module = require('module');
- sandbox.module = _module = new Module(options.modulename || 'eval');
- sandbox.require = _require = function(path) {
- return Module._load(path, _module, true);
- };
- _module.filename = sandbox.__filename;
- _ref2 = Object.getOwnPropertyNames(require);
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- r = _ref2[_i];
- if (r !== 'paths') {
- _require[r] = require[r];
- }
- }
- _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
- _require.resolve = function(request) {
- return Module._resolveFilename(request, _module);
- };
- }
- }
- o = {};
- for (k in options) {
- if (!__hasProp.call(options, k)) continue;
- v = options[k];
- o[k] = v;
- }
- o.bare = true;
- js = compile(code, o);
- if (sandbox === global) {
- return vm.runInThisContext(js);
- } else {
- return vm.runInContext(js, sandbox);
- }
- };
-
- lexer = new Lexer;
-
- parser.lexer = {
- lex: function() {
- var tag, _ref1;
- _ref1 = this.tokens[this.pos++] || [''], tag = _ref1[0], this.yytext = _ref1[1], this.yylineno = _ref1[2];
- return tag;
- },
- setInput: function(tokens) {
- this.tokens = tokens;
- return this.pos = 0;
- },
- upcomingInput: function() {
- return "";
- }
- };
-
- parser.yy = require('./nodes');
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/command.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/command.js
deleted file mode 100644
index b0bcfe16..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/command.js
+++ /dev/null
@@ -1,502 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, loadRequires, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
-
- fs = require('fs');
-
- path = require('path');
-
- helpers = require('./helpers');
-
- optparse = require('./optparse');
-
- CoffeeScript = require('./coffee-script');
-
- _ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec;
-
- EventEmitter = require('events').EventEmitter;
-
- exists = fs.exists || path.exists;
-
- helpers.extend(CoffeeScript, new EventEmitter);
-
- printLine = function(line) {
- return process.stdout.write(line + '\n');
- };
-
- printWarn = function(line) {
- return process.stderr.write(line + '\n');
- };
-
- hidden = function(file) {
- return /^\.|~$/.test(file);
- };
-
- BANNER = 'Usage: coffee [options] path/to/script.coffee -- [args]\n\nIf called without options, `coffee` will run your script.';
-
- SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-l', '--lint', 'pipe the compiled JavaScript through JavaScript Lint'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-r', '--require [FILE*]', 'require a library before executing your script'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
-
- opts = {};
-
- sources = [];
-
- sourceCode = [];
-
- notSources = {};
-
- watchers = {};
-
- optionParser = null;
-
- exports.run = function() {
- var literals, source, _i, _len, _results;
- parseOptions();
- if (opts.nodejs) {
- return forkNode();
- }
- if (opts.help) {
- return usage();
- }
- if (opts.version) {
- return version();
- }
- if (opts.require) {
- loadRequires();
- }
- if (opts.interactive) {
- return require('./repl');
- }
- if (opts.watch && !fs.watch) {
- return printWarn("The --watch feature depends on Node v0.6.0+. You are running " + process.version + ".");
- }
- if (opts.stdio) {
- return compileStdio();
- }
- if (opts["eval"]) {
- return compileScript(null, sources[0]);
- }
- if (!sources.length) {
- return require('./repl');
- }
- literals = opts.run ? sources.splice(1) : [];
- process.argv = process.argv.slice(0, 2).concat(literals);
- process.argv[0] = 'coffee';
- process.execPath = require.main.filename;
- _results = [];
- for (_i = 0, _len = sources.length; _i < _len; _i++) {
- source = sources[_i];
- _results.push(compilePath(source, true, path.normalize(source)));
- }
- return _results;
- };
-
- compilePath = function(source, topLevel, base) {
- return fs.stat(source, function(err, stats) {
- if (err && err.code !== 'ENOENT') {
- throw err;
- }
- if ((err != null ? err.code : void 0) === 'ENOENT') {
- if (topLevel && source.slice(-7) !== '.coffee') {
- source = sources[sources.indexOf(source)] = "" + source + ".coffee";
- return compilePath(source, topLevel, base);
- }
- if (topLevel) {
- console.error("File not found: " + source);
- process.exit(1);
- }
- return;
- }
- if (stats.isDirectory()) {
- if (opts.watch) {
- watchDir(source, base);
- }
- return fs.readdir(source, function(err, files) {
- var file, index, _ref1, _ref2;
- if (err && err.code !== 'ENOENT') {
- throw err;
- }
- if ((err != null ? err.code : void 0) === 'ENOENT') {
- return;
- }
- index = sources.indexOf(source);
- files = files.filter(function(file) {
- return !hidden(file);
- });
- [].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = files.length; _i < _len; _i++) {
- file = files[_i];
- _results.push(path.join(source, file));
- }
- return _results;
- })())), _ref1;
- [].splice.apply(sourceCode, [index, index - index + 1].concat(_ref2 = files.map(function() {
- return null;
- }))), _ref2;
- return files.forEach(function(file) {
- return compilePath(path.join(source, file), false, base);
- });
- });
- } else if (topLevel || path.extname(source) === '.coffee') {
- if (opts.watch) {
- watch(source, base);
- }
- return fs.readFile(source, function(err, code) {
- if (err && err.code !== 'ENOENT') {
- throw err;
- }
- if ((err != null ? err.code : void 0) === 'ENOENT') {
- return;
- }
- return compileScript(source, code.toString(), base);
- });
- } else {
- notSources[source] = true;
- return removeSource(source, base);
- }
- });
- };
-
- compileScript = function(file, input, base) {
- var o, options, t, task;
- o = opts;
- options = compileOptions(file);
- try {
- t = task = {
- file: file,
- input: input,
- options: options
- };
- CoffeeScript.emit('compile', task);
- if (o.tokens) {
- return printTokens(CoffeeScript.tokens(t.input));
- } else if (o.nodes) {
- return printLine(CoffeeScript.nodes(t.input).toString().trim());
- } else if (o.run) {
- return CoffeeScript.run(t.input, t.options);
- } else if (o.join && t.file !== o.join) {
- sourceCode[sources.indexOf(t.file)] = t.input;
- return compileJoin();
- } else {
- t.output = CoffeeScript.compile(t.input, t.options);
- CoffeeScript.emit('success', task);
- if (o.print) {
- return printLine(t.output.trim());
- } else if (o.compile) {
- return writeJs(t.file, t.output, base);
- } else if (o.lint) {
- return lint(t.file, t.output);
- }
- }
- } catch (err) {
- CoffeeScript.emit('failure', err, task);
- if (CoffeeScript.listeners('failure').length) {
- return;
- }
- if (o.watch) {
- return printLine(err.message + '\x07');
- }
- printWarn(err instanceof Error && err.stack || ("ERROR: " + err));
- return process.exit(1);
- }
- };
-
- compileStdio = function() {
- var code, stdin;
- code = '';
- stdin = process.openStdin();
- stdin.on('data', function(buffer) {
- if (buffer) {
- return code += buffer.toString();
- }
- });
- return stdin.on('end', function() {
- return compileScript(null, code);
- });
- };
-
- joinTimeout = null;
-
- compileJoin = function() {
- if (!opts.join) {
- return;
- }
- if (!sourceCode.some(function(code) {
- return code === null;
- })) {
- clearTimeout(joinTimeout);
- return joinTimeout = wait(100, function() {
- return compileScript(opts.join, sourceCode.join('\n'), opts.join);
- });
- }
- };
-
- loadRequires = function() {
- var realFilename, req, _i, _len, _ref1;
- realFilename = module.filename;
- module.filename = '.';
- _ref1 = opts.require;
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- req = _ref1[_i];
- require(req);
- }
- return module.filename = realFilename;
- };
-
- watch = function(source, base) {
- var compile, compileTimeout, prevStats, rewatch, watchErr, watcher;
- prevStats = null;
- compileTimeout = null;
- watchErr = function(e) {
- if (e.code === 'ENOENT') {
- if (sources.indexOf(source) === -1) {
- return;
- }
- try {
- rewatch();
- return compile();
- } catch (e) {
- removeSource(source, base, true);
- return compileJoin();
- }
- } else {
- throw e;
- }
- };
- compile = function() {
- clearTimeout(compileTimeout);
- return compileTimeout = wait(25, function() {
- return fs.stat(source, function(err, stats) {
- if (err) {
- return watchErr(err);
- }
- if (prevStats && stats.size === prevStats.size && stats.mtime.getTime() === prevStats.mtime.getTime()) {
- return rewatch();
- }
- prevStats = stats;
- return fs.readFile(source, function(err, code) {
- if (err) {
- return watchErr(err);
- }
- compileScript(source, code.toString(), base);
- return rewatch();
- });
- });
- });
- };
- try {
- watcher = fs.watch(source, compile);
- } catch (e) {
- watchErr(e);
- }
- return rewatch = function() {
- if (watcher != null) {
- watcher.close();
- }
- return watcher = fs.watch(source, compile);
- };
- };
-
- watchDir = function(source, base) {
- var readdirTimeout, watcher;
- readdirTimeout = null;
- try {
- return watcher = fs.watch(source, function() {
- clearTimeout(readdirTimeout);
- return readdirTimeout = wait(25, function() {
- return fs.readdir(source, function(err, files) {
- var file, _i, _len, _results;
- if (err) {
- if (err.code !== 'ENOENT') {
- throw err;
- }
- watcher.close();
- return unwatchDir(source, base);
- }
- _results = [];
- for (_i = 0, _len = files.length; _i < _len; _i++) {
- file = files[_i];
- if (!(!hidden(file) && !notSources[file])) {
- continue;
- }
- file = path.join(source, file);
- if (sources.some(function(s) {
- return s.indexOf(file) >= 0;
- })) {
- continue;
- }
- sources.push(file);
- sourceCode.push(null);
- _results.push(compilePath(file, false, base));
- }
- return _results;
- });
- });
- });
- } catch (e) {
- if (e.code !== 'ENOENT') {
- throw e;
- }
- }
- };
-
- unwatchDir = function(source, base) {
- var file, prevSources, toRemove, _i, _len;
- prevSources = sources.slice(0);
- toRemove = (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = sources.length; _i < _len; _i++) {
- file = sources[_i];
- if (file.indexOf(source) >= 0) {
- _results.push(file);
- }
- }
- return _results;
- })();
- for (_i = 0, _len = toRemove.length; _i < _len; _i++) {
- file = toRemove[_i];
- removeSource(file, base, true);
- }
- if (!sources.some(function(s, i) {
- return prevSources[i] !== s;
- })) {
- return;
- }
- return compileJoin();
- };
-
- removeSource = function(source, base, removeJs) {
- var index, jsPath;
- index = sources.indexOf(source);
- sources.splice(index, 1);
- sourceCode.splice(index, 1);
- if (removeJs && !opts.join) {
- jsPath = outputPath(source, base);
- return exists(jsPath, function(itExists) {
- if (itExists) {
- return fs.unlink(jsPath, function(err) {
- if (err && err.code !== 'ENOENT') {
- throw err;
- }
- return timeLog("removed " + source);
- });
- }
- });
- }
- };
-
- outputPath = function(source, base) {
- var baseDir, dir, filename, srcDir;
- filename = path.basename(source, path.extname(source)) + '.js';
- srcDir = path.dirname(source);
- baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
- dir = opts.output ? path.join(opts.output, baseDir) : srcDir;
- return path.join(dir, filename);
- };
-
- writeJs = function(source, js, base) {
- var compile, jsDir, jsPath;
- jsPath = outputPath(source, base);
- jsDir = path.dirname(jsPath);
- compile = function() {
- if (js.length <= 0) {
- js = ' ';
- }
- return fs.writeFile(jsPath, js, function(err) {
- if (err) {
- return printLine(err.message);
- } else if (opts.compile && opts.watch) {
- return timeLog("compiled " + source);
- }
- });
- };
- return exists(jsDir, function(itExists) {
- if (itExists) {
- return compile();
- } else {
- return exec("mkdir -p " + jsDir, compile);
- }
- });
- };
-
- wait = function(milliseconds, func) {
- return setTimeout(func, milliseconds);
- };
-
- timeLog = function(message) {
- return console.log("" + ((new Date).toLocaleTimeString()) + " - " + message);
- };
-
- lint = function(file, js) {
- var conf, jsl, printIt;
- printIt = function(buffer) {
- return printLine(file + ':\t' + buffer.toString().trim());
- };
- conf = __dirname + '/../../extras/jsl.conf';
- jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
- jsl.stdout.on('data', printIt);
- jsl.stderr.on('data', printIt);
- jsl.stdin.write(js);
- return jsl.stdin.end();
- };
-
- printTokens = function(tokens) {
- var strings, tag, token, value;
- strings = (function() {
- var _i, _len, _ref1, _results;
- _results = [];
- for (_i = 0, _len = tokens.length; _i < _len; _i++) {
- token = tokens[_i];
- _ref1 = [token[0], token[1].toString().replace(/\n/, '\\n')], tag = _ref1[0], value = _ref1[1];
- _results.push("[" + tag + " " + value + "]");
- }
- return _results;
- })();
- return printLine(strings.join(' '));
- };
-
- parseOptions = function() {
- var i, o, source, _i, _len;
- optionParser = new optparse.OptionParser(SWITCHES, BANNER);
- o = opts = optionParser.parse(process.argv.slice(2));
- o.compile || (o.compile = !!o.output);
- o.run = !(o.compile || o.print || o.lint);
- o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
- sources = o["arguments"];
- for (i = _i = 0, _len = sources.length; _i < _len; i = ++_i) {
- source = sources[i];
- sourceCode[i] = null;
- }
- };
-
- compileOptions = function(filename) {
- return {
- filename: filename,
- bare: opts.bare,
- header: opts.compile
- };
- };
-
- forkNode = function() {
- var args, nodeArgs;
- nodeArgs = opts.nodejs.split(/\s+/);
- args = process.argv.slice(1);
- args.splice(args.indexOf('--nodejs'), 2);
- return spawn(process.execPath, nodeArgs.concat(args), {
- cwd: process.cwd(),
- env: process.env,
- customFds: [0, 1, 2]
- });
- };
-
- usage = function() {
- return printLine((new optparse.OptionParser(SWITCHES, BANNER)).help());
- };
-
- version = function() {
- return printLine("CoffeeScript version " + CoffeeScript.VERSION);
- };
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/grammar.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/grammar.js
deleted file mode 100644
index e3513e5b..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/grammar.js
+++ /dev/null
@@ -1,606 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
-
- Parser = require('jison').Parser;
-
- unwrap = /^function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
-
- o = function(patternString, action, options) {
- var match;
- patternString = patternString.replace(/\s{2,}/g, ' ');
- if (!action) {
- return [patternString, '$$ = $1;', options];
- }
- action = (match = unwrap.exec(action)) ? match[1] : "(" + action + "())";
- action = action.replace(/\bnew /g, '$&yy.');
- action = action.replace(/\b(?:Block\.wrap|extend)\b/g, 'yy.$&');
- return [patternString, "$$ = " + action + ";", options];
- };
-
- grammar = {
- Root: [
- o('', function() {
- return new Block;
- }), o('Body'), o('Block TERMINATOR')
- ],
- Body: [
- o('Line', function() {
- return Block.wrap([$1]);
- }), o('Body TERMINATOR Line', function() {
- return $1.push($3);
- }), o('Body TERMINATOR')
- ],
- Line: [o('Expression'), o('Statement')],
- Statement: [
- o('Return'), o('Comment'), o('STATEMENT', function() {
- return new Literal($1);
- })
- ],
- Expression: [o('Value'), o('Invocation'), o('Code'), o('Operation'), o('Assign'), o('If'), o('Try'), o('While'), o('For'), o('Switch'), o('Class'), o('Throw')],
- Block: [
- o('INDENT OUTDENT', function() {
- return new Block;
- }), o('INDENT Body OUTDENT', function() {
- return $2;
- })
- ],
- Identifier: [
- o('IDENTIFIER', function() {
- return new Literal($1);
- })
- ],
- AlphaNumeric: [
- o('NUMBER', function() {
- return new Literal($1);
- }), o('STRING', function() {
- return new Literal($1);
- })
- ],
- Literal: [
- o('AlphaNumeric'), o('JS', function() {
- return new Literal($1);
- }), o('REGEX', function() {
- return new Literal($1);
- }), o('DEBUGGER', function() {
- return new Literal($1);
- }), o('UNDEFINED', function() {
- return new Undefined;
- }), o('NULL', function() {
- return new Null;
- }), o('BOOL', function() {
- return new Bool($1);
- })
- ],
- Assign: [
- o('Assignable = Expression', function() {
- return new Assign($1, $3);
- }), o('Assignable = TERMINATOR Expression', function() {
- return new Assign($1, $4);
- }), o('Assignable = INDENT Expression OUTDENT', function() {
- return new Assign($1, $4);
- })
- ],
- AssignObj: [
- o('ObjAssignable', function() {
- return new Value($1);
- }), o('ObjAssignable : Expression', function() {
- return new Assign(new Value($1), $3, 'object');
- }), o('ObjAssignable :\
- INDENT Expression OUTDENT', function() {
- return new Assign(new Value($1), $4, 'object');
- }), o('Comment')
- ],
- ObjAssignable: [o('Identifier'), o('AlphaNumeric'), o('ThisProperty')],
- Return: [
- o('RETURN Expression', function() {
- return new Return($2);
- }), o('RETURN', function() {
- return new Return;
- })
- ],
- Comment: [
- o('HERECOMMENT', function() {
- return new Comment($1);
- })
- ],
- Code: [
- o('PARAM_START ParamList PARAM_END FuncGlyph Block', function() {
- return new Code($2, $5, $4);
- }), o('FuncGlyph Block', function() {
- return new Code([], $2, $1);
- })
- ],
- FuncGlyph: [
- o('->', function() {
- return 'func';
- }), o('=>', function() {
- return 'boundfunc';
- })
- ],
- OptComma: [o(''), o(',')],
- ParamList: [
- o('', function() {
- return [];
- }), o('Param', function() {
- return [$1];
- }), o('ParamList , Param', function() {
- return $1.concat($3);
- }), o('ParamList OptComma TERMINATOR Param', function() {
- return $1.concat($4);
- }), o('ParamList OptComma INDENT ParamList OptComma OUTDENT', function() {
- return $1.concat($4);
- })
- ],
- Param: [
- o('ParamVar', function() {
- return new Param($1);
- }), o('ParamVar ...', function() {
- return new Param($1, null, true);
- }), o('ParamVar = Expression', function() {
- return new Param($1, $3);
- })
- ],
- ParamVar: [o('Identifier'), o('ThisProperty'), o('Array'), o('Object')],
- Splat: [
- o('Expression ...', function() {
- return new Splat($1);
- })
- ],
- SimpleAssignable: [
- o('Identifier', function() {
- return new Value($1);
- }), o('Value Accessor', function() {
- return $1.add($2);
- }), o('Invocation Accessor', function() {
- return new Value($1, [].concat($2));
- }), o('ThisProperty')
- ],
- Assignable: [
- o('SimpleAssignable'), o('Array', function() {
- return new Value($1);
- }), o('Object', function() {
- return new Value($1);
- })
- ],
- Value: [
- o('Assignable'), o('Literal', function() {
- return new Value($1);
- }), o('Parenthetical', function() {
- return new Value($1);
- }), o('Range', function() {
- return new Value($1);
- }), o('This')
- ],
- Accessor: [
- o('. Identifier', function() {
- return new Access($2);
- }), o('?. Identifier', function() {
- return new Access($2, 'soak');
- }), o(':: Identifier', function() {
- return [new Access(new Literal('prototype')), new Access($2)];
- }), o('::', function() {
- return new Access(new Literal('prototype'));
- }), o('Index')
- ],
- Index: [
- o('INDEX_START IndexValue INDEX_END', function() {
- return $2;
- }), o('INDEX_SOAK Index', function() {
- return extend($2, {
- soak: true
- });
- })
- ],
- IndexValue: [
- o('Expression', function() {
- return new Index($1);
- }), o('Slice', function() {
- return new Slice($1);
- })
- ],
- Object: [
- o('{ AssignList OptComma }', function() {
- return new Obj($2, $1.generated);
- })
- ],
- AssignList: [
- o('', function() {
- return [];
- }), o('AssignObj', function() {
- return [$1];
- }), o('AssignList , AssignObj', function() {
- return $1.concat($3);
- }), o('AssignList OptComma TERMINATOR AssignObj', function() {
- return $1.concat($4);
- }), o('AssignList OptComma INDENT AssignList OptComma OUTDENT', function() {
- return $1.concat($4);
- })
- ],
- Class: [
- o('CLASS', function() {
- return new Class;
- }), o('CLASS Block', function() {
- return new Class(null, null, $2);
- }), o('CLASS EXTENDS Expression', function() {
- return new Class(null, $3);
- }), o('CLASS EXTENDS Expression Block', function() {
- return new Class(null, $3, $4);
- }), o('CLASS SimpleAssignable', function() {
- return new Class($2);
- }), o('CLASS SimpleAssignable Block', function() {
- return new Class($2, null, $3);
- }), o('CLASS SimpleAssignable EXTENDS Expression', function() {
- return new Class($2, $4);
- }), o('CLASS SimpleAssignable EXTENDS Expression Block', function() {
- return new Class($2, $4, $5);
- })
- ],
- Invocation: [
- o('Value OptFuncExist Arguments', function() {
- return new Call($1, $3, $2);
- }), o('Invocation OptFuncExist Arguments', function() {
- return new Call($1, $3, $2);
- }), o('SUPER', function() {
- return new Call('super', [new Splat(new Literal('arguments'))]);
- }), o('SUPER Arguments', function() {
- return new Call('super', $2);
- })
- ],
- OptFuncExist: [
- o('', function() {
- return false;
- }), o('FUNC_EXIST', function() {
- return true;
- })
- ],
- Arguments: [
- o('CALL_START CALL_END', function() {
- return [];
- }), o('CALL_START ArgList OptComma CALL_END', function() {
- return $2;
- })
- ],
- This: [
- o('THIS', function() {
- return new Value(new Literal('this'));
- }), o('@', function() {
- return new Value(new Literal('this'));
- })
- ],
- ThisProperty: [
- o('@ Identifier', function() {
- return new Value(new Literal('this'), [new Access($2)], 'this');
- })
- ],
- Array: [
- o('[ ]', function() {
- return new Arr([]);
- }), o('[ ArgList OptComma ]', function() {
- return new Arr($2);
- })
- ],
- RangeDots: [
- o('..', function() {
- return 'inclusive';
- }), o('...', function() {
- return 'exclusive';
- })
- ],
- Range: [
- o('[ Expression RangeDots Expression ]', function() {
- return new Range($2, $4, $3);
- })
- ],
- Slice: [
- o('Expression RangeDots Expression', function() {
- return new Range($1, $3, $2);
- }), o('Expression RangeDots', function() {
- return new Range($1, null, $2);
- }), o('RangeDots Expression', function() {
- return new Range(null, $2, $1);
- }), o('RangeDots', function() {
- return new Range(null, null, $1);
- })
- ],
- ArgList: [
- o('Arg', function() {
- return [$1];
- }), o('ArgList , Arg', function() {
- return $1.concat($3);
- }), o('ArgList OptComma TERMINATOR Arg', function() {
- return $1.concat($4);
- }), o('INDENT ArgList OptComma OUTDENT', function() {
- return $2;
- }), o('ArgList OptComma INDENT ArgList OptComma OUTDENT', function() {
- return $1.concat($4);
- })
- ],
- Arg: [o('Expression'), o('Splat')],
- SimpleArgs: [
- o('Expression'), o('SimpleArgs , Expression', function() {
- return [].concat($1, $3);
- })
- ],
- Try: [
- o('TRY Block', function() {
- return new Try($2);
- }), o('TRY Block Catch', function() {
- return new Try($2, $3[0], $3[1]);
- }), o('TRY Block FINALLY Block', function() {
- return new Try($2, null, null, $4);
- }), o('TRY Block Catch FINALLY Block', function() {
- return new Try($2, $3[0], $3[1], $5);
- })
- ],
- Catch: [
- o('CATCH Identifier Block', function() {
- return [$2, $3];
- })
- ],
- Throw: [
- o('THROW Expression', function() {
- return new Throw($2);
- })
- ],
- Parenthetical: [
- o('( Body )', function() {
- return new Parens($2);
- }), o('( INDENT Body OUTDENT )', function() {
- return new Parens($3);
- })
- ],
- WhileSource: [
- o('WHILE Expression', function() {
- return new While($2);
- }), o('WHILE Expression WHEN Expression', function() {
- return new While($2, {
- guard: $4
- });
- }), o('UNTIL Expression', function() {
- return new While($2, {
- invert: true
- });
- }), o('UNTIL Expression WHEN Expression', function() {
- return new While($2, {
- invert: true,
- guard: $4
- });
- })
- ],
- While: [
- o('WhileSource Block', function() {
- return $1.addBody($2);
- }), o('Statement WhileSource', function() {
- return $2.addBody(Block.wrap([$1]));
- }), o('Expression WhileSource', function() {
- return $2.addBody(Block.wrap([$1]));
- }), o('Loop', function() {
- return $1;
- })
- ],
- Loop: [
- o('LOOP Block', function() {
- return new While(new Literal('true')).addBody($2);
- }), o('LOOP Expression', function() {
- return new While(new Literal('true')).addBody(Block.wrap([$2]));
- })
- ],
- For: [
- o('Statement ForBody', function() {
- return new For($1, $2);
- }), o('Expression ForBody', function() {
- return new For($1, $2);
- }), o('ForBody Block', function() {
- return new For($2, $1);
- })
- ],
- ForBody: [
- o('FOR Range', function() {
- return {
- source: new Value($2)
- };
- }), o('ForStart ForSource', function() {
- $2.own = $1.own;
- $2.name = $1[0];
- $2.index = $1[1];
- return $2;
- })
- ],
- ForStart: [
- o('FOR ForVariables', function() {
- return $2;
- }), o('FOR OWN ForVariables', function() {
- $3.own = true;
- return $3;
- })
- ],
- ForValue: [
- o('Identifier'), o('ThisProperty'), o('Array', function() {
- return new Value($1);
- }), o('Object', function() {
- return new Value($1);
- })
- ],
- ForVariables: [
- o('ForValue', function() {
- return [$1];
- }), o('ForValue , ForValue', function() {
- return [$1, $3];
- })
- ],
- ForSource: [
- o('FORIN Expression', function() {
- return {
- source: $2
- };
- }), o('FOROF Expression', function() {
- return {
- source: $2,
- object: true
- };
- }), o('FORIN Expression WHEN Expression', function() {
- return {
- source: $2,
- guard: $4
- };
- }), o('FOROF Expression WHEN Expression', function() {
- return {
- source: $2,
- guard: $4,
- object: true
- };
- }), o('FORIN Expression BY Expression', function() {
- return {
- source: $2,
- step: $4
- };
- }), o('FORIN Expression WHEN Expression BY Expression', function() {
- return {
- source: $2,
- guard: $4,
- step: $6
- };
- }), o('FORIN Expression BY Expression WHEN Expression', function() {
- return {
- source: $2,
- step: $4,
- guard: $6
- };
- })
- ],
- Switch: [
- o('SWITCH Expression INDENT Whens OUTDENT', function() {
- return new Switch($2, $4);
- }), o('SWITCH Expression INDENT Whens ELSE Block OUTDENT', function() {
- return new Switch($2, $4, $6);
- }), o('SWITCH INDENT Whens OUTDENT', function() {
- return new Switch(null, $3);
- }), o('SWITCH INDENT Whens ELSE Block OUTDENT', function() {
- return new Switch(null, $3, $5);
- })
- ],
- Whens: [
- o('When'), o('Whens When', function() {
- return $1.concat($2);
- })
- ],
- When: [
- o('LEADING_WHEN SimpleArgs Block', function() {
- return [[$2, $3]];
- }), o('LEADING_WHEN SimpleArgs Block TERMINATOR', function() {
- return [[$2, $3]];
- })
- ],
- IfBlock: [
- o('IF Expression Block', function() {
- return new If($2, $3, {
- type: $1
- });
- }), o('IfBlock ELSE IF Expression Block', function() {
- return $1.addElse(new If($4, $5, {
- type: $3
- }));
- })
- ],
- If: [
- o('IfBlock'), o('IfBlock ELSE Block', function() {
- return $1.addElse($3);
- }), o('Statement POST_IF Expression', function() {
- return new If($3, Block.wrap([$1]), {
- type: $2,
- statement: true
- });
- }), o('Expression POST_IF Expression', function() {
- return new If($3, Block.wrap([$1]), {
- type: $2,
- statement: true
- });
- })
- ],
- Operation: [
- o('UNARY Expression', function() {
- return new Op($1, $2);
- }), o('- Expression', (function() {
- return new Op('-', $2);
- }), {
- prec: 'UNARY'
- }), o('+ Expression', (function() {
- return new Op('+', $2);
- }), {
- prec: 'UNARY'
- }), o('-- SimpleAssignable', function() {
- return new Op('--', $2);
- }), o('++ SimpleAssignable', function() {
- return new Op('++', $2);
- }), o('SimpleAssignable --', function() {
- return new Op('--', $1, null, true);
- }), o('SimpleAssignable ++', function() {
- return new Op('++', $1, null, true);
- }), o('Expression ?', function() {
- return new Existence($1);
- }), o('Expression + Expression', function() {
- return new Op('+', $1, $3);
- }), o('Expression - Expression', function() {
- return new Op('-', $1, $3);
- }), o('Expression MATH Expression', function() {
- return new Op($2, $1, $3);
- }), o('Expression SHIFT Expression', function() {
- return new Op($2, $1, $3);
- }), o('Expression COMPARE Expression', function() {
- return new Op($2, $1, $3);
- }), o('Expression LOGIC Expression', function() {
- return new Op($2, $1, $3);
- }), o('Expression RELATION Expression', function() {
- if ($2.charAt(0) === '!') {
- return new Op($2.slice(1), $1, $3).invert();
- } else {
- return new Op($2, $1, $3);
- }
- }), o('SimpleAssignable COMPOUND_ASSIGN\
- Expression', function() {
- return new Assign($1, $3, $2);
- }), o('SimpleAssignable COMPOUND_ASSIGN\
- INDENT Expression OUTDENT', function() {
- return new Assign($1, $4, $2);
- }), o('SimpleAssignable EXTENDS Expression', function() {
- return new Extends($1, $3);
- })
- ]
- };
-
- operators = [['left', '.', '?.', '::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];
-
- tokens = [];
-
- for (name in grammar) {
- alternatives = grammar[name];
- grammar[name] = (function() {
- var _i, _j, _len, _len1, _ref, _results;
- _results = [];
- for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
- alt = alternatives[_i];
- _ref = alt[0].split(' ');
- for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
- token = _ref[_j];
- if (!grammar[token]) {
- tokens.push(token);
- }
- }
- if (name === 'Root') {
- alt[1] = "return " + alt[1];
- }
- _results.push(alt);
- }
- return _results;
- })();
- }
-
- exports.parser = new Parser({
- tokens: tokens.join(' '),
- bnf: grammar,
- operators: operators.reverse(),
- startSymbol: 'Root'
- });
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/helpers.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/helpers.js
deleted file mode 100644
index f9929f75..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/helpers.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var extend, flatten, _ref;
-
- exports.starts = function(string, literal, start) {
- return literal === string.substr(start, literal.length);
- };
-
- exports.ends = function(string, literal, back) {
- var len;
- len = literal.length;
- return literal === string.substr(string.length - len - (back || 0), len);
- };
-
- exports.compact = function(array) {
- var item, _i, _len, _results;
- _results = [];
- for (_i = 0, _len = array.length; _i < _len; _i++) {
- item = array[_i];
- if (item) {
- _results.push(item);
- }
- }
- return _results;
- };
-
- exports.count = function(string, substr) {
- var num, pos;
- num = pos = 0;
- if (!substr.length) {
- return 1 / 0;
- }
- while (pos = 1 + string.indexOf(substr, pos)) {
- num++;
- }
- return num;
- };
-
- exports.merge = function(options, overrides) {
- return extend(extend({}, options), overrides);
- };
-
- extend = exports.extend = function(object, properties) {
- var key, val;
- for (key in properties) {
- val = properties[key];
- object[key] = val;
- }
- return object;
- };
-
- exports.flatten = flatten = function(array) {
- var element, flattened, _i, _len;
- flattened = [];
- for (_i = 0, _len = array.length; _i < _len; _i++) {
- element = array[_i];
- if (element instanceof Array) {
- flattened = flattened.concat(flatten(element));
- } else {
- flattened.push(element);
- }
- }
- return flattened;
- };
-
- exports.del = function(obj, key) {
- var val;
- val = obj[key];
- delete obj[key];
- return val;
- };
-
- exports.last = function(array, back) {
- return array[array.length - (back || 0) - 1];
- };
-
- exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
- var e, _i, _len;
- for (_i = 0, _len = this.length; _i < _len; _i++) {
- e = this[_i];
- if (fn(e)) {
- return true;
- }
- }
- return false;
- };
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/index.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/index.js
deleted file mode 100644
index b1c17657..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var key, val, _ref;
-
- _ref = require('./coffee-script');
- for (key in _ref) {
- val = _ref[key];
- exports[key] = val;
- }
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/lexer.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/lexer.js
deleted file mode 100644
index 1b777cb4..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/lexer.js
+++ /dev/null
@@ -1,788 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref, _ref1,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
- _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
-
- _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last;
-
- exports.Lexer = Lexer = (function() {
-
- function Lexer() {}
-
- Lexer.prototype.tokenize = function(code, opts) {
- var i, tag;
- if (opts == null) {
- opts = {};
- }
- if (WHITESPACE.test(code)) {
- code = "\n" + code;
- }
- code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
- this.code = code;
- this.line = opts.line || 0;
- this.indent = 0;
- this.indebt = 0;
- this.outdebt = 0;
- this.indents = [];
- this.ends = [];
- this.tokens = [];
- i = 0;
- while (this.chunk = code.slice(i)) {
- i += this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
- }
- this.closeIndentation();
- if (tag = this.ends.pop()) {
- this.error("missing " + tag);
- }
- if (opts.rewrite === false) {
- return this.tokens;
- }
- return (new Rewriter).rewrite(this.tokens);
- };
-
- Lexer.prototype.identifierToken = function() {
- var colon, forcedIdentifier, id, input, match, prev, tag, _ref2, _ref3;
- if (!(match = IDENTIFIER.exec(this.chunk))) {
- return 0;
- }
- input = match[0], id = match[1], colon = match[2];
- if (id === 'own' && this.tag() === 'FOR') {
- this.token('OWN', id);
- return id.length;
- }
- forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::') || !prev.spaced && prev[0] === '@');
- tag = 'IDENTIFIER';
- if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
- tag = id.toUpperCase();
- if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
- tag = 'LEADING_WHEN';
- } else if (tag === 'FOR') {
- this.seenFor = true;
- } else if (tag === 'UNLESS') {
- tag = 'IF';
- } else if (__indexOf.call(UNARY, tag) >= 0) {
- tag = 'UNARY';
- } else if (__indexOf.call(RELATION, tag) >= 0) {
- if (tag !== 'INSTANCEOF' && this.seenFor) {
- tag = 'FOR' + tag;
- this.seenFor = false;
- } else {
- tag = 'RELATION';
- if (this.value() === '!') {
- this.tokens.pop();
- id = '!' + id;
- }
- }
- }
- }
- if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
- if (forcedIdentifier) {
- tag = 'IDENTIFIER';
- id = new String(id);
- id.reserved = true;
- } else if (__indexOf.call(RESERVED, id) >= 0) {
- this.error("reserved word \"" + id + "\"");
- }
- }
- if (!forcedIdentifier) {
- if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
- id = COFFEE_ALIAS_MAP[id];
- }
- tag = (function() {
- switch (id) {
- case '!':
- return 'UNARY';
- case '==':
- case '!=':
- return 'COMPARE';
- case '&&':
- case '||':
- return 'LOGIC';
- case 'true':
- case 'false':
- return 'BOOL';
- case 'break':
- case 'continue':
- return 'STATEMENT';
- default:
- return tag;
- }
- })();
- }
- this.token(tag, id);
- if (colon) {
- this.token(':', ':');
- }
- return input.length;
- };
-
- Lexer.prototype.numberToken = function() {
- var binaryLiteral, lexedLength, match, number, octalLiteral;
- if (!(match = NUMBER.exec(this.chunk))) {
- return 0;
- }
- number = match[0];
- if (/^0[BOX]/.test(number)) {
- this.error("radix prefix '" + number + "' must be lowercase");
- } else if (/E/.test(number) && !/^0x/.test(number)) {
- this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
- } else if (/^0\d*[89]/.test(number)) {
- this.error("decimal literal '" + number + "' must not be prefixed with '0'");
- } else if (/^0\d+/.test(number)) {
- this.error("octal literal '" + number + "' must be prefixed with '0o'");
- }
- lexedLength = number.length;
- if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
- number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
- }
- if (binaryLiteral = /^0b([01]+)/.exec(number)) {
- number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
- }
- this.token('NUMBER', number);
- return lexedLength;
- };
-
- Lexer.prototype.stringToken = function() {
- var match, octalEsc, string;
- switch (this.chunk.charAt(0)) {
- case "'":
- if (!(match = SIMPLESTR.exec(this.chunk))) {
- return 0;
- }
- this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
- break;
- case '"':
- if (!(string = this.balancedString(this.chunk, '"'))) {
- return 0;
- }
- if (0 < string.indexOf('#{', 1)) {
- this.interpolateString(string.slice(1, -1));
- } else {
- this.token('STRING', this.escapeLines(string));
- }
- break;
- default:
- return 0;
- }
- if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
- this.error("octal escape sequences " + string + " are not allowed");
- }
- this.line += count(string, '\n');
- return string.length;
- };
-
- Lexer.prototype.heredocToken = function() {
- var doc, heredoc, match, quote;
- if (!(match = HEREDOC.exec(this.chunk))) {
- return 0;
- }
- heredoc = match[0];
- quote = heredoc.charAt(0);
- doc = this.sanitizeHeredoc(match[2], {
- quote: quote,
- indent: null
- });
- if (quote === '"' && 0 <= doc.indexOf('#{')) {
- this.interpolateString(doc, {
- heredoc: true
- });
- } else {
- this.token('STRING', this.makeString(doc, quote, true));
- }
- this.line += count(heredoc, '\n');
- return heredoc.length;
- };
-
- Lexer.prototype.commentToken = function() {
- var comment, here, match;
- if (!(match = this.chunk.match(COMMENT))) {
- return 0;
- }
- comment = match[0], here = match[1];
- if (here) {
- this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
- herecomment: true,
- indent: Array(this.indent + 1).join(' ')
- }));
- }
- this.line += count(comment, '\n');
- return comment.length;
- };
-
- Lexer.prototype.jsToken = function() {
- var match, script;
- if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
- return 0;
- }
- this.token('JS', (script = match[0]).slice(1, -1));
- this.line += count(script, '\n');
- return script.length;
- };
-
- Lexer.prototype.regexToken = function() {
- var flags, length, match, prev, regex, _ref2, _ref3;
- if (this.chunk.charAt(0) !== '/') {
- return 0;
- }
- if (match = HEREGEX.exec(this.chunk)) {
- length = this.heregexToken(match);
- this.line += count(match[0], '\n');
- return length;
- }
- prev = last(this.tokens);
- if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
- return 0;
- }
- if (!(match = REGEX.exec(this.chunk))) {
- return 0;
- }
- _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
- if (regex.slice(0, 2) === '/*') {
- this.error('regular expressions cannot begin with `*`');
- }
- if (regex === '//') {
- regex = '/(?:)/';
- }
- this.token('REGEX', "" + regex + flags);
- return match.length;
- };
-
- Lexer.prototype.heregexToken = function(match) {
- var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4, _ref5;
- heregex = match[0], body = match[1], flags = match[2];
- if (0 > body.indexOf('#{')) {
- re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
- if (re.match(/^\*/)) {
- this.error('regular expressions cannot begin with `*`');
- }
- this.token('REGEX', "/" + (re || '(?:)') + "/" + flags);
- return heregex.length;
- }
- this.token('IDENTIFIER', 'RegExp');
- this.tokens.push(['CALL_START', '(']);
- tokens = [];
- _ref2 = this.interpolateString(body, {
- regex: true
- });
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- _ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
- if (tag === 'TOKENS') {
- tokens.push.apply(tokens, value);
- } else {
- if (!(value = value.replace(HEREGEX_OMIT, ''))) {
- continue;
- }
- value = value.replace(/\\/g, '\\\\');
- tokens.push(['STRING', this.makeString(value, '"', true)]);
- }
- tokens.push(['+', '+']);
- }
- tokens.pop();
- if (((_ref4 = tokens[0]) != null ? _ref4[0] : void 0) !== 'STRING') {
- this.tokens.push(['STRING', '""'], ['+', '+']);
- }
- (_ref5 = this.tokens).push.apply(_ref5, tokens);
- if (flags) {
- this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
- }
- this.token(')', ')');
- return heregex.length;
- };
-
- Lexer.prototype.lineToken = function() {
- var diff, indent, match, noNewlines, size;
- if (!(match = MULTI_DENT.exec(this.chunk))) {
- return 0;
- }
- indent = match[0];
- this.line += count(indent, '\n');
- this.seenFor = false;
- size = indent.length - 1 - indent.lastIndexOf('\n');
- noNewlines = this.unfinished();
- if (size - this.indebt === this.indent) {
- if (noNewlines) {
- this.suppressNewlines();
- } else {
- this.newlineToken();
- }
- return indent.length;
- }
- if (size > this.indent) {
- if (noNewlines) {
- this.indebt = size - this.indent;
- this.suppressNewlines();
- return indent.length;
- }
- diff = size - this.indent + this.outdebt;
- this.token('INDENT', diff);
- this.indents.push(diff);
- this.ends.push('OUTDENT');
- this.outdebt = this.indebt = 0;
- } else {
- this.indebt = 0;
- this.outdentToken(this.indent - size, noNewlines);
- }
- this.indent = size;
- return indent.length;
- };
-
- Lexer.prototype.outdentToken = function(moveOut, noNewlines) {
- var dent, len;
- while (moveOut > 0) {
- len = this.indents.length - 1;
- if (this.indents[len] === void 0) {
- moveOut = 0;
- } else if (this.indents[len] === this.outdebt) {
- moveOut -= this.outdebt;
- this.outdebt = 0;
- } else if (this.indents[len] < this.outdebt) {
- this.outdebt -= this.indents[len];
- moveOut -= this.indents[len];
- } else {
- dent = this.indents.pop() - this.outdebt;
- moveOut -= dent;
- this.outdebt = 0;
- this.pair('OUTDENT');
- this.token('OUTDENT', dent);
- }
- }
- if (dent) {
- this.outdebt -= moveOut;
- }
- while (this.value() === ';') {
- this.tokens.pop();
- }
- if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
- this.token('TERMINATOR', '\n');
- }
- return this;
- };
-
- Lexer.prototype.whitespaceToken = function() {
- var match, nline, prev;
- if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
- return 0;
- }
- prev = last(this.tokens);
- if (prev) {
- prev[match ? 'spaced' : 'newLine'] = true;
- }
- if (match) {
- return match[0].length;
- } else {
- return 0;
- }
- };
-
- Lexer.prototype.newlineToken = function() {
- while (this.value() === ';') {
- this.tokens.pop();
- }
- if (this.tag() !== 'TERMINATOR') {
- this.token('TERMINATOR', '\n');
- }
- return this;
- };
-
- Lexer.prototype.suppressNewlines = function() {
- if (this.value() === '\\') {
- this.tokens.pop();
- }
- return this;
- };
-
- Lexer.prototype.literalToken = function() {
- var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
- if (match = OPERATOR.exec(this.chunk)) {
- value = match[0];
- if (CODE.test(value)) {
- this.tagParameters();
- }
- } else {
- value = this.chunk.charAt(0);
- }
- tag = value;
- prev = last(this.tokens);
- if (value === '=' && prev) {
- if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
- this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
- }
- if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
- prev[0] = 'COMPOUND_ASSIGN';
- prev[1] += '=';
- return value.length;
- }
- }
- if (value === ';') {
- this.seenFor = false;
- tag = 'TERMINATOR';
- } else if (__indexOf.call(MATH, value) >= 0) {
- tag = 'MATH';
- } else if (__indexOf.call(COMPARE, value) >= 0) {
- tag = 'COMPARE';
- } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
- tag = 'COMPOUND_ASSIGN';
- } else if (__indexOf.call(UNARY, value) >= 0) {
- tag = 'UNARY';
- } else if (__indexOf.call(SHIFT, value) >= 0) {
- tag = 'SHIFT';
- } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
- tag = 'LOGIC';
- } else if (prev && !prev.spaced) {
- if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
- if (prev[0] === '?') {
- prev[0] = 'FUNC_EXIST';
- }
- tag = 'CALL_START';
- } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
- tag = 'INDEX_START';
- switch (prev[0]) {
- case '?':
- prev[0] = 'INDEX_SOAK';
- }
- }
- }
- switch (value) {
- case '(':
- case '{':
- case '[':
- this.ends.push(INVERSES[value]);
- break;
- case ')':
- case '}':
- case ']':
- this.pair(value);
- }
- this.token(tag, value);
- return value.length;
- };
-
- Lexer.prototype.sanitizeHeredoc = function(doc, options) {
- var attempt, herecomment, indent, match, _ref2;
- indent = options.indent, herecomment = options.herecomment;
- if (herecomment) {
- if (HEREDOC_ILLEGAL.test(doc)) {
- this.error("block comment cannot contain \"*/\", starting");
- }
- if (doc.indexOf('\n') <= 0) {
- return doc;
- }
- } else {
- while (match = HEREDOC_INDENT.exec(doc)) {
- attempt = match[1];
- if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
- indent = attempt;
- }
- }
- }
- if (indent) {
- doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
- }
- if (!herecomment) {
- doc = doc.replace(/^\n/, '');
- }
- return doc;
- };
-
- Lexer.prototype.tagParameters = function() {
- var i, stack, tok, tokens;
- if (this.tag() !== ')') {
- return this;
- }
- stack = [];
- tokens = this.tokens;
- i = tokens.length;
- tokens[--i][0] = 'PARAM_END';
- while (tok = tokens[--i]) {
- switch (tok[0]) {
- case ')':
- stack.push(tok);
- break;
- case '(':
- case 'CALL_START':
- if (stack.length) {
- stack.pop();
- } else if (tok[0] === '(') {
- tok[0] = 'PARAM_START';
- return this;
- } else {
- return this;
- }
- }
- }
- return this;
- };
-
- Lexer.prototype.closeIndentation = function() {
- return this.outdentToken(this.indent);
- };
-
- Lexer.prototype.balancedString = function(str, end) {
- var continueCount, i, letter, match, prev, stack, _i, _ref2;
- continueCount = 0;
- stack = [end];
- for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
- if (continueCount) {
- --continueCount;
- continue;
- }
- switch (letter = str.charAt(i)) {
- case '\\':
- ++continueCount;
- continue;
- case end:
- stack.pop();
- if (!stack.length) {
- return str.slice(0, +i + 1 || 9e9);
- }
- end = stack[stack.length - 1];
- continue;
- }
- if (end === '}' && (letter === '"' || letter === "'")) {
- stack.push(end = letter);
- } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
- continueCount += match[0].length - 1;
- } else if (end === '}' && letter === '{') {
- stack.push(end = '}');
- } else if (end === '"' && prev === '#' && letter === '{') {
- stack.push(end = '}');
- }
- prev = letter;
- }
- return this.error("missing " + (stack.pop()) + ", starting");
- };
-
- Lexer.prototype.interpolateString = function(str, options) {
- var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4;
- if (options == null) {
- options = {};
- }
- heredoc = options.heredoc, regex = options.regex;
- tokens = [];
- pi = 0;
- i = -1;
- while (letter = str.charAt(i += 1)) {
- if (letter === '\\') {
- i += 1;
- continue;
- }
- if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
- continue;
- }
- if (pi < i) {
- tokens.push(['NEOSTRING', str.slice(pi, i)]);
- }
- inner = expr.slice(1, -1);
- if (inner.length) {
- nested = new Lexer().tokenize(inner, {
- line: this.line,
- rewrite: false
- });
- nested.pop();
- if (((_ref2 = nested[0]) != null ? _ref2[0] : void 0) === 'TERMINATOR') {
- nested.shift();
- }
- if (len = nested.length) {
- if (len > 1) {
- nested.unshift(['(', '(', this.line]);
- nested.push([')', ')', this.line]);
- }
- tokens.push(['TOKENS', nested]);
- }
- }
- i += expr.length;
- pi = i + 1;
- }
- if ((i > pi && pi < str.length)) {
- tokens.push(['NEOSTRING', str.slice(pi)]);
- }
- if (regex) {
- return tokens;
- }
- if (!tokens.length) {
- return this.token('STRING', '""');
- }
- if (tokens[0][0] !== 'NEOSTRING') {
- tokens.unshift(['', '']);
- }
- if (interpolated = tokens.length > 1) {
- this.token('(', '(');
- }
- for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
- _ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
- if (i) {
- this.token('+', '+');
- }
- if (tag === 'TOKENS') {
- (_ref4 = this.tokens).push.apply(_ref4, value);
- } else {
- this.token('STRING', this.makeString(value, '"', heredoc));
- }
- }
- if (interpolated) {
- this.token(')', ')');
- }
- return tokens;
- };
-
- Lexer.prototype.pair = function(tag) {
- var size, wanted;
- if (tag !== (wanted = last(this.ends))) {
- if ('OUTDENT' !== wanted) {
- this.error("unmatched " + tag);
- }
- this.indent -= size = last(this.indents);
- this.outdentToken(size, true);
- return this.pair(tag);
- }
- return this.ends.pop();
- };
-
- Lexer.prototype.token = function(tag, value) {
- return this.tokens.push([tag, value, this.line]);
- };
-
- Lexer.prototype.tag = function(index, tag) {
- var tok;
- return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
- };
-
- Lexer.prototype.value = function(index, val) {
- var tok;
- return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
- };
-
- Lexer.prototype.unfinished = function() {
- var _ref2;
- return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
- };
-
- Lexer.prototype.escapeLines = function(str, heredoc) {
- return str.replace(MULTILINER, heredoc ? '\\n' : '');
- };
-
- Lexer.prototype.makeString = function(body, quote, heredoc) {
- if (!body) {
- return quote + quote;
- }
- body = body.replace(/\\([\s\S])/g, function(match, contents) {
- if (contents === '\n' || contents === quote) {
- return contents;
- } else {
- return match;
- }
- });
- body = body.replace(RegExp("" + quote, "g"), '\\$&');
- return quote + this.escapeLines(body, heredoc) + quote;
- };
-
- Lexer.prototype.error = function(message) {
- throw SyntaxError("" + message + " on line " + (this.line + 1));
- };
-
- return Lexer;
-
- })();
-
- JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
-
- COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
-
- COFFEE_ALIAS_MAP = {
- and: '&&',
- or: '||',
- is: '==',
- isnt: '!=',
- not: '!',
- yes: 'true',
- no: 'false',
- on: 'true',
- off: 'false'
- };
-
- COFFEE_ALIASES = (function() {
- var _results;
- _results = [];
- for (key in COFFEE_ALIAS_MAP) {
- _results.push(key);
- }
- return _results;
- })();
-
- COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
-
- RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];
-
- STRICT_PROSCRIBED = ['arguments', 'eval'];
-
- JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);
-
- exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);
-
- exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;
-
- IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
-
- NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
-
- HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
-
- OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
-
- WHITESPACE = /^[^\n\S]+/;
-
- COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;
-
- CODE = /^[-=]>/;
-
- MULTI_DENT = /^(?:\n[^\n\S]*)+/;
-
- SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
-
- JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
-
- REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
-
- HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
-
- HEREGEX_OMIT = /\s+(?:#.*)?/g;
-
- MULTILINER = /\n/g;
-
- HEREDOC_INDENT = /\n+([^\n\S]*)/g;
-
- HEREDOC_ILLEGAL = /\*\//;
-
- LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
-
- TRAILING_SPACES = /\s+$/;
-
- COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
-
- UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
-
- LOGIC = ['&&', '||', '&', '|', '^'];
-
- SHIFT = ['<<', '>>', '>>>'];
-
- COMPARE = ['==', '!=', '<', '>', '<=', '>='];
-
- MATH = ['*', '/', '%'];
-
- RELATION = ['IN', 'OF', 'INSTANCEOF'];
-
- BOOL = ['TRUE', 'FALSE'];
-
- NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
-
- NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
-
- CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
-
- INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
-
- LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/nodes.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/nodes.js
deleted file mode 100644
index f8e0777d..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/nodes.js
+++ /dev/null
@@ -1,2971 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, compact, del, ends, extend, flatten, last, merge, multident, some, starts, unfoldSoak, utility, _ref, _ref1,
- __hasProp = {}.hasOwnProperty,
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
- Scope = require('./scope').Scope;
-
- _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;
-
- _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last, some = _ref1.some;
-
- exports.extend = extend;
-
- YES = function() {
- return true;
- };
-
- NO = function() {
- return false;
- };
-
- THIS = function() {
- return this;
- };
-
- NEGATE = function() {
- this.negated = !this.negated;
- return this;
- };
-
- exports.Base = Base = (function() {
-
- function Base() {}
-
- Base.prototype.compile = function(o, lvl) {
- var node;
- o = extend({}, o);
- if (lvl) {
- o.level = lvl;
- }
- node = this.unfoldSoak(o) || this;
- node.tab = o.indent;
- if (o.level === LEVEL_TOP || !node.isStatement(o)) {
- return node.compileNode(o);
- } else {
- return node.compileClosure(o);
- }
- };
-
- Base.prototype.compileClosure = function(o) {
- if (this.jumps()) {
- throw SyntaxError('cannot use a pure statement in an expression.');
- }
- o.sharedScope = true;
- return Closure.wrap(this).compileNode(o);
- };
-
- Base.prototype.cache = function(o, level, reused) {
- var ref, sub;
- if (!this.isComplex()) {
- ref = level ? this.compile(o, level) : this;
- return [ref, ref];
- } else {
- ref = new Literal(reused || o.scope.freeVariable('ref'));
- sub = new Assign(ref, this);
- if (level) {
- return [sub.compile(o, level), ref.value];
- } else {
- return [sub, ref];
- }
- }
- };
-
- Base.prototype.compileLoopReference = function(o, name) {
- var src, tmp;
- src = tmp = this.compile(o, LEVEL_LIST);
- if (!((-Infinity < +src && +src < Infinity) || IDENTIFIER.test(src) && o.scope.check(src, true))) {
- src = "" + (tmp = o.scope.freeVariable(name)) + " = " + src;
- }
- return [src, tmp];
- };
-
- Base.prototype.makeReturn = function(res) {
- var me;
- me = this.unwrapAll();
- if (res) {
- return new Call(new Literal("" + res + ".push"), [me]);
- } else {
- return new Return(me);
- }
- };
-
- Base.prototype.contains = function(pred) {
- var contains;
- contains = false;
- this.traverseChildren(false, function(node) {
- if (pred(node)) {
- contains = true;
- return false;
- }
- });
- return contains;
- };
-
- Base.prototype.containsType = function(type) {
- return this instanceof type || this.contains(function(node) {
- return node instanceof type;
- });
- };
-
- Base.prototype.lastNonComment = function(list) {
- var i;
- i = list.length;
- while (i--) {
- if (!(list[i] instanceof Comment)) {
- return list[i];
- }
- }
- return null;
- };
-
- Base.prototype.toString = function(idt, name) {
- var tree;
- if (idt == null) {
- idt = '';
- }
- if (name == null) {
- name = this.constructor.name;
- }
- tree = '\n' + idt + name;
- if (this.soak) {
- tree += '?';
- }
- this.eachChild(function(node) {
- return tree += node.toString(idt + TAB);
- });
- return tree;
- };
-
- Base.prototype.eachChild = function(func) {
- var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
- if (!this.children) {
- return this;
- }
- _ref2 = this.children;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- attr = _ref2[_i];
- if (this[attr]) {
- _ref3 = flatten([this[attr]]);
- for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
- child = _ref3[_j];
- if (func(child) === false) {
- return this;
- }
- }
- }
- }
- return this;
- };
-
- Base.prototype.traverseChildren = function(crossScope, func) {
- return this.eachChild(function(child) {
- if (func(child) === false) {
- return false;
- }
- return child.traverseChildren(crossScope, func);
- });
- };
-
- Base.prototype.invert = function() {
- return new Op('!', this);
- };
-
- Base.prototype.unwrapAll = function() {
- var node;
- node = this;
- while (node !== (node = node.unwrap())) {
- continue;
- }
- return node;
- };
-
- Base.prototype.children = [];
-
- Base.prototype.isStatement = NO;
-
- Base.prototype.jumps = NO;
-
- Base.prototype.isComplex = YES;
-
- Base.prototype.isChainable = NO;
-
- Base.prototype.isAssignable = NO;
-
- Base.prototype.unwrap = THIS;
-
- Base.prototype.unfoldSoak = NO;
-
- Base.prototype.assigns = NO;
-
- return Base;
-
- })();
-
- exports.Block = Block = (function(_super) {
-
- __extends(Block, _super);
-
- function Block(nodes) {
- this.expressions = compact(flatten(nodes || []));
- }
-
- Block.prototype.children = ['expressions'];
-
- Block.prototype.push = function(node) {
- this.expressions.push(node);
- return this;
- };
-
- Block.prototype.pop = function() {
- return this.expressions.pop();
- };
-
- Block.prototype.unshift = function(node) {
- this.expressions.unshift(node);
- return this;
- };
-
- Block.prototype.unwrap = function() {
- if (this.expressions.length === 1) {
- return this.expressions[0];
- } else {
- return this;
- }
- };
-
- Block.prototype.isEmpty = function() {
- return !this.expressions.length;
- };
-
- Block.prototype.isStatement = function(o) {
- var exp, _i, _len, _ref2;
- _ref2 = this.expressions;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- exp = _ref2[_i];
- if (exp.isStatement(o)) {
- return true;
- }
- }
- return false;
- };
-
- Block.prototype.jumps = function(o) {
- var exp, _i, _len, _ref2;
- _ref2 = this.expressions;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- exp = _ref2[_i];
- if (exp.jumps(o)) {
- return exp;
- }
- }
- };
-
- Block.prototype.makeReturn = function(res) {
- var expr, len;
- len = this.expressions.length;
- while (len--) {
- expr = this.expressions[len];
- if (!(expr instanceof Comment)) {
- this.expressions[len] = expr.makeReturn(res);
- if (expr instanceof Return && !expr.expression) {
- this.expressions.splice(len, 1);
- }
- break;
- }
- }
- return this;
- };
-
- Block.prototype.compile = function(o, level) {
- if (o == null) {
- o = {};
- }
- if (o.scope) {
- return Block.__super__.compile.call(this, o, level);
- } else {
- return this.compileRoot(o);
- }
- };
-
- Block.prototype.compileNode = function(o) {
- var code, codes, node, top, _i, _len, _ref2;
- this.tab = o.indent;
- top = o.level === LEVEL_TOP;
- codes = [];
- _ref2 = this.expressions;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- node = _ref2[_i];
- node = node.unwrapAll();
- node = node.unfoldSoak(o) || node;
- if (node instanceof Block) {
- codes.push(node.compileNode(o));
- } else if (top) {
- node.front = true;
- code = node.compile(o);
- if (!node.isStatement(o)) {
- code = "" + this.tab + code + ";";
- if (node instanceof Literal) {
- code = "" + code + "\n";
- }
- }
- codes.push(code);
- } else {
- codes.push(node.compile(o, LEVEL_LIST));
- }
- }
- if (top) {
- if (this.spaced) {
- return "\n" + (codes.join('\n\n')) + "\n";
- } else {
- return codes.join('\n');
- }
- }
- code = codes.join(', ') || 'void 0';
- if (codes.length > 1 && o.level >= LEVEL_LIST) {
- return "(" + code + ")";
- } else {
- return code;
- }
- };
-
- Block.prototype.compileRoot = function(o) {
- var code, exp, i, prelude, preludeExps, rest;
- o.indent = o.bare ? '' : TAB;
- o.scope = new Scope(null, this, null);
- o.level = LEVEL_TOP;
- this.spaced = true;
- prelude = "";
- if (!o.bare) {
- preludeExps = (function() {
- var _i, _len, _ref2, _results;
- _ref2 = this.expressions;
- _results = [];
- for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
- exp = _ref2[i];
- if (!(exp.unwrap() instanceof Comment)) {
- break;
- }
- _results.push(exp);
- }
- return _results;
- }).call(this);
- rest = this.expressions.slice(preludeExps.length);
- this.expressions = preludeExps;
- if (preludeExps.length) {
- prelude = "" + (this.compileNode(merge(o, {
- indent: ''
- }))) + "\n";
- }
- this.expressions = rest;
- }
- code = this.compileWithDeclarations(o);
- if (o.bare) {
- return code;
- }
- return "" + prelude + "(function() {\n" + code + "\n}).call(this);\n";
- };
-
- Block.prototype.compileWithDeclarations = function(o) {
- var assigns, code, declars, exp, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
- code = post = '';
- _ref2 = this.expressions;
- for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
- exp = _ref2[i];
- exp = exp.unwrap();
- if (!(exp instanceof Comment || exp instanceof Literal)) {
- break;
- }
- }
- o = merge(o, {
- level: LEVEL_TOP
- });
- if (i) {
- rest = this.expressions.splice(i, 9e9);
- _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1];
- _ref4 = [this.compileNode(o), spaced], code = _ref4[0], this.spaced = _ref4[1];
- this.expressions = rest;
- }
- post = this.compileNode(o);
- scope = o.scope;
- if (scope.expressions === this) {
- declars = o.scope.hasDeclarations();
- assigns = scope.hasAssignments;
- if (declars || assigns) {
- if (i) {
- code += '\n';
- }
- code += "" + this.tab + "var ";
- if (declars) {
- code += scope.declaredVariables().join(', ');
- }
- if (assigns) {
- if (declars) {
- code += ",\n" + (this.tab + TAB);
- }
- code += scope.assignedVariables().join(",\n" + (this.tab + TAB));
- }
- code += ';\n';
- }
- }
- return code + post;
- };
-
- Block.wrap = function(nodes) {
- if (nodes.length === 1 && nodes[0] instanceof Block) {
- return nodes[0];
- }
- return new Block(nodes);
- };
-
- return Block;
-
- })(Base);
-
- exports.Literal = Literal = (function(_super) {
-
- __extends(Literal, _super);
-
- function Literal(value) {
- this.value = value;
- }
-
- Literal.prototype.makeReturn = function() {
- if (this.isStatement()) {
- return this;
- } else {
- return Literal.__super__.makeReturn.apply(this, arguments);
- }
- };
-
- Literal.prototype.isAssignable = function() {
- return IDENTIFIER.test(this.value);
- };
-
- Literal.prototype.isStatement = function() {
- var _ref2;
- return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
- };
-
- Literal.prototype.isComplex = NO;
-
- Literal.prototype.assigns = function(name) {
- return name === this.value;
- };
-
- Literal.prototype.jumps = function(o) {
- if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) {
- return this;
- }
- if (this.value === 'continue' && !(o != null ? o.loop : void 0)) {
- return this;
- }
- };
-
- Literal.prototype.compileNode = function(o) {
- var code, _ref2;
- code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
- if (this.isStatement()) {
- return "" + this.tab + code + ";";
- } else {
- return code;
- }
- };
-
- Literal.prototype.toString = function() {
- return ' "' + this.value + '"';
- };
-
- return Literal;
-
- })(Base);
-
- exports.Undefined = (function(_super) {
-
- __extends(Undefined, _super);
-
- function Undefined() {
- return Undefined.__super__.constructor.apply(this, arguments);
- }
-
- Undefined.prototype.isAssignable = NO;
-
- Undefined.prototype.isComplex = NO;
-
- Undefined.prototype.compileNode = function(o) {
- if (o.level >= LEVEL_ACCESS) {
- return '(void 0)';
- } else {
- return 'void 0';
- }
- };
-
- return Undefined;
-
- })(Base);
-
- exports.Null = (function(_super) {
-
- __extends(Null, _super);
-
- function Null() {
- return Null.__super__.constructor.apply(this, arguments);
- }
-
- Null.prototype.isAssignable = NO;
-
- Null.prototype.isComplex = NO;
-
- Null.prototype.compileNode = function() {
- return "null";
- };
-
- return Null;
-
- })(Base);
-
- exports.Bool = (function(_super) {
-
- __extends(Bool, _super);
-
- Bool.prototype.isAssignable = NO;
-
- Bool.prototype.isComplex = NO;
-
- Bool.prototype.compileNode = function() {
- return this.val;
- };
-
- function Bool(val) {
- this.val = val;
- }
-
- return Bool;
-
- })(Base);
-
- exports.Return = Return = (function(_super) {
-
- __extends(Return, _super);
-
- function Return(expr) {
- if (expr && !expr.unwrap().isUndefined) {
- this.expression = expr;
- }
- }
-
- Return.prototype.children = ['expression'];
-
- Return.prototype.isStatement = YES;
-
- Return.prototype.makeReturn = THIS;
-
- Return.prototype.jumps = THIS;
-
- Return.prototype.compile = function(o, level) {
- var expr, _ref2;
- expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
- if (expr && !(expr instanceof Return)) {
- return expr.compile(o, level);
- } else {
- return Return.__super__.compile.call(this, o, level);
- }
- };
-
- Return.prototype.compileNode = function(o) {
- return this.tab + ("return" + [this.expression ? " " + (this.expression.compile(o, LEVEL_PAREN)) : void 0] + ";");
- };
-
- return Return;
-
- })(Base);
-
- exports.Value = Value = (function(_super) {
-
- __extends(Value, _super);
-
- function Value(base, props, tag) {
- if (!props && base instanceof Value) {
- return base;
- }
- this.base = base;
- this.properties = props || [];
- if (tag) {
- this[tag] = true;
- }
- return this;
- }
-
- Value.prototype.children = ['base', 'properties'];
-
- Value.prototype.add = function(props) {
- this.properties = this.properties.concat(props);
- return this;
- };
-
- Value.prototype.hasProperties = function() {
- return !!this.properties.length;
- };
-
- Value.prototype.isArray = function() {
- return !this.properties.length && this.base instanceof Arr;
- };
-
- Value.prototype.isComplex = function() {
- return this.hasProperties() || this.base.isComplex();
- };
-
- Value.prototype.isAssignable = function() {
- return this.hasProperties() || this.base.isAssignable();
- };
-
- Value.prototype.isSimpleNumber = function() {
- return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
- };
-
- Value.prototype.isString = function() {
- return this.base instanceof Literal && IS_STRING.test(this.base.value);
- };
-
- Value.prototype.isAtomic = function() {
- var node, _i, _len, _ref2;
- _ref2 = this.properties.concat(this.base);
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- node = _ref2[_i];
- if (node.soak || node instanceof Call) {
- return false;
- }
- }
- return true;
- };
-
- Value.prototype.isStatement = function(o) {
- return !this.properties.length && this.base.isStatement(o);
- };
-
- Value.prototype.assigns = function(name) {
- return !this.properties.length && this.base.assigns(name);
- };
-
- Value.prototype.jumps = function(o) {
- return !this.properties.length && this.base.jumps(o);
- };
-
- Value.prototype.isObject = function(onlyGenerated) {
- if (this.properties.length) {
- return false;
- }
- return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
- };
-
- Value.prototype.isSplice = function() {
- return last(this.properties) instanceof Slice;
- };
-
- Value.prototype.unwrap = function() {
- if (this.properties.length) {
- return this;
- } else {
- return this.base;
- }
- };
-
- Value.prototype.cacheReference = function(o) {
- var base, bref, name, nref;
- name = last(this.properties);
- if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
- return [this, this];
- }
- base = new Value(this.base, this.properties.slice(0, -1));
- if (base.isComplex()) {
- bref = new Literal(o.scope.freeVariable('base'));
- base = new Value(new Parens(new Assign(bref, base)));
- }
- if (!name) {
- return [base, bref];
- }
- if (name.isComplex()) {
- nref = new Literal(o.scope.freeVariable('name'));
- name = new Index(new Assign(nref, name.index));
- nref = new Index(nref);
- }
- return [base.add(name), new Value(bref || base.base, [nref || name])];
- };
-
- Value.prototype.compileNode = function(o) {
- var code, prop, props, _i, _len;
- this.base.front = this.front;
- props = this.properties;
- code = this.base.compile(o, props.length ? LEVEL_ACCESS : null);
- if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(code)) {
- code = "" + code + ".";
- }
- for (_i = 0, _len = props.length; _i < _len; _i++) {
- prop = props[_i];
- code += prop.compile(o);
- }
- return code;
- };
-
- Value.prototype.unfoldSoak = function(o) {
- var result,
- _this = this;
- if (this.unfoldedSoak != null) {
- return this.unfoldedSoak;
- }
- result = (function() {
- var fst, i, ifn, prop, ref, snd, _i, _len, _ref2;
- if (ifn = _this.base.unfoldSoak(o)) {
- Array.prototype.push.apply(ifn.body.properties, _this.properties);
- return ifn;
- }
- _ref2 = _this.properties;
- for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
- prop = _ref2[i];
- if (!prop.soak) {
- continue;
- }
- prop.soak = false;
- fst = new Value(_this.base, _this.properties.slice(0, i));
- snd = new Value(_this.base, _this.properties.slice(i));
- if (fst.isComplex()) {
- ref = new Literal(o.scope.freeVariable('ref'));
- fst = new Parens(new Assign(ref, fst));
- snd.base = ref;
- }
- return new If(new Existence(fst), snd, {
- soak: true
- });
- }
- return null;
- })();
- return this.unfoldedSoak = result || false;
- };
-
- return Value;
-
- })(Base);
-
- exports.Comment = Comment = (function(_super) {
-
- __extends(Comment, _super);
-
- function Comment(comment) {
- this.comment = comment;
- }
-
- Comment.prototype.isStatement = YES;
-
- Comment.prototype.makeReturn = THIS;
-
- Comment.prototype.compileNode = function(o, level) {
- var code;
- code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
- if ((level || o.level) === LEVEL_TOP) {
- code = o.indent + code;
- }
- return code;
- };
-
- return Comment;
-
- })(Base);
-
- exports.Call = Call = (function(_super) {
-
- __extends(Call, _super);
-
- function Call(variable, args, soak) {
- this.args = args != null ? args : [];
- this.soak = soak;
- this.isNew = false;
- this.isSuper = variable === 'super';
- this.variable = this.isSuper ? null : variable;
- }
-
- Call.prototype.children = ['variable', 'args'];
-
- Call.prototype.newInstance = function() {
- var base, _ref2;
- base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable;
- if (base instanceof Call && !base.isNew) {
- base.newInstance();
- } else {
- this.isNew = true;
- }
- return this;
- };
-
- Call.prototype.superReference = function(o) {
- var accesses, method, name;
- method = o.scope.namedMethod();
- if (!method) {
- throw SyntaxError('cannot call super outside of a function.');
- }
- name = method.name;
- if (name == null) {
- throw SyntaxError('cannot call super on an anonymous function.');
- }
- if (method.klass) {
- accesses = [new Access(new Literal('__super__'))];
- if (method["static"]) {
- accesses.push(new Access(new Literal('constructor')));
- }
- accesses.push(new Access(new Literal(name)));
- return (new Value(new Literal(method.klass), accesses)).compile(o);
- } else {
- return "" + name + ".__super__.constructor";
- }
- };
-
- Call.prototype.superThis = function(o) {
- var method;
- method = o.scope.method;
- return (method && !method.klass && method.context) || "this";
- };
-
- Call.prototype.unfoldSoak = function(o) {
- var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
- if (this.soak) {
- if (this.variable) {
- if (ifn = unfoldSoak(o, this, 'variable')) {
- return ifn;
- }
- _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
- } else {
- left = new Literal(this.superReference(o));
- rite = new Value(left);
- }
- rite = new Call(rite, this.args);
- rite.isNew = this.isNew;
- left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
- return new If(left, new Value(rite), {
- soak: true
- });
- }
- call = this;
- list = [];
- while (true) {
- if (call.variable instanceof Call) {
- list.push(call);
- call = call.variable;
- continue;
- }
- if (!(call.variable instanceof Value)) {
- break;
- }
- list.push(call);
- if (!((call = call.variable.base) instanceof Call)) {
- break;
- }
- }
- _ref3 = list.reverse();
- for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
- call = _ref3[_i];
- if (ifn) {
- if (call.variable instanceof Call) {
- call.variable = ifn;
- } else {
- call.variable.base = ifn;
- }
- }
- ifn = unfoldSoak(o, call, 'variable');
- }
- return ifn;
- };
-
- Call.prototype.filterImplicitObjects = function(list) {
- var node, nodes, obj, prop, properties, _i, _j, _len, _len1, _ref2;
- nodes = [];
- for (_i = 0, _len = list.length; _i < _len; _i++) {
- node = list[_i];
- if (!((typeof node.isObject === "function" ? node.isObject() : void 0) && node.base.generated)) {
- nodes.push(node);
- continue;
- }
- obj = null;
- _ref2 = node.base.properties;
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- prop = _ref2[_j];
- if (prop instanceof Assign || prop instanceof Comment) {
- if (!obj) {
- nodes.push(obj = new Obj(properties = [], true));
- }
- properties.push(prop);
- } else {
- nodes.push(prop);
- obj = null;
- }
- }
- }
- return nodes;
- };
-
- Call.prototype.compileNode = function(o) {
- var arg, args, code, _ref2;
- if ((_ref2 = this.variable) != null) {
- _ref2.front = this.front;
- }
- if (code = Splat.compileSplattedArray(o, this.args, true)) {
- return this.compileSplat(o, code);
- }
- args = this.filterImplicitObjects(this.args);
- args = ((function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = args.length; _i < _len; _i++) {
- arg = args[_i];
- _results.push(arg.compile(o, LEVEL_LIST));
- }
- return _results;
- })()).join(', ');
- if (this.isSuper) {
- return this.superReference(o) + (".call(" + (this.superThis(o)) + (args && ', ' + args) + ")");
- } else {
- return (this.isNew ? 'new ' : '') + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
- }
- };
-
- Call.prototype.compileSuper = function(args, o) {
- return "" + (this.superReference(o)) + ".call(" + (this.superThis(o)) + (args.length ? ', ' : '') + args + ")";
- };
-
- Call.prototype.compileSplat = function(o, splatArgs) {
- var base, fun, idt, name, ref;
- if (this.isSuper) {
- return "" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", " + splatArgs + ")";
- }
- if (this.isNew) {
- idt = this.tab + TAB;
- return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})(" + (this.variable.compile(o, LEVEL_LIST)) + ", " + splatArgs + ", function(){})";
- }
- base = new Value(this.variable);
- if ((name = base.properties.pop()) && base.isComplex()) {
- ref = o.scope.freeVariable('ref');
- fun = "(" + ref + " = " + (base.compile(o, LEVEL_LIST)) + ")" + (name.compile(o));
- } else {
- fun = base.compile(o, LEVEL_ACCESS);
- if (SIMPLENUM.test(fun)) {
- fun = "(" + fun + ")";
- }
- if (name) {
- ref = fun;
- fun += name.compile(o);
- } else {
- ref = 'null';
- }
- }
- return "" + fun + ".apply(" + ref + ", " + splatArgs + ")";
- };
-
- return Call;
-
- })(Base);
-
- exports.Extends = Extends = (function(_super) {
-
- __extends(Extends, _super);
-
- function Extends(child, parent) {
- this.child = child;
- this.parent = parent;
- }
-
- Extends.prototype.children = ['child', 'parent'];
-
- Extends.prototype.compile = function(o) {
- return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compile(o);
- };
-
- return Extends;
-
- })(Base);
-
- exports.Access = Access = (function(_super) {
-
- __extends(Access, _super);
-
- function Access(name, tag) {
- this.name = name;
- this.name.asKey = true;
- this.soak = tag === 'soak';
- }
-
- Access.prototype.children = ['name'];
-
- Access.prototype.compile = function(o) {
- var name;
- name = this.name.compile(o);
- if (IDENTIFIER.test(name)) {
- return "." + name;
- } else {
- return "[" + name + "]";
- }
- };
-
- Access.prototype.isComplex = NO;
-
- return Access;
-
- })(Base);
-
- exports.Index = Index = (function(_super) {
-
- __extends(Index, _super);
-
- function Index(index) {
- this.index = index;
- }
-
- Index.prototype.children = ['index'];
-
- Index.prototype.compile = function(o) {
- return "[" + (this.index.compile(o, LEVEL_PAREN)) + "]";
- };
-
- Index.prototype.isComplex = function() {
- return this.index.isComplex();
- };
-
- return Index;
-
- })(Base);
-
- exports.Range = Range = (function(_super) {
-
- __extends(Range, _super);
-
- Range.prototype.children = ['from', 'to'];
-
- function Range(from, to, tag) {
- this.from = from;
- this.to = to;
- this.exclusive = tag === 'exclusive';
- this.equals = this.exclusive ? '' : '=';
- }
-
- Range.prototype.compileVariables = function(o) {
- var step, _ref2, _ref3, _ref4, _ref5;
- o = merge(o, {
- top: true
- });
- _ref2 = this.from.cache(o, LEVEL_LIST), this.fromC = _ref2[0], this.fromVar = _ref2[1];
- _ref3 = this.to.cache(o, LEVEL_LIST), this.toC = _ref3[0], this.toVar = _ref3[1];
- if (step = del(o, 'step')) {
- _ref4 = step.cache(o, LEVEL_LIST), this.step = _ref4[0], this.stepVar = _ref4[1];
- }
- _ref5 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
- if (this.stepVar) {
- return this.stepNum = this.stepVar.match(SIMPLENUM);
- }
- };
-
- Range.prototype.compileNode = function(o) {
- var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3;
- if (!this.fromVar) {
- this.compileVariables(o);
- }
- if (!o.index) {
- return this.compileArray(o);
- }
- known = this.fromNum && this.toNum;
- idx = del(o, 'index');
- idxName = del(o, 'name');
- namedIndex = idxName && idxName !== idx;
- varPart = "" + idx + " = " + this.fromC;
- if (this.toC !== this.toVar) {
- varPart += ", " + this.toC;
- }
- if (this.step !== this.stepVar) {
- varPart += ", " + this.step;
- }
- _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
- condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
- stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
- if (namedIndex) {
- varPart = "" + idxName + " = " + varPart;
- }
- if (namedIndex) {
- stepPart = "" + idxName + " = " + stepPart;
- }
- return "" + varPart + "; " + condPart + "; " + stepPart;
- };
-
- Range.prototype.compileArray = function(o) {
- var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
- if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
- range = (function() {
- _results = [];
- for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
- return _results;
- }).apply(this);
- if (this.exclusive) {
- range.pop();
- }
- return "[" + (range.join(', ')) + "]";
- }
- idt = this.tab + TAB;
- i = o.scope.freeVariable('i');
- result = o.scope.freeVariable('results');
- pre = "\n" + idt + result + " = [];";
- if (this.fromNum && this.toNum) {
- o.index = i;
- body = this.compileNode(o);
- } else {
- vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : '');
- cond = "" + this.fromVar + " <= " + this.toVar;
- body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
- }
- post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
- hasArgs = function(node) {
- return node != null ? node.contains(function(n) {
- return n instanceof Literal && n.value === 'arguments' && !n.asKey;
- }) : void 0;
- };
- if (hasArgs(this.from) || hasArgs(this.to)) {
- args = ', arguments';
- }
- return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")";
- };
-
- return Range;
-
- })(Base);
-
- exports.Slice = Slice = (function(_super) {
-
- __extends(Slice, _super);
-
- Slice.prototype.children = ['range'];
-
- function Slice(range) {
- this.range = range;
- Slice.__super__.constructor.call(this);
- }
-
- Slice.prototype.compileNode = function(o) {
- var compiled, from, fromStr, to, toStr, _ref2;
- _ref2 = this.range, to = _ref2.to, from = _ref2.from;
- fromStr = from && from.compile(o, LEVEL_PAREN) || '0';
- compiled = to && to.compile(o, LEVEL_PAREN);
- if (to && !(!this.range.exclusive && +compiled === -1)) {
- toStr = ', ' + (this.range.exclusive ? compiled : SIMPLENUM.test(compiled) ? "" + (+compiled + 1) : (compiled = to.compile(o, LEVEL_ACCESS), "+" + compiled + " + 1 || 9e9"));
- }
- return ".slice(" + fromStr + (toStr || '') + ")";
- };
-
- return Slice;
-
- })(Base);
-
- exports.Obj = Obj = (function(_super) {
-
- __extends(Obj, _super);
-
- function Obj(props, generated) {
- this.generated = generated != null ? generated : false;
- this.objects = this.properties = props || [];
- }
-
- Obj.prototype.children = ['properties'];
-
- Obj.prototype.compileNode = function(o) {
- var i, idt, indent, join, lastNoncom, node, obj, prop, props, _i, _len;
- props = this.properties;
- if (!props.length) {
- return (this.front ? '({})' : '{}');
- }
- if (this.generated) {
- for (_i = 0, _len = props.length; _i < _len; _i++) {
- node = props[_i];
- if (node instanceof Value) {
- throw new Error('cannot have an implicit value in an implicit object');
- }
- }
- }
- idt = o.indent += TAB;
- lastNoncom = this.lastNonComment(this.properties);
- props = (function() {
- var _j, _len1, _results;
- _results = [];
- for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {
- prop = props[i];
- join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
- indent = prop instanceof Comment ? '' : idt;
- if (prop instanceof Value && prop["this"]) {
- prop = new Assign(prop.properties[0].name, prop, 'object');
- }
- if (!(prop instanceof Comment)) {
- if (!(prop instanceof Assign)) {
- prop = new Assign(prop, prop, 'object');
- }
- (prop.variable.base || prop.variable).asKey = true;
- }
- _results.push(indent + prop.compile(o, LEVEL_TOP) + join);
- }
- return _results;
- })();
- props = props.join('');
- obj = "{" + (props && '\n' + props + '\n' + this.tab) + "}";
- if (this.front) {
- return "(" + obj + ")";
- } else {
- return obj;
- }
- };
-
- Obj.prototype.assigns = function(name) {
- var prop, _i, _len, _ref2;
- _ref2 = this.properties;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- prop = _ref2[_i];
- if (prop.assigns(name)) {
- return true;
- }
- }
- return false;
- };
-
- return Obj;
-
- })(Base);
-
- exports.Arr = Arr = (function(_super) {
-
- __extends(Arr, _super);
-
- function Arr(objs) {
- this.objects = objs || [];
- }
-
- Arr.prototype.children = ['objects'];
-
- Arr.prototype.filterImplicitObjects = Call.prototype.filterImplicitObjects;
-
- Arr.prototype.compileNode = function(o) {
- var code, obj, objs;
- if (!this.objects.length) {
- return '[]';
- }
- o.indent += TAB;
- objs = this.filterImplicitObjects(this.objects);
- if (code = Splat.compileSplattedArray(o, objs)) {
- return code;
- }
- code = ((function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = objs.length; _i < _len; _i++) {
- obj = objs[_i];
- _results.push(obj.compile(o, LEVEL_LIST));
- }
- return _results;
- })()).join(', ');
- if (code.indexOf('\n') >= 0) {
- return "[\n" + o.indent + code + "\n" + this.tab + "]";
- } else {
- return "[" + code + "]";
- }
- };
-
- Arr.prototype.assigns = function(name) {
- var obj, _i, _len, _ref2;
- _ref2 = this.objects;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- obj = _ref2[_i];
- if (obj.assigns(name)) {
- return true;
- }
- }
- return false;
- };
-
- return Arr;
-
- })(Base);
-
- exports.Class = Class = (function(_super) {
-
- __extends(Class, _super);
-
- function Class(variable, parent, body) {
- this.variable = variable;
- this.parent = parent;
- this.body = body != null ? body : new Block;
- this.boundFuncs = [];
- this.body.classBody = true;
- }
-
- Class.prototype.children = ['variable', 'parent', 'body'];
-
- Class.prototype.determineName = function() {
- var decl, tail;
- if (!this.variable) {
- return null;
- }
- decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
- if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) {
- throw SyntaxError("variable name may not be " + decl);
- }
- return decl && (decl = IDENTIFIER.test(decl) && decl);
- };
-
- Class.prototype.setContext = function(name) {
- return this.body.traverseChildren(false, function(node) {
- if (node.classBody) {
- return false;
- }
- if (node instanceof Literal && node.value === 'this') {
- return node.value = name;
- } else if (node instanceof Code) {
- node.klass = name;
- if (node.bound) {
- return node.context = name;
- }
- }
- });
- };
-
- Class.prototype.addBoundFunctions = function(o) {
- var bvar, lhs, _i, _len, _ref2, _results;
- if (this.boundFuncs.length) {
- _ref2 = this.boundFuncs;
- _results = [];
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- bvar = _ref2[_i];
- lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o);
- _results.push(this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)")));
- }
- return _results;
- }
- };
-
- Class.prototype.addProperties = function(node, name, o) {
- var assign, base, exprs, func, props;
- props = node.base.properties.slice(0);
- exprs = (function() {
- var _results;
- _results = [];
- while (assign = props.shift()) {
- if (assign instanceof Assign) {
- base = assign.variable.base;
- delete assign.context;
- func = assign.value;
- if (base.value === 'constructor') {
- if (this.ctor) {
- throw new Error('cannot define more than one constructor in a class');
- }
- if (func.bound) {
- throw new Error('cannot define a constructor as a bound function');
- }
- if (func instanceof Code) {
- assign = this.ctor = func;
- } else {
- this.externalCtor = o.scope.freeVariable('class');
- assign = new Assign(new Literal(this.externalCtor), func);
- }
- } else {
- if (assign.variable["this"]) {
- func["static"] = true;
- if (func.bound) {
- func.context = name;
- }
- } else {
- assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
- if (func instanceof Code && func.bound) {
- this.boundFuncs.push(base);
- func.bound = false;
- }
- }
- }
- }
- _results.push(assign);
- }
- return _results;
- }).call(this);
- return compact(exprs);
- };
-
- Class.prototype.walkBody = function(name, o) {
- var _this = this;
- return this.traverseChildren(false, function(child) {
- var exps, i, node, _i, _len, _ref2;
- if (child instanceof Class) {
- return false;
- }
- if (child instanceof Block) {
- _ref2 = exps = child.expressions;
- for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
- node = _ref2[i];
- if (node instanceof Value && node.isObject(true)) {
- exps[i] = _this.addProperties(node, name, o);
- }
- }
- return child.expressions = exps = flatten(exps);
- }
- });
- };
-
- Class.prototype.hoistDirectivePrologue = function() {
- var expressions, index, node;
- index = 0;
- expressions = this.body.expressions;
- while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
- ++index;
- }
- return this.directives = expressions.splice(0, index);
- };
-
- Class.prototype.ensureConstructor = function(name) {
- if (!this.ctor) {
- this.ctor = new Code;
- if (this.parent) {
- this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
- }
- if (this.externalCtor) {
- this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
- }
- this.ctor.body.makeReturn();
- this.body.expressions.unshift(this.ctor);
- }
- this.ctor.ctor = this.ctor.name = name;
- this.ctor.klass = null;
- return this.ctor.noReturn = true;
- };
-
- Class.prototype.compileNode = function(o) {
- var call, decl, klass, lname, name, params, _ref2;
- decl = this.determineName();
- name = decl || '_Class';
- if (name.reserved) {
- name = "_" + name;
- }
- lname = new Literal(name);
- this.hoistDirectivePrologue();
- this.setContext(name);
- this.walkBody(name, o);
- this.ensureConstructor(name);
- this.body.spaced = true;
- if (!(this.ctor instanceof Code)) {
- this.body.expressions.unshift(this.ctor);
- }
- this.body.expressions.push(lname);
- (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives);
- this.addBoundFunctions(o);
- call = Closure.wrap(this.body);
- if (this.parent) {
- this.superClass = new Literal(o.scope.freeVariable('super', false));
- this.body.expressions.unshift(new Extends(lname, this.superClass));
- call.args.push(this.parent);
- params = call.variable.params || call.variable.base.params;
- params.push(new Param(this.superClass));
- }
- klass = new Parens(call, true);
- if (this.variable) {
- klass = new Assign(this.variable, klass);
- }
- return klass.compile(o);
- };
-
- return Class;
-
- })(Base);
-
- exports.Assign = Assign = (function(_super) {
-
- __extends(Assign, _super);
-
- function Assign(variable, value, context, options) {
- var forbidden, name, _ref2;
- this.variable = variable;
- this.value = value;
- this.context = context;
- this.param = options && options.param;
- this.subpattern = options && options.subpattern;
- forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0);
- if (forbidden && this.context !== 'object') {
- throw SyntaxError("variable name may not be \"" + name + "\"");
- }
- }
-
- Assign.prototype.children = ['variable', 'value'];
-
- Assign.prototype.isStatement = function(o) {
- return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0;
- };
-
- Assign.prototype.assigns = function(name) {
- return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
- };
-
- Assign.prototype.unfoldSoak = function(o) {
- return unfoldSoak(o, this, 'variable');
- };
-
- Assign.prototype.compileNode = function(o) {
- var isValue, match, name, val, varBase, _ref2, _ref3, _ref4, _ref5;
- if (isValue = this.variable instanceof Value) {
- if (this.variable.isArray() || this.variable.isObject()) {
- return this.compilePatternMatch(o);
- }
- if (this.variable.isSplice()) {
- return this.compileSplice(o);
- }
- if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
- return this.compileConditional(o);
- }
- }
- name = this.variable.compile(o, LEVEL_LIST);
- if (!this.context) {
- if (!(varBase = this.variable.unwrapAll()).isAssignable()) {
- throw SyntaxError("\"" + (this.variable.compile(o)) + "\" cannot be assigned.");
- }
- if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) {
- if (this.param) {
- o.scope.add(name, 'var');
- } else {
- o.scope.find(name);
- }
- }
- }
- if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
- if (match[1]) {
- this.value.klass = match[1];
- }
- this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5];
- }
- val = this.value.compile(o, LEVEL_LIST);
- if (this.context === 'object') {
- return "" + name + ": " + val;
- }
- val = name + (" " + (this.context || '=') + " ") + val;
- if (o.level <= LEVEL_LIST) {
- return val;
- } else {
- return "(" + val + ")";
- }
- };
-
- Assign.prototype.compilePatternMatch = function(o) {
- var acc, assigns, code, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
- top = o.level === LEVEL_TOP;
- value = this.value;
- objects = this.variable.base.objects;
- if (!(olen = objects.length)) {
- code = value.compile(o);
- if (o.level >= LEVEL_OP) {
- return "(" + code + ")";
- } else {
- return code;
- }
- }
- isObject = this.variable.isObject();
- if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
- if (obj instanceof Assign) {
- _ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value;
- } else {
- if (obj.base instanceof Parens) {
- _ref4 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref4[0], idx = _ref4[1];
- } else {
- idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
- }
- }
- acc = IDENTIFIER.test(idx.unwrap().value || 0);
- value = new Value(value);
- value.properties.push(new (acc ? Access : Index)(idx));
- if (_ref5 = obj.unwrap().value, __indexOf.call(RESERVED, _ref5) >= 0) {
- throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (value.compile(o)));
- }
- return new Assign(obj, value, null, {
- param: this.param
- }).compile(o, LEVEL_TOP);
- }
- vvar = value.compile(o, LEVEL_LIST);
- assigns = [];
- splat = false;
- if (!IDENTIFIER.test(vvar) || this.variable.assigns(vvar)) {
- assigns.push("" + (ref = o.scope.freeVariable('ref')) + " = " + vvar);
- vvar = ref;
- }
- for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
- obj = objects[i];
- idx = i;
- if (isObject) {
- if (obj instanceof Assign) {
- _ref6 = obj, (_ref7 = _ref6.variable, idx = _ref7.base), obj = _ref6.value;
- } else {
- if (obj.base instanceof Parens) {
- _ref8 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref8[0], idx = _ref8[1];
- } else {
- idx = obj["this"] ? obj.properties[0].name : obj;
- }
- }
- }
- if (!splat && obj instanceof Splat) {
- name = obj.name.unwrap().value;
- obj = obj.unwrap();
- val = "" + olen + " <= " + vvar + ".length ? " + (utility('slice')) + ".call(" + vvar + ", " + i;
- if (rest = olen - i - 1) {
- ivar = o.scope.freeVariable('i');
- val += ", " + ivar + " = " + vvar + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
- } else {
- val += ") : []";
- }
- val = new Literal(val);
- splat = "" + ivar + "++";
- } else {
- name = obj.unwrap().value;
- if (obj instanceof Splat) {
- obj = obj.name.compile(o);
- throw new SyntaxError("multiple splats are disallowed in an assignment: " + obj + "...");
- }
- if (typeof idx === 'number') {
- idx = new Literal(splat || idx);
- acc = false;
- } else {
- acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
- }
- val = new Value(new Literal(vvar), [new (acc ? Access : Index)(idx)]);
- }
- if ((name != null) && __indexOf.call(RESERVED, name) >= 0) {
- throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (val.compile(o)));
- }
- assigns.push(new Assign(obj, val, null, {
- param: this.param,
- subpattern: true
- }).compile(o, LEVEL_LIST));
- }
- if (!(top || this.subpattern)) {
- assigns.push(vvar);
- }
- code = assigns.join(', ');
- if (o.level < LEVEL_LIST) {
- return code;
- } else {
- return "(" + code + ")";
- }
- };
-
- Assign.prototype.compileConditional = function(o) {
- var left, right, _ref2;
- _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
- if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
- throw new Error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been defined.");
- }
- if (__indexOf.call(this.context, "?") >= 0) {
- o.isExistentialEquals = true;
- }
- return new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compile(o);
- };
-
- Assign.prototype.compileSplice = function(o) {
- var code, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
- _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
- name = this.variable.compile(o);
- _ref3 = (from != null ? from.cache(o, LEVEL_OP) : void 0) || ['0', '0'], fromDecl = _ref3[0], fromRef = _ref3[1];
- if (to) {
- if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
- to = +to.compile(o) - +fromRef;
- if (!exclusive) {
- to += 1;
- }
- } else {
- to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
- if (!exclusive) {
- to += ' + 1';
- }
- }
- } else {
- to = "9e9";
- }
- _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
- code = "[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat(" + valDef + ")), " + valRef;
- if (o.level > LEVEL_TOP) {
- return "(" + code + ")";
- } else {
- return code;
- }
- };
-
- return Assign;
-
- })(Base);
-
- exports.Code = Code = (function(_super) {
-
- __extends(Code, _super);
-
- function Code(params, body, tag) {
- this.params = params || [];
- this.body = body || new Block;
- this.bound = tag === 'boundfunc';
- if (this.bound) {
- this.context = '_this';
- }
- }
-
- Code.prototype.children = ['params', 'body'];
-
- Code.prototype.isStatement = function() {
- return !!this.ctor;
- };
-
- Code.prototype.jumps = NO;
-
- Code.prototype.compileNode = function(o) {
- var code, exprs, i, idt, lit, name, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
- o.scope = new Scope(o.scope, this.body, this);
- o.scope.shared = del(o, 'sharedScope');
- o.indent += TAB;
- delete o.bare;
- delete o.isExistentialEquals;
- params = [];
- exprs = [];
- _ref2 = this.paramNames();
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- name = _ref2[_i];
- if (!o.scope.check(name)) {
- o.scope.parameter(name);
- }
- }
- _ref3 = this.params;
- for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
- param = _ref3[_j];
- if (!param.splat) {
- continue;
- }
- _ref4 = this.params;
- for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
- p = _ref4[_k].name;
- if (p["this"]) {
- p = p.properties[0].name;
- }
- if (p.value) {
- o.scope.add(p.value, 'var', true);
- }
- }
- splats = new Assign(new Value(new Arr((function() {
- var _l, _len3, _ref5, _results;
- _ref5 = this.params;
- _results = [];
- for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
- p = _ref5[_l];
- _results.push(p.asReference(o));
- }
- return _results;
- }).call(this))), new Value(new Literal('arguments')));
- break;
- }
- _ref5 = this.params;
- for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
- param = _ref5[_l];
- if (param.isComplex()) {
- val = ref = param.asReference(o);
- if (param.value) {
- val = new Op('?', ref, param.value);
- }
- exprs.push(new Assign(new Value(param.name), val, '=', {
- param: true
- }));
- } else {
- ref = param;
- if (param.value) {
- lit = new Literal(ref.name.value + ' == null');
- val = new Assign(new Value(param.name), param.value, '=');
- exprs.push(new If(lit, val));
- }
- }
- if (!splats) {
- params.push(ref);
- }
- }
- wasEmpty = this.body.isEmpty();
- if (splats) {
- exprs.unshift(splats);
- }
- if (exprs.length) {
- (_ref6 = this.body.expressions).unshift.apply(_ref6, exprs);
- }
- for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) {
- p = params[i];
- o.scope.parameter(params[i] = p.compile(o));
- }
- uniqs = [];
- _ref7 = this.paramNames();
- for (_n = 0, _len5 = _ref7.length; _n < _len5; _n++) {
- name = _ref7[_n];
- if (__indexOf.call(uniqs, name) >= 0) {
- throw SyntaxError("multiple parameters named '" + name + "'");
- }
- uniqs.push(name);
- }
- if (!(wasEmpty || this.noReturn)) {
- this.body.makeReturn();
- }
- if (this.bound) {
- if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
- this.bound = this.context = o.scope.parent.method.context;
- } else if (!this["static"]) {
- o.scope.parent.assign('_this', 'this');
- }
- }
- idt = o.indent;
- code = 'function';
- if (this.ctor) {
- code += ' ' + this.name;
- }
- code += '(' + params.join(', ') + ') {';
- if (!this.body.isEmpty()) {
- code += "\n" + (this.body.compileWithDeclarations(o)) + "\n" + this.tab;
- }
- code += '}';
- if (this.ctor) {
- return this.tab + code;
- }
- if (this.front || (o.level >= LEVEL_ACCESS)) {
- return "(" + code + ")";
- } else {
- return code;
- }
- };
-
- Code.prototype.paramNames = function() {
- var names, param, _i, _len, _ref2;
- names = [];
- _ref2 = this.params;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- param = _ref2[_i];
- names.push.apply(names, param.names());
- }
- return names;
- };
-
- Code.prototype.traverseChildren = function(crossScope, func) {
- if (crossScope) {
- return Code.__super__.traverseChildren.call(this, crossScope, func);
- }
- };
-
- return Code;
-
- })(Base);
-
- exports.Param = Param = (function(_super) {
-
- __extends(Param, _super);
-
- function Param(name, value, splat) {
- var _ref2;
- this.name = name;
- this.value = value;
- this.splat = splat;
- if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
- throw SyntaxError("parameter name \"" + name + "\" is not allowed");
- }
- }
-
- Param.prototype.children = ['name', 'value'];
-
- Param.prototype.compile = function(o) {
- return this.name.compile(o, LEVEL_LIST);
- };
-
- Param.prototype.asReference = function(o) {
- var node;
- if (this.reference) {
- return this.reference;
- }
- node = this.name;
- if (node["this"]) {
- node = node.properties[0].name;
- if (node.value.reserved) {
- node = new Literal(o.scope.freeVariable(node.value));
- }
- } else if (node.isComplex()) {
- node = new Literal(o.scope.freeVariable('arg'));
- }
- node = new Value(node);
- if (this.splat) {
- node = new Splat(node);
- }
- return this.reference = node;
- };
-
- Param.prototype.isComplex = function() {
- return this.name.isComplex();
- };
-
- Param.prototype.names = function(name) {
- var atParam, names, obj, _i, _len, _ref2;
- if (name == null) {
- name = this.name;
- }
- atParam = function(obj) {
- var value;
- value = obj.properties[0].name.value;
- if (value.reserved) {
- return [];
- } else {
- return [value];
- }
- };
- if (name instanceof Literal) {
- return [name.value];
- }
- if (name instanceof Value) {
- return atParam(name);
- }
- names = [];
- _ref2 = name.objects;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- obj = _ref2[_i];
- if (obj instanceof Assign) {
- names.push(obj.value.unwrap().value);
- } else if (obj instanceof Splat) {
- names.push(obj.name.unwrap().value);
- } else if (obj instanceof Value) {
- if (obj.isArray() || obj.isObject()) {
- names.push.apply(names, this.names(obj.base));
- } else if (obj["this"]) {
- names.push.apply(names, atParam(obj));
- } else {
- names.push(obj.base.value);
- }
- } else {
- throw SyntaxError("illegal parameter " + (obj.compile()));
- }
- }
- return names;
- };
-
- return Param;
-
- })(Base);
-
- exports.Splat = Splat = (function(_super) {
-
- __extends(Splat, _super);
-
- Splat.prototype.children = ['name'];
-
- Splat.prototype.isAssignable = YES;
-
- function Splat(name) {
- this.name = name.compile ? name : new Literal(name);
- }
-
- Splat.prototype.assigns = function(name) {
- return this.name.assigns(name);
- };
-
- Splat.prototype.compile = function(o) {
- if (this.index != null) {
- return this.compileParam(o);
- } else {
- return this.name.compile(o);
- }
- };
-
- Splat.prototype.unwrap = function() {
- return this.name;
- };
-
- Splat.compileSplattedArray = function(o, list, apply) {
- var args, base, code, i, index, node, _i, _len;
- index = -1;
- while ((node = list[++index]) && !(node instanceof Splat)) {
- continue;
- }
- if (index >= list.length) {
- return '';
- }
- if (list.length === 1) {
- code = list[0].compile(o, LEVEL_LIST);
- if (apply) {
- return code;
- }
- return "" + (utility('slice')) + ".call(" + code + ")";
- }
- args = list.slice(index);
- for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
- node = args[i];
- code = node.compile(o, LEVEL_LIST);
- args[i] = node instanceof Splat ? "" + (utility('slice')) + ".call(" + code + ")" : "[" + code + "]";
- }
- if (index === 0) {
- return args[0] + (".concat(" + (args.slice(1).join(', ')) + ")");
- }
- base = (function() {
- var _j, _len1, _ref2, _results;
- _ref2 = list.slice(0, index);
- _results = [];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- node = _ref2[_j];
- _results.push(node.compile(o, LEVEL_LIST));
- }
- return _results;
- })();
- return "[" + (base.join(', ')) + "].concat(" + (args.join(', ')) + ")";
- };
-
- return Splat;
-
- })(Base);
-
- exports.While = While = (function(_super) {
-
- __extends(While, _super);
-
- function While(condition, options) {
- this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
- this.guard = options != null ? options.guard : void 0;
- }
-
- While.prototype.children = ['condition', 'guard', 'body'];
-
- While.prototype.isStatement = YES;
-
- While.prototype.makeReturn = function(res) {
- if (res) {
- return While.__super__.makeReturn.apply(this, arguments);
- } else {
- this.returns = !this.jumps({
- loop: true
- });
- return this;
- }
- };
-
- While.prototype.addBody = function(body) {
- this.body = body;
- return this;
- };
-
- While.prototype.jumps = function() {
- var expressions, node, _i, _len;
- expressions = this.body.expressions;
- if (!expressions.length) {
- return false;
- }
- for (_i = 0, _len = expressions.length; _i < _len; _i++) {
- node = expressions[_i];
- if (node.jumps({
- loop: true
- })) {
- return node;
- }
- }
- return false;
- };
-
- While.prototype.compileNode = function(o) {
- var body, code, rvar, set;
- o.indent += TAB;
- set = '';
- body = this.body;
- if (body.isEmpty()) {
- body = '';
- } else {
- if (this.returns) {
- body.makeReturn(rvar = o.scope.freeVariable('results'));
- set = "" + this.tab + rvar + " = [];\n";
- }
- if (this.guard) {
- if (body.expressions.length > 1) {
- body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
- } else {
- if (this.guard) {
- body = Block.wrap([new If(this.guard, body)]);
- }
- }
- }
- body = "\n" + (body.compile(o, LEVEL_TOP)) + "\n" + this.tab;
- }
- code = set + this.tab + ("while (" + (this.condition.compile(o, LEVEL_PAREN)) + ") {" + body + "}");
- if (this.returns) {
- code += "\n" + this.tab + "return " + rvar + ";";
- }
- return code;
- };
-
- return While;
-
- })(Base);
-
- exports.Op = Op = (function(_super) {
- var CONVERSIONS, INVERSIONS;
-
- __extends(Op, _super);
-
- function Op(op, first, second, flip) {
- if (op === 'in') {
- return new In(first, second);
- }
- if (op === 'do') {
- return this.generateDo(first);
- }
- if (op === 'new') {
- if (first instanceof Call && !first["do"] && !first.isNew) {
- return first.newInstance();
- }
- if (first instanceof Code && first.bound || first["do"]) {
- first = new Parens(first);
- }
- }
- this.operator = CONVERSIONS[op] || op;
- this.first = first;
- this.second = second;
- this.flip = !!flip;
- return this;
- }
-
- CONVERSIONS = {
- '==': '===',
- '!=': '!==',
- 'of': 'in'
- };
-
- INVERSIONS = {
- '!==': '===',
- '===': '!=='
- };
-
- Op.prototype.children = ['first', 'second'];
-
- Op.prototype.isSimpleNumber = NO;
-
- Op.prototype.isUnary = function() {
- return !this.second;
- };
-
- Op.prototype.isComplex = function() {
- var _ref2;
- return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
- };
-
- Op.prototype.isChainable = function() {
- var _ref2;
- return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
- };
-
- Op.prototype.invert = function() {
- var allInvertable, curr, fst, op, _ref2;
- if (this.isChainable() && this.first.isChainable()) {
- allInvertable = true;
- curr = this;
- while (curr && curr.operator) {
- allInvertable && (allInvertable = curr.operator in INVERSIONS);
- curr = curr.first;
- }
- if (!allInvertable) {
- return new Parens(this).invert();
- }
- curr = this;
- while (curr && curr.operator) {
- curr.invert = !curr.invert;
- curr.operator = INVERSIONS[curr.operator];
- curr = curr.first;
- }
- return this;
- } else if (op = INVERSIONS[this.operator]) {
- this.operator = op;
- if (this.first.unwrap() instanceof Op) {
- this.first.invert();
- }
- return this;
- } else if (this.second) {
- return new Parens(this).invert();
- } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
- return fst;
- } else {
- return new Op('!', this);
- }
- };
-
- Op.prototype.unfoldSoak = function(o) {
- var _ref2;
- return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
- };
-
- Op.prototype.generateDo = function(exp) {
- var call, func, param, passedParams, ref, _i, _len, _ref2;
- passedParams = [];
- func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
- _ref2 = func.params || [];
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- param = _ref2[_i];
- if (param.value) {
- passedParams.push(param.value);
- delete param.value;
- } else {
- passedParams.push(param);
- }
- }
- call = new Call(exp, passedParams);
- call["do"] = true;
- return call;
- };
-
- Op.prototype.compileNode = function(o) {
- var code, isChain, _ref2, _ref3;
- isChain = this.isChainable() && this.first.isChainable();
- if (!isChain) {
- this.first.front = this.front;
- }
- if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
- throw SyntaxError('delete operand may not be argument or var');
- }
- if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) {
- throw SyntaxError('prefix increment/decrement may not have eval or arguments operand');
- }
- if (this.isUnary()) {
- return this.compileUnary(o);
- }
- if (isChain) {
- return this.compileChain(o);
- }
- if (this.operator === '?') {
- return this.compileExistence(o);
- }
- code = this.first.compile(o, LEVEL_OP) + ' ' + this.operator + ' ' + this.second.compile(o, LEVEL_OP);
- if (o.level <= LEVEL_OP) {
- return code;
- } else {
- return "(" + code + ")";
- }
- };
-
- Op.prototype.compileChain = function(o) {
- var code, fst, shared, _ref2;
- _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
- fst = this.first.compile(o, LEVEL_OP);
- code = "" + fst + " " + (this.invert ? '&&' : '||') + " " + (shared.compile(o)) + " " + this.operator + " " + (this.second.compile(o, LEVEL_OP));
- return "(" + code + ")";
- };
-
- Op.prototype.compileExistence = function(o) {
- var fst, ref;
- if (this.first.isComplex()) {
- ref = new Literal(o.scope.freeVariable('ref'));
- fst = new Parens(new Assign(ref, this.first));
- } else {
- fst = this.first;
- ref = fst;
- }
- return new If(new Existence(fst), ref, {
- type: 'if'
- }).addElse(this.second).compile(o);
- };
-
- Op.prototype.compileUnary = function(o) {
- var op, parts, plusMinus;
- if (o.level >= LEVEL_ACCESS) {
- return (new Parens(this)).compile(o);
- }
- parts = [op = this.operator];
- plusMinus = op === '+' || op === '-';
- if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
- parts.push(' ');
- }
- if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) {
- this.first = new Parens(this.first);
- }
- parts.push(this.first.compile(o, LEVEL_OP));
- if (this.flip) {
- parts.reverse();
- }
- return parts.join('');
- };
-
- Op.prototype.toString = function(idt) {
- return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
- };
-
- return Op;
-
- })(Base);
-
- exports.In = In = (function(_super) {
-
- __extends(In, _super);
-
- function In(object, array) {
- this.object = object;
- this.array = array;
- }
-
- In.prototype.children = ['object', 'array'];
-
- In.prototype.invert = NEGATE;
-
- In.prototype.compileNode = function(o) {
- var hasSplat, obj, _i, _len, _ref2;
- if (this.array instanceof Value && this.array.isArray()) {
- _ref2 = this.array.base.objects;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- obj = _ref2[_i];
- if (!(obj instanceof Splat)) {
- continue;
- }
- hasSplat = true;
- break;
- }
- if (!hasSplat) {
- return this.compileOrTest(o);
- }
- }
- return this.compileLoopTest(o);
- };
-
- In.prototype.compileOrTest = function(o) {
- var cmp, cnj, i, item, ref, sub, tests, _ref2, _ref3;
- if (this.array.base.objects.length === 0) {
- return "" + (!!this.negated);
- }
- _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
- _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
- tests = (function() {
- var _i, _len, _ref4, _results;
- _ref4 = this.array.base.objects;
- _results = [];
- for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
- item = _ref4[i];
- _results.push((i ? ref : sub) + cmp + item.compile(o, LEVEL_ACCESS));
- }
- return _results;
- }).call(this);
- tests = tests.join(cnj);
- if (o.level < LEVEL_OP) {
- return tests;
- } else {
- return "(" + tests + ")";
- }
- };
-
- In.prototype.compileLoopTest = function(o) {
- var code, ref, sub, _ref2;
- _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
- code = utility('indexOf') + (".call(" + (this.array.compile(o, LEVEL_LIST)) + ", " + ref + ") ") + (this.negated ? '< 0' : '>= 0');
- if (sub === ref) {
- return code;
- }
- code = sub + ', ' + code;
- if (o.level < LEVEL_LIST) {
- return code;
- } else {
- return "(" + code + ")";
- }
- };
-
- In.prototype.toString = function(idt) {
- return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
- };
-
- return In;
-
- })(Base);
-
- exports.Try = Try = (function(_super) {
-
- __extends(Try, _super);
-
- function Try(attempt, error, recovery, ensure) {
- this.attempt = attempt;
- this.error = error;
- this.recovery = recovery;
- this.ensure = ensure;
- }
-
- Try.prototype.children = ['attempt', 'recovery', 'ensure'];
-
- Try.prototype.isStatement = YES;
-
- Try.prototype.jumps = function(o) {
- var _ref2;
- return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
- };
-
- Try.prototype.makeReturn = function(res) {
- if (this.attempt) {
- this.attempt = this.attempt.makeReturn(res);
- }
- if (this.recovery) {
- this.recovery = this.recovery.makeReturn(res);
- }
- return this;
- };
-
- Try.prototype.compileNode = function(o) {
- var catchPart, ensurePart, errorPart, tryPart;
- o.indent += TAB;
- errorPart = this.error ? " (" + (this.error.compile(o)) + ") " : ' ';
- tryPart = this.attempt.compile(o, LEVEL_TOP);
- catchPart = (function() {
- var _ref2;
- if (this.recovery) {
- if (_ref2 = this.error.value, __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
- throw SyntaxError("catch variable may not be \"" + this.error.value + "\"");
- }
- if (!o.scope.check(this.error.value)) {
- o.scope.add(this.error.value, 'param');
- }
- return " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}";
- } else if (!(this.ensure || this.recovery)) {
- return ' catch (_error) {}';
- }
- }).call(this);
- ensurePart = this.ensure ? " finally {\n" + (this.ensure.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : '';
- return "" + this.tab + "try {\n" + tryPart + "\n" + this.tab + "}" + (catchPart || '') + ensurePart;
- };
-
- return Try;
-
- })(Base);
-
- exports.Throw = Throw = (function(_super) {
-
- __extends(Throw, _super);
-
- function Throw(expression) {
- this.expression = expression;
- }
-
- Throw.prototype.children = ['expression'];
-
- Throw.prototype.isStatement = YES;
-
- Throw.prototype.jumps = NO;
-
- Throw.prototype.makeReturn = THIS;
-
- Throw.prototype.compileNode = function(o) {
- return this.tab + ("throw " + (this.expression.compile(o)) + ";");
- };
-
- return Throw;
-
- })(Base);
-
- exports.Existence = Existence = (function(_super) {
-
- __extends(Existence, _super);
-
- function Existence(expression) {
- this.expression = expression;
- }
-
- Existence.prototype.children = ['expression'];
-
- Existence.prototype.invert = NEGATE;
-
- Existence.prototype.compileNode = function(o) {
- var cmp, cnj, code, _ref2;
- this.expression.front = this.front;
- code = this.expression.compile(o, LEVEL_OP);
- if (IDENTIFIER.test(code) && !o.scope.check(code)) {
- _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1];
- code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
- } else {
- code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
- }
- if (o.level <= LEVEL_COND) {
- return code;
- } else {
- return "(" + code + ")";
- }
- };
-
- return Existence;
-
- })(Base);
-
- exports.Parens = Parens = (function(_super) {
-
- __extends(Parens, _super);
-
- function Parens(body) {
- this.body = body;
- }
-
- Parens.prototype.children = ['body'];
-
- Parens.prototype.unwrap = function() {
- return this.body;
- };
-
- Parens.prototype.isComplex = function() {
- return this.body.isComplex();
- };
-
- Parens.prototype.compileNode = function(o) {
- var bare, code, expr;
- expr = this.body.unwrap();
- if (expr instanceof Value && expr.isAtomic()) {
- expr.front = this.front;
- return expr.compile(o);
- }
- code = expr.compile(o, LEVEL_PAREN);
- bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
- if (bare) {
- return code;
- } else {
- return "(" + code + ")";
- }
- };
-
- return Parens;
-
- })(Base);
-
- exports.For = For = (function(_super) {
-
- __extends(For, _super);
-
- function For(body, source) {
- var _ref2;
- this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
- this.body = Block.wrap([body]);
- this.own = !!source.own;
- this.object = !!source.object;
- if (this.object) {
- _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
- }
- if (this.index instanceof Value) {
- throw SyntaxError('index cannot be a pattern matching expression');
- }
- this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
- this.pattern = this.name instanceof Value;
- if (this.range && this.index) {
- throw SyntaxError('indexes do not apply to range loops');
- }
- if (this.range && this.pattern) {
- throw SyntaxError('cannot pattern match over range loops');
- }
- this.returns = false;
- }
-
- For.prototype.children = ['body', 'source', 'guard', 'step'];
-
- For.prototype.compileNode = function(o) {
- var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, stepPart, stepvar, svar, varPart, _ref2;
- body = Block.wrap([this.body]);
- lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
- if (lastJumps && lastJumps instanceof Return) {
- this.returns = false;
- }
- source = this.range ? this.source.base : this.source;
- scope = o.scope;
- name = this.name && this.name.compile(o, LEVEL_LIST);
- index = this.index && this.index.compile(o, LEVEL_LIST);
- if (name && !this.pattern) {
- scope.find(name);
- }
- if (index) {
- scope.find(index);
- }
- if (this.returns) {
- rvar = scope.freeVariable('results');
- }
- ivar = (this.object && index) || scope.freeVariable('i');
- kvar = (this.range && name) || index || ivar;
- kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
- if (this.step && !this.range) {
- stepvar = scope.freeVariable("step");
- }
- if (this.pattern) {
- name = ivar;
- }
- varPart = '';
- guardPart = '';
- defPart = '';
- idt1 = this.tab + TAB;
- if (this.range) {
- forPart = source.compile(merge(o, {
- index: ivar,
- name: name,
- step: this.step
- }));
- } else {
- svar = this.source.compile(o, LEVEL_LIST);
- if ((name || this.own) && !IDENTIFIER.test(svar)) {
- defPart = "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
- svar = ref;
- }
- if (name && !this.pattern) {
- namePart = "" + name + " = " + svar + "[" + kvar + "]";
- }
- if (!this.object) {
- lvar = scope.freeVariable('len');
- forVarPart = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
- if (this.step) {
- forVarPart += ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP));
- }
- stepPart = "" + kvarAssign + (this.step ? "" + ivar + " += " + stepvar : (kvar !== ivar ? "++" + ivar : "" + ivar + "++"));
- forPart = "" + forVarPart + "; " + ivar + " < " + lvar + "; " + stepPart;
- }
- }
- if (this.returns) {
- resultPart = "" + this.tab + rvar + " = [];\n";
- returnResult = "\n" + this.tab + "return " + rvar + ";";
- body.makeReturn(rvar);
- }
- if (this.guard) {
- if (body.expressions.length > 1) {
- body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
- } else {
- if (this.guard) {
- body = Block.wrap([new If(this.guard, body)]);
- }
- }
- }
- if (this.pattern) {
- body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
- }
- defPart += this.pluckDirectCall(o, body);
- if (namePart) {
- varPart = "\n" + idt1 + namePart + ";";
- }
- if (this.object) {
- forPart = "" + kvar + " in " + svar;
- if (this.own) {
- guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
- }
- }
- body = body.compile(merge(o, {
- indent: idt1
- }), LEVEL_TOP);
- if (body) {
- body = '\n' + body + '\n';
- }
- return "" + defPart + (resultPart || '') + this.tab + "for (" + forPart + ") {" + guardPart + varPart + body + this.tab + "}" + (returnResult || '');
- };
-
- For.prototype.pluckDirectCall = function(o, body) {
- var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
- defs = '';
- _ref2 = body.expressions;
- for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
- expr = _ref2[idx];
- expr = expr.unwrapAll();
- if (!(expr instanceof Call)) {
- continue;
- }
- val = expr.variable.unwrapAll();
- if (!((val instanceof Code) || (val instanceof Value && ((_ref3 = val.base) != null ? _ref3.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref4 = (_ref5 = val.properties[0].name) != null ? _ref5.value : void 0) === 'call' || _ref4 === 'apply')))) {
- continue;
- }
- fn = ((_ref6 = val.base) != null ? _ref6.unwrapAll() : void 0) || val;
- ref = new Literal(o.scope.freeVariable('fn'));
- base = new Value(ref);
- if (val.base) {
- _ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
- }
- body.expressions[idx] = new Call(base, expr.args);
- defs += this.tab + new Assign(ref, fn).compile(o, LEVEL_TOP) + ';\n';
- }
- return defs;
- };
-
- return For;
-
- })(While);
-
- exports.Switch = Switch = (function(_super) {
-
- __extends(Switch, _super);
-
- function Switch(subject, cases, otherwise) {
- this.subject = subject;
- this.cases = cases;
- this.otherwise = otherwise;
- }
-
- Switch.prototype.children = ['subject', 'cases', 'otherwise'];
-
- Switch.prototype.isStatement = YES;
-
- Switch.prototype.jumps = function(o) {
- var block, conds, _i, _len, _ref2, _ref3, _ref4;
- if (o == null) {
- o = {
- block: true
- };
- }
- _ref2 = this.cases;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
- if (block.jumps(o)) {
- return block;
- }
- }
- return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
- };
-
- Switch.prototype.makeReturn = function(res) {
- var pair, _i, _len, _ref2, _ref3;
- _ref2 = this.cases;
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- pair = _ref2[_i];
- pair[1].makeReturn(res);
- }
- if (res) {
- this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
- }
- if ((_ref3 = this.otherwise) != null) {
- _ref3.makeReturn(res);
- }
- return this;
- };
-
- Switch.prototype.compileNode = function(o) {
- var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4, _ref5;
- idt1 = o.indent + TAB;
- idt2 = o.indent = idt1 + TAB;
- code = this.tab + ("switch (" + (((_ref2 = this.subject) != null ? _ref2.compile(o, LEVEL_PAREN) : void 0) || false) + ") {\n");
- _ref3 = this.cases;
- for (i = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) {
- _ref4 = _ref3[i], conditions = _ref4[0], block = _ref4[1];
- _ref5 = flatten([conditions]);
- for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) {
- cond = _ref5[_j];
- if (!this.subject) {
- cond = cond.invert();
- }
- code += idt1 + ("case " + (cond.compile(o, LEVEL_PAREN)) + ":\n");
- }
- if (body = block.compile(o, LEVEL_TOP)) {
- code += body + '\n';
- }
- if (i === this.cases.length - 1 && !this.otherwise) {
- break;
- }
- expr = this.lastNonComment(block.expressions);
- if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
- continue;
- }
- code += idt2 + 'break;\n';
- }
- if (this.otherwise && this.otherwise.expressions.length) {
- code += idt1 + ("default:\n" + (this.otherwise.compile(o, LEVEL_TOP)) + "\n");
- }
- return code + this.tab + '}';
- };
-
- return Switch;
-
- })(Base);
-
- exports.If = If = (function(_super) {
-
- __extends(If, _super);
-
- function If(condition, body, options) {
- this.body = body;
- if (options == null) {
- options = {};
- }
- this.condition = options.type === 'unless' ? condition.invert() : condition;
- this.elseBody = null;
- this.isChain = false;
- this.soak = options.soak;
- }
-
- If.prototype.children = ['condition', 'body', 'elseBody'];
-
- If.prototype.bodyNode = function() {
- var _ref2;
- return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
- };
-
- If.prototype.elseBodyNode = function() {
- var _ref2;
- return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
- };
-
- If.prototype.addElse = function(elseBody) {
- if (this.isChain) {
- this.elseBodyNode().addElse(elseBody);
- } else {
- this.isChain = elseBody instanceof If;
- this.elseBody = this.ensureBlock(elseBody);
- }
- return this;
- };
-
- If.prototype.isStatement = function(o) {
- var _ref2;
- return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
- };
-
- If.prototype.jumps = function(o) {
- var _ref2;
- return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
- };
-
- If.prototype.compileNode = function(o) {
- if (this.isStatement(o)) {
- return this.compileStatement(o);
- } else {
- return this.compileExpression(o);
- }
- };
-
- If.prototype.makeReturn = function(res) {
- if (res) {
- this.elseBody || (this.elseBody = new Block([new Literal('void 0')]));
- }
- this.body && (this.body = new Block([this.body.makeReturn(res)]));
- this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)]));
- return this;
- };
-
- If.prototype.ensureBlock = function(node) {
- if (node instanceof Block) {
- return node;
- } else {
- return new Block([node]);
- }
- };
-
- If.prototype.compileStatement = function(o) {
- var body, child, cond, exeq, ifPart;
- child = del(o, 'chainChild');
- exeq = del(o, 'isExistentialEquals');
- if (exeq) {
- return new If(this.condition.invert(), this.elseBodyNode(), {
- type: 'if'
- }).compile(o);
- }
- cond = this.condition.compile(o, LEVEL_PAREN);
- o.indent += TAB;
- body = this.ensureBlock(this.body);
- ifPart = "if (" + cond + ") {\n" + (body.compile(o)) + "\n" + this.tab + "}";
- if (!child) {
- ifPart = this.tab + ifPart;
- }
- if (!this.elseBody) {
- return ifPart;
- }
- return ifPart + ' else ' + (this.isChain ? (o.indent = this.tab, o.chainChild = true, this.elseBody.unwrap().compile(o, LEVEL_TOP)) : "{\n" + (this.elseBody.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}");
- };
-
- If.prototype.compileExpression = function(o) {
- var alt, body, code, cond;
- cond = this.condition.compile(o, LEVEL_COND);
- body = this.bodyNode().compile(o, LEVEL_LIST);
- alt = this.elseBodyNode() ? this.elseBodyNode().compile(o, LEVEL_LIST) : 'void 0';
- code = "" + cond + " ? " + body + " : " + alt;
- if (o.level >= LEVEL_COND) {
- return "(" + code + ")";
- } else {
- return code;
- }
- };
-
- If.prototype.unfoldSoak = function() {
- return this.soak && this;
- };
-
- return If;
-
- })(Base);
-
- Closure = {
- wrap: function(expressions, statement, noReturn) {
- var args, call, func, mentionsArgs, meth;
- if (expressions.jumps()) {
- return expressions;
- }
- func = new Code([], Block.wrap([expressions]));
- args = [];
- if ((mentionsArgs = expressions.contains(this.literalArgs)) || expressions.contains(this.literalThis)) {
- meth = new Literal(mentionsArgs ? 'apply' : 'call');
- args = [new Literal('this')];
- if (mentionsArgs) {
- args.push(new Literal('arguments'));
- }
- func = new Value(func, [new Access(meth)]);
- }
- func.noReturn = noReturn;
- call = new Call(func, args);
- if (statement) {
- return Block.wrap([call]);
- } else {
- return call;
- }
- },
- literalArgs: function(node) {
- return node instanceof Literal && node.value === 'arguments' && !node.asKey;
- },
- literalThis: function(node) {
- return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
- }
- };
-
- unfoldSoak = function(o, parent, name) {
- var ifn;
- if (!(ifn = parent[name].unfoldSoak(o))) {
- return;
- }
- parent[name] = ifn.body;
- ifn.body = new Value(parent);
- return ifn;
- };
-
- UTILITIES = {
- "extends": function() {
- return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp')) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }";
- },
- bind: function() {
- return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }';
- },
- indexOf: function() {
- return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
- },
- hasProp: function() {
- return '{}.hasOwnProperty';
- },
- slice: function() {
- return '[].slice';
- }
- };
-
- LEVEL_TOP = 1;
-
- LEVEL_PAREN = 2;
-
- LEVEL_LIST = 3;
-
- LEVEL_COND = 4;
-
- LEVEL_OP = 5;
-
- LEVEL_ACCESS = 6;
-
- TAB = ' ';
-
- IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
-
- IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");
-
- SIMPLENUM = /^[+-]?\d+$/;
-
- METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$");
-
- IS_STRING = /^['"]/;
-
- utility = function(name) {
- var ref;
- ref = "__" + name;
- Scope.root.assign(ref, UTILITIES[name]());
- return ref;
- };
-
- multident = function(code, tab) {
- code = code.replace(/\n/g, '$&' + tab);
- return code.replace(/\s+$/, '');
- };
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/optparse.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/optparse.js
deleted file mode 100644
index d9bab415..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/optparse.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
-
- exports.OptionParser = OptionParser = (function() {
-
- function OptionParser(rules, banner) {
- this.banner = banner;
- this.rules = buildRules(rules);
- }
-
- OptionParser.prototype.parse = function(args) {
- var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
- options = {
- "arguments": []
- };
- skippingArgument = false;
- originalArgs = args;
- args = normalizeArguments(args);
- for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
- arg = args[i];
- if (skippingArgument) {
- skippingArgument = false;
- continue;
- }
- if (arg === '--') {
- pos = originalArgs.indexOf('--');
- options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
- break;
- }
- isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
- seenNonOptionArg = options["arguments"].length > 0;
- if (!seenNonOptionArg) {
- matchedRule = false;
- _ref = this.rules;
- for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
- rule = _ref[_j];
- if (rule.shortFlag === arg || rule.longFlag === arg) {
- value = true;
- if (rule.hasArgument) {
- skippingArgument = true;
- value = args[i + 1];
- }
- options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
- matchedRule = true;
- break;
- }
- }
- if (isOption && !matchedRule) {
- throw new Error("unrecognized option: " + arg);
- }
- }
- if (seenNonOptionArg || !isOption) {
- options["arguments"].push(arg);
- }
- }
- return options;
- };
-
- OptionParser.prototype.help = function() {
- var letPart, lines, rule, spaces, _i, _len, _ref;
- lines = [];
- if (this.banner) {
- lines.unshift("" + this.banner + "\n");
- }
- _ref = this.rules;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- rule = _ref[_i];
- spaces = 15 - rule.longFlag.length;
- spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
- letPart = rule.shortFlag ? rule.shortFlag + ', ' : ' ';
- lines.push(' ' + letPart + rule.longFlag + spaces + rule.description);
- }
- return "\n" + (lines.join('\n')) + "\n";
- };
-
- return OptionParser;
-
- })();
-
- LONG_FLAG = /^(--\w[\w\-]*)/;
-
- SHORT_FLAG = /^(-\w)$/;
-
- MULTI_FLAG = /^-(\w{2,})/;
-
- OPTIONAL = /\[(\w+(\*?))\]/;
-
- buildRules = function(rules) {
- var tuple, _i, _len, _results;
- _results = [];
- for (_i = 0, _len = rules.length; _i < _len; _i++) {
- tuple = rules[_i];
- if (tuple.length < 3) {
- tuple.unshift(null);
- }
- _results.push(buildRule.apply(null, tuple));
- }
- return _results;
- };
-
- buildRule = function(shortFlag, longFlag, description, options) {
- var match;
- if (options == null) {
- options = {};
- }
- match = longFlag.match(OPTIONAL);
- longFlag = longFlag.match(LONG_FLAG)[1];
- return {
- name: longFlag.substr(2),
- shortFlag: shortFlag,
- longFlag: longFlag,
- description: description,
- hasArgument: !!(match && match[1]),
- isList: !!(match && match[2])
- };
- };
-
- normalizeArguments = function(args) {
- var arg, l, match, result, _i, _j, _len, _len1, _ref;
- args = args.slice(0);
- result = [];
- for (_i = 0, _len = args.length; _i < _len; _i++) {
- arg = args[_i];
- if (match = arg.match(MULTI_FLAG)) {
- _ref = match[1].split('');
- for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
- l = _ref[_j];
- result.push('-' + l);
- }
- } else {
- result.push(arg);
- }
- }
- return result;
- };
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/parser.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/parser.js
deleted file mode 100755
index f0499038..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/parser.js
+++ /dev/null
@@ -1,683 +0,0 @@
-/* Jison generated parser */
-var parser = (function(){
-var parser = {trace: function trace() { },
-yy: {},
-symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"Index":69,"INDEX_START":70,"IndexValue":71,"INDEX_END":72,"INDEX_SOAK":73,"Slice":74,"{":75,"AssignList":76,"}":77,"CLASS":78,"EXTENDS":79,"OptFuncExist":80,"Arguments":81,"SUPER":82,"FUNC_EXIST":83,"CALL_START":84,"CALL_END":85,"ArgList":86,"THIS":87,"@":88,"[":89,"]":90,"RangeDots":91,"..":92,"Arg":93,"SimpleArgs":94,"TRY":95,"Catch":96,"FINALLY":97,"CATCH":98,"THROW":99,"(":100,")":101,"WhileSource":102,"WHILE":103,"WHEN":104,"UNTIL":105,"Loop":106,"LOOP":107,"ForBody":108,"FOR":109,"ForStart":110,"ForSource":111,"ForVariables":112,"OWN":113,"ForValue":114,"FORIN":115,"FOROF":116,"BY":117,"SWITCH":118,"Whens":119,"ELSE":120,"When":121,"LEADING_WHEN":122,"IfBlock":123,"IF":124,"POST_IF":125,"UNARY":126,"-":127,"+":128,"--":129,"++":130,"?":131,"MATH":132,"SHIFT":133,"COMPARE":134,"LOGIC":135,"RELATION":136,"COMPOUND_ASSIGN":137,"$accept":0,"$end":1},
-terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},
-productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],
-performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
-var $0 = $$.length - 1;
-switch (yystate) {
-case 1:return this.$ = new yy.Block;
-break;
-case 2:return this.$ = $$[$0];
-break;
-case 3:return this.$ = $$[$0-1];
-break;
-case 4:this.$ = yy.Block.wrap([$$[$0]]);
-break;
-case 5:this.$ = $$[$0-2].push($$[$0]);
-break;
-case 6:this.$ = $$[$0-1];
-break;
-case 7:this.$ = $$[$0];
-break;
-case 8:this.$ = $$[$0];
-break;
-case 9:this.$ = $$[$0];
-break;
-case 10:this.$ = $$[$0];
-break;
-case 11:this.$ = new yy.Literal($$[$0]);
-break;
-case 12:this.$ = $$[$0];
-break;
-case 13:this.$ = $$[$0];
-break;
-case 14:this.$ = $$[$0];
-break;
-case 15:this.$ = $$[$0];
-break;
-case 16:this.$ = $$[$0];
-break;
-case 17:this.$ = $$[$0];
-break;
-case 18:this.$ = $$[$0];
-break;
-case 19:this.$ = $$[$0];
-break;
-case 20:this.$ = $$[$0];
-break;
-case 21:this.$ = $$[$0];
-break;
-case 22:this.$ = $$[$0];
-break;
-case 23:this.$ = $$[$0];
-break;
-case 24:this.$ = new yy.Block;
-break;
-case 25:this.$ = $$[$0-1];
-break;
-case 26:this.$ = new yy.Literal($$[$0]);
-break;
-case 27:this.$ = new yy.Literal($$[$0]);
-break;
-case 28:this.$ = new yy.Literal($$[$0]);
-break;
-case 29:this.$ = $$[$0];
-break;
-case 30:this.$ = new yy.Literal($$[$0]);
-break;
-case 31:this.$ = new yy.Literal($$[$0]);
-break;
-case 32:this.$ = new yy.Literal($$[$0]);
-break;
-case 33:this.$ = new yy.Undefined;
-break;
-case 34:this.$ = new yy.Null;
-break;
-case 35:this.$ = new yy.Bool($$[$0]);
-break;
-case 36:this.$ = new yy.Assign($$[$0-2], $$[$0]);
-break;
-case 37:this.$ = new yy.Assign($$[$0-3], $$[$0]);
-break;
-case 38:this.$ = new yy.Assign($$[$0-4], $$[$0-1]);
-break;
-case 39:this.$ = new yy.Value($$[$0]);
-break;
-case 40:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object');
-break;
-case 41:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object');
-break;
-case 42:this.$ = $$[$0];
-break;
-case 43:this.$ = $$[$0];
-break;
-case 44:this.$ = $$[$0];
-break;
-case 45:this.$ = $$[$0];
-break;
-case 46:this.$ = new yy.Return($$[$0]);
-break;
-case 47:this.$ = new yy.Return;
-break;
-case 48:this.$ = new yy.Comment($$[$0]);
-break;
-case 49:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]);
-break;
-case 50:this.$ = new yy.Code([], $$[$0], $$[$0-1]);
-break;
-case 51:this.$ = 'func';
-break;
-case 52:this.$ = 'boundfunc';
-break;
-case 53:this.$ = $$[$0];
-break;
-case 54:this.$ = $$[$0];
-break;
-case 55:this.$ = [];
-break;
-case 56:this.$ = [$$[$0]];
-break;
-case 57:this.$ = $$[$0-2].concat($$[$0]);
-break;
-case 58:this.$ = $$[$0-3].concat($$[$0]);
-break;
-case 59:this.$ = $$[$0-5].concat($$[$0-2]);
-break;
-case 60:this.$ = new yy.Param($$[$0]);
-break;
-case 61:this.$ = new yy.Param($$[$0-1], null, true);
-break;
-case 62:this.$ = new yy.Param($$[$0-2], $$[$0]);
-break;
-case 63:this.$ = $$[$0];
-break;
-case 64:this.$ = $$[$0];
-break;
-case 65:this.$ = $$[$0];
-break;
-case 66:this.$ = $$[$0];
-break;
-case 67:this.$ = new yy.Splat($$[$0-1]);
-break;
-case 68:this.$ = new yy.Value($$[$0]);
-break;
-case 69:this.$ = $$[$0-1].add($$[$0]);
-break;
-case 70:this.$ = new yy.Value($$[$0-1], [].concat($$[$0]));
-break;
-case 71:this.$ = $$[$0];
-break;
-case 72:this.$ = $$[$0];
-break;
-case 73:this.$ = new yy.Value($$[$0]);
-break;
-case 74:this.$ = new yy.Value($$[$0]);
-break;
-case 75:this.$ = $$[$0];
-break;
-case 76:this.$ = new yy.Value($$[$0]);
-break;
-case 77:this.$ = new yy.Value($$[$0]);
-break;
-case 78:this.$ = new yy.Value($$[$0]);
-break;
-case 79:this.$ = $$[$0];
-break;
-case 80:this.$ = new yy.Access($$[$0]);
-break;
-case 81:this.$ = new yy.Access($$[$0], 'soak');
-break;
-case 82:this.$ = [new yy.Access(new yy.Literal('prototype')), new yy.Access($$[$0])];
-break;
-case 83:this.$ = new yy.Access(new yy.Literal('prototype'));
-break;
-case 84:this.$ = $$[$0];
-break;
-case 85:this.$ = $$[$0-1];
-break;
-case 86:this.$ = yy.extend($$[$0], {
- soak: true
- });
-break;
-case 87:this.$ = new yy.Index($$[$0]);
-break;
-case 88:this.$ = new yy.Slice($$[$0]);
-break;
-case 89:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated);
-break;
-case 90:this.$ = [];
-break;
-case 91:this.$ = [$$[$0]];
-break;
-case 92:this.$ = $$[$0-2].concat($$[$0]);
-break;
-case 93:this.$ = $$[$0-3].concat($$[$0]);
-break;
-case 94:this.$ = $$[$0-5].concat($$[$0-2]);
-break;
-case 95:this.$ = new yy.Class;
-break;
-case 96:this.$ = new yy.Class(null, null, $$[$0]);
-break;
-case 97:this.$ = new yy.Class(null, $$[$0]);
-break;
-case 98:this.$ = new yy.Class(null, $$[$0-1], $$[$0]);
-break;
-case 99:this.$ = new yy.Class($$[$0]);
-break;
-case 100:this.$ = new yy.Class($$[$0-1], null, $$[$0]);
-break;
-case 101:this.$ = new yy.Class($$[$0-2], $$[$0]);
-break;
-case 102:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]);
-break;
-case 103:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
-break;
-case 104:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
-break;
-case 105:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
-break;
-case 106:this.$ = new yy.Call('super', $$[$0]);
-break;
-case 107:this.$ = false;
-break;
-case 108:this.$ = true;
-break;
-case 109:this.$ = [];
-break;
-case 110:this.$ = $$[$0-2];
-break;
-case 111:this.$ = new yy.Value(new yy.Literal('this'));
-break;
-case 112:this.$ = new yy.Value(new yy.Literal('this'));
-break;
-case 113:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this');
-break;
-case 114:this.$ = new yy.Arr([]);
-break;
-case 115:this.$ = new yy.Arr($$[$0-2]);
-break;
-case 116:this.$ = 'inclusive';
-break;
-case 117:this.$ = 'exclusive';
-break;
-case 118:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]);
-break;
-case 119:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]);
-break;
-case 120:this.$ = new yy.Range($$[$0-1], null, $$[$0]);
-break;
-case 121:this.$ = new yy.Range(null, $$[$0], $$[$0-1]);
-break;
-case 122:this.$ = new yy.Range(null, null, $$[$0]);
-break;
-case 123:this.$ = [$$[$0]];
-break;
-case 124:this.$ = $$[$0-2].concat($$[$0]);
-break;
-case 125:this.$ = $$[$0-3].concat($$[$0]);
-break;
-case 126:this.$ = $$[$0-2];
-break;
-case 127:this.$ = $$[$0-5].concat($$[$0-2]);
-break;
-case 128:this.$ = $$[$0];
-break;
-case 129:this.$ = $$[$0];
-break;
-case 130:this.$ = $$[$0];
-break;
-case 131:this.$ = [].concat($$[$0-2], $$[$0]);
-break;
-case 132:this.$ = new yy.Try($$[$0]);
-break;
-case 133:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]);
-break;
-case 134:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]);
-break;
-case 135:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]);
-break;
-case 136:this.$ = [$$[$0-1], $$[$0]];
-break;
-case 137:this.$ = new yy.Throw($$[$0]);
-break;
-case 138:this.$ = new yy.Parens($$[$0-1]);
-break;
-case 139:this.$ = new yy.Parens($$[$0-2]);
-break;
-case 140:this.$ = new yy.While($$[$0]);
-break;
-case 141:this.$ = new yy.While($$[$0-2], {
- guard: $$[$0]
- });
-break;
-case 142:this.$ = new yy.While($$[$0], {
- invert: true
- });
-break;
-case 143:this.$ = new yy.While($$[$0-2], {
- invert: true,
- guard: $$[$0]
- });
-break;
-case 144:this.$ = $$[$0-1].addBody($$[$0]);
-break;
-case 145:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
-break;
-case 146:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
-break;
-case 147:this.$ = $$[$0];
-break;
-case 148:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]);
-break;
-case 149:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]]));
-break;
-case 150:this.$ = new yy.For($$[$0-1], $$[$0]);
-break;
-case 151:this.$ = new yy.For($$[$0-1], $$[$0]);
-break;
-case 152:this.$ = new yy.For($$[$0], $$[$0-1]);
-break;
-case 153:this.$ = {
- source: new yy.Value($$[$0])
- };
-break;
-case 154:this.$ = (function () {
- $$[$0].own = $$[$0-1].own;
- $$[$0].name = $$[$0-1][0];
- $$[$0].index = $$[$0-1][1];
- return $$[$0];
- }());
-break;
-case 155:this.$ = $$[$0];
-break;
-case 156:this.$ = (function () {
- $$[$0].own = true;
- return $$[$0];
- }());
-break;
-case 157:this.$ = $$[$0];
-break;
-case 158:this.$ = $$[$0];
-break;
-case 159:this.$ = new yy.Value($$[$0]);
-break;
-case 160:this.$ = new yy.Value($$[$0]);
-break;
-case 161:this.$ = [$$[$0]];
-break;
-case 162:this.$ = [$$[$0-2], $$[$0]];
-break;
-case 163:this.$ = {
- source: $$[$0]
- };
-break;
-case 164:this.$ = {
- source: $$[$0],
- object: true
- };
-break;
-case 165:this.$ = {
- source: $$[$0-2],
- guard: $$[$0]
- };
-break;
-case 166:this.$ = {
- source: $$[$0-2],
- guard: $$[$0],
- object: true
- };
-break;
-case 167:this.$ = {
- source: $$[$0-2],
- step: $$[$0]
- };
-break;
-case 168:this.$ = {
- source: $$[$0-4],
- guard: $$[$0-2],
- step: $$[$0]
- };
-break;
-case 169:this.$ = {
- source: $$[$0-4],
- step: $$[$0-2],
- guard: $$[$0]
- };
-break;
-case 170:this.$ = new yy.Switch($$[$0-3], $$[$0-1]);
-break;
-case 171:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]);
-break;
-case 172:this.$ = new yy.Switch(null, $$[$0-1]);
-break;
-case 173:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]);
-break;
-case 174:this.$ = $$[$0];
-break;
-case 175:this.$ = $$[$0-1].concat($$[$0]);
-break;
-case 176:this.$ = [[$$[$0-1], $$[$0]]];
-break;
-case 177:this.$ = [[$$[$0-2], $$[$0-1]]];
-break;
-case 178:this.$ = new yy.If($$[$0-1], $$[$0], {
- type: $$[$0-2]
- });
-break;
-case 179:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
- type: $$[$0-2]
- }));
-break;
-case 180:this.$ = $$[$0];
-break;
-case 181:this.$ = $$[$0-2].addElse($$[$0]);
-break;
-case 182:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
- type: $$[$0-1],
- statement: true
- });
-break;
-case 183:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
- type: $$[$0-1],
- statement: true
- });
-break;
-case 184:this.$ = new yy.Op($$[$0-1], $$[$0]);
-break;
-case 185:this.$ = new yy.Op('-', $$[$0]);
-break;
-case 186:this.$ = new yy.Op('+', $$[$0]);
-break;
-case 187:this.$ = new yy.Op('--', $$[$0]);
-break;
-case 188:this.$ = new yy.Op('++', $$[$0]);
-break;
-case 189:this.$ = new yy.Op('--', $$[$0-1], null, true);
-break;
-case 190:this.$ = new yy.Op('++', $$[$0-1], null, true);
-break;
-case 191:this.$ = new yy.Existence($$[$0-1]);
-break;
-case 192:this.$ = new yy.Op('+', $$[$0-2], $$[$0]);
-break;
-case 193:this.$ = new yy.Op('-', $$[$0-2], $$[$0]);
-break;
-case 194:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-break;
-case 195:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-break;
-case 196:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-break;
-case 197:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-break;
-case 198:this.$ = (function () {
- if ($$[$0-1].charAt(0) === '!') {
- return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
- } else {
- return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
- }
- }());
-break;
-case 199:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]);
-break;
-case 200:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]);
-break;
-case 201:this.$ = new yy.Extends($$[$0-2], $$[$0]);
-break;
-}
-},
-table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],
-defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},
-parseError: function parseError(str, hash) {
- throw new Error(str);
-},
-parse: function parse(input) {
- var self = this,
- stack = [0],
- vstack = [null], // semantic value stack
- lstack = [], // location stack
- table = this.table,
- yytext = '',
- yylineno = 0,
- yyleng = 0,
- recovering = 0,
- TERROR = 2,
- EOF = 1;
-
- //this.reductionCount = this.shiftCount = 0;
-
- this.lexer.setInput(input);
- this.lexer.yy = this.yy;
- this.yy.lexer = this.lexer;
- if (typeof this.lexer.yylloc == 'undefined')
- this.lexer.yylloc = {};
- var yyloc = this.lexer.yylloc;
- lstack.push(yyloc);
-
- if (typeof this.yy.parseError === 'function')
- this.parseError = this.yy.parseError;
-
- function popStack (n) {
- stack.length = stack.length - 2*n;
- vstack.length = vstack.length - n;
- lstack.length = lstack.length - n;
- }
-
- function lex() {
- var token;
- token = self.lexer.lex() || 1; // $end = 1
- // if token isn't its numeric value, convert
- if (typeof token !== 'number') {
- token = self.symbols_[token] || token;
- }
- return token;
- }
-
- var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
- while (true) {
- // retreive state number from top of stack
- state = stack[stack.length-1];
-
- // use default actions if available
- if (this.defaultActions[state]) {
- action = this.defaultActions[state];
- } else {
- if (symbol == null)
- symbol = lex();
- // read action for current state and first input
- action = table[state] && table[state][symbol];
- }
-
- // handle parse error
- _handle_error:
- if (typeof action === 'undefined' || !action.length || !action[0]) {
-
- if (!recovering) {
- // Report error
- expected = [];
- for (p in table[state]) if (this.terminals_[p] && p > 2) {
- expected.push("'"+this.terminals_[p]+"'");
- }
- var errStr = '';
- if (this.lexer.showPosition) {
- errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + this.terminals_[symbol]+ "'";
- } else {
- errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
- (symbol == 1 /*EOF*/ ? "end of input" :
- ("'"+(this.terminals_[symbol] || symbol)+"'"));
- }
- this.parseError(errStr,
- {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
- }
-
- // just recovered from another error
- if (recovering == 3) {
- if (symbol == EOF) {
- throw new Error(errStr || 'Parsing halted.');
- }
-
- // discard current lookahead and grab another
- yyleng = this.lexer.yyleng;
- yytext = this.lexer.yytext;
- yylineno = this.lexer.yylineno;
- yyloc = this.lexer.yylloc;
- symbol = lex();
- }
-
- // try to recover from error
- while (1) {
- // check for error recovery rule in this state
- if ((TERROR.toString()) in table[state]) {
- break;
- }
- if (state == 0) {
- throw new Error(errStr || 'Parsing halted.');
- }
- popStack(1);
- state = stack[stack.length-1];
- }
-
- preErrorSymbol = symbol; // save the lookahead token
- symbol = TERROR; // insert generic error symbol as new lookahead
- state = stack[stack.length-1];
- action = table[state] && table[state][TERROR];
- recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
- }
-
- // this shouldn't happen, unless resolve defaults are off
- if (action[0] instanceof Array && action.length > 1) {
- throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
- }
-
- switch (action[0]) {
-
- case 1: // shift
- //this.shiftCount++;
-
- stack.push(symbol);
- vstack.push(this.lexer.yytext);
- lstack.push(this.lexer.yylloc);
- stack.push(action[1]); // push state
- symbol = null;
- if (!preErrorSymbol) { // normal execution/no error
- yyleng = this.lexer.yyleng;
- yytext = this.lexer.yytext;
- yylineno = this.lexer.yylineno;
- yyloc = this.lexer.yylloc;
- if (recovering > 0)
- recovering--;
- } else { // error just occurred, resume old lookahead f/ before error
- symbol = preErrorSymbol;
- preErrorSymbol = null;
- }
- break;
-
- case 2: // reduce
- //this.reductionCount++;
-
- len = this.productions_[action[1]][1];
-
- // perform semantic action
- yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
- // default location, uses first token for firsts, last for lasts
- yyval._$ = {
- first_line: lstack[lstack.length-(len||1)].first_line,
- last_line: lstack[lstack.length-1].last_line,
- first_column: lstack[lstack.length-(len||1)].first_column,
- last_column: lstack[lstack.length-1].last_column
- };
- r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
-
- if (typeof r !== 'undefined') {
- return r;
- }
-
- // pop off stack
- if (len) {
- stack = stack.slice(0,-1*len*2);
- vstack = vstack.slice(0, -1*len);
- lstack = lstack.slice(0, -1*len);
- }
-
- stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)
- vstack.push(yyval.$);
- lstack.push(yyval._$);
- // goto new state = table[STATE][NONTERMINAL]
- newState = table[stack[stack.length-2]][stack[stack.length-1]];
- stack.push(newState);
- break;
-
- case 3: // accept
- return true;
- }
-
- }
-
- return true;
-}};
-undefined
-return parser;
-})();
-if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
-exports.parser = parser;
-exports.parse = function () { return parser.parse.apply(parser, arguments); }
-exports.main = function commonjsMain(args) {
- if (!args[1])
- throw new Error('Usage: '+args[0]+' FILE');
- if (typeof process !== 'undefined') {
- var source = require('fs').readFileSync(require('path').join(process.cwd(), args[1]), "utf8");
- } else {
- var cwd = require("file").path(require("file").cwd());
- var source = cwd.join(args[1]).read({charset: "utf-8"});
- }
- return exports.parser.parse(source);
-}
-if (typeof module !== 'undefined' && require.main === module) {
- exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
-}
-} \ No newline at end of file
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/repl.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/repl.js
deleted file mode 100644
index 578dc597..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/repl.js
+++ /dev/null
@@ -1,276 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var ACCESSOR, CoffeeScript, Module, REPL_PROMPT, REPL_PROMPT_CONTINUATION, REPL_PROMPT_MULTILINE, SIMPLEVAR, Script, autocomplete, backlog, completeAttribute, completeVariable, enableColours, error, getCompletions, inspect, multilineMode, pipedInput, readline, repl, run, stdin, stdout,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
- stdin = process.openStdin();
-
- stdout = process.stdout;
-
- CoffeeScript = require('./coffee-script');
-
- readline = require('readline');
-
- inspect = require('util').inspect;
-
- Script = require('vm').Script;
-
- Module = require('module');
-
- REPL_PROMPT = 'coffee> ';
-
- REPL_PROMPT_MULTILINE = '------> ';
-
- REPL_PROMPT_CONTINUATION = '......> ';
-
- enableColours = false;
-
- if (process.platform !== 'win32') {
- enableColours = !process.env.NODE_DISABLE_COLORS;
- }
-
- error = function(err) {
- return stdout.write((err.stack || err.toString()) + '\n');
- };
-
- ACCESSOR = /\s*([\w\.]+)(?:\.(\w*))$/;
-
- SIMPLEVAR = /(\w+)$/i;
-
- autocomplete = function(text) {
- return completeAttribute(text) || completeVariable(text) || [[], text];
- };
-
- completeAttribute = function(text) {
- var all, candidates, completions, key, match, obj, prefix, _i, _len, _ref;
- if (match = text.match(ACCESSOR)) {
- all = match[0], obj = match[1], prefix = match[2];
- try {
- obj = Script.runInThisContext(obj);
- } catch (e) {
- return;
- }
- if (obj == null) {
- return;
- }
- obj = Object(obj);
- candidates = Object.getOwnPropertyNames(obj);
- while (obj = Object.getPrototypeOf(obj)) {
- _ref = Object.getOwnPropertyNames(obj);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- key = _ref[_i];
- if (__indexOf.call(candidates, key) < 0) {
- candidates.push(key);
- }
- }
- }
- completions = getCompletions(prefix, candidates);
- return [completions, prefix];
- }
- };
-
- completeVariable = function(text) {
- var candidates, completions, free, key, keywords, r, vars, _i, _len, _ref;
- free = (_ref = text.match(SIMPLEVAR)) != null ? _ref[1] : void 0;
- if (text === "") {
- free = "";
- }
- if (free != null) {
- vars = Script.runInThisContext('Object.getOwnPropertyNames(Object(this))');
- keywords = (function() {
- var _i, _len, _ref1, _results;
- _ref1 = CoffeeScript.RESERVED;
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- r = _ref1[_i];
- if (r.slice(0, 2) !== '__') {
- _results.push(r);
- }
- }
- return _results;
- })();
- candidates = vars;
- for (_i = 0, _len = keywords.length; _i < _len; _i++) {
- key = keywords[_i];
- if (__indexOf.call(candidates, key) < 0) {
- candidates.push(key);
- }
- }
- completions = getCompletions(free, candidates);
- return [completions, free];
- }
- };
-
- getCompletions = function(prefix, candidates) {
- var el, _i, _len, _results;
- _results = [];
- for (_i = 0, _len = candidates.length; _i < _len; _i++) {
- el = candidates[_i];
- if (0 === el.indexOf(prefix)) {
- _results.push(el);
- }
- }
- return _results;
- };
-
- process.on('uncaughtException', error);
-
- backlog = '';
-
- run = function(buffer) {
- var code, returnValue, _;
- buffer = buffer.replace(/(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, "$1$2$3");
- buffer = buffer.replace(/[\r\n]+$/, "");
- if (multilineMode) {
- backlog += "" + buffer + "\n";
- repl.setPrompt(REPL_PROMPT_CONTINUATION);
- repl.prompt();
- return;
- }
- if (!buffer.toString().trim() && !backlog) {
- repl.prompt();
- return;
- }
- code = backlog += buffer;
- if (code[code.length - 1] === '\\') {
- backlog = "" + backlog.slice(0, -1) + "\n";
- repl.setPrompt(REPL_PROMPT_CONTINUATION);
- repl.prompt();
- return;
- }
- repl.setPrompt(REPL_PROMPT);
- backlog = '';
- try {
- _ = global._;
- returnValue = CoffeeScript["eval"]("_=(" + code + "\n)", {
- filename: 'repl',
- modulename: 'repl'
- });
- if (returnValue === void 0) {
- global._ = _;
- }
- repl.output.write("" + (inspect(returnValue, false, 2, enableColours)) + "\n");
- } catch (err) {
- error(err);
- }
- return repl.prompt();
- };
-
- if (stdin.readable && stdin.isRaw) {
- pipedInput = '';
- repl = {
- prompt: function() {
- return stdout.write(this._prompt);
- },
- setPrompt: function(p) {
- return this._prompt = p;
- },
- input: stdin,
- output: stdout,
- on: function() {}
- };
- stdin.on('data', function(chunk) {
- var line, lines, _i, _len, _ref;
- pipedInput += chunk;
- if (!/\n/.test(pipedInput)) {
- return;
- }
- lines = pipedInput.split("\n");
- pipedInput = lines[lines.length - 1];
- _ref = lines.slice(0, -1);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- line = _ref[_i];
- if (!(line)) {
- continue;
- }
- stdout.write("" + line + "\n");
- run(line);
- }
- });
- stdin.on('end', function() {
- var line, _i, _len, _ref;
- _ref = pipedInput.trim().split("\n");
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- line = _ref[_i];
- if (!(line)) {
- continue;
- }
- stdout.write("" + line + "\n");
- run(line);
- }
- stdout.write('\n');
- return process.exit(0);
- });
- } else {
- if (readline.createInterface.length < 3) {
- repl = readline.createInterface(stdin, autocomplete);
- stdin.on('data', function(buffer) {
- return repl.write(buffer);
- });
- } else {
- repl = readline.createInterface(stdin, stdout, autocomplete);
- }
- }
-
- multilineMode = false;
-
- repl.input.on('keypress', function(char, key) {
- var cursorPos, newPrompt;
- if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'v')) {
- return;
- }
- cursorPos = repl.cursor;
- repl.output.cursorTo(0);
- repl.output.clearLine(1);
- multilineMode = !multilineMode;
- if (!multilineMode && backlog) {
- repl._line();
- }
- backlog = '';
- repl.setPrompt((newPrompt = multilineMode ? REPL_PROMPT_MULTILINE : REPL_PROMPT));
- repl.prompt();
- return repl.output.cursorTo(newPrompt.length + (repl.cursor = cursorPos));
- });
-
- repl.input.on('keypress', function(char, key) {
- if (!(multilineMode && repl.line)) {
- return;
- }
- if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'd')) {
- return;
- }
- multilineMode = false;
- return repl._line();
- });
-
- repl.on('attemptClose', function() {
- if (multilineMode) {
- multilineMode = false;
- repl.output.cursorTo(0);
- repl.output.clearLine(1);
- repl._onLine(repl.line);
- return;
- }
- if (backlog || repl.line) {
- backlog = '';
- repl.historyIndex = -1;
- repl.setPrompt(REPL_PROMPT);
- repl.output.write('\n(^C again to quit)');
- return repl._line((repl.line = ''));
- } else {
- return repl.close();
- }
- });
-
- repl.on('close', function() {
- repl.output.write('\n');
- return repl.input.destroy();
- });
-
- repl.on('line', run);
-
- repl.setPrompt(REPL_PROMPT);
-
- repl.prompt();
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/rewriter.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/rewriter.js
deleted file mode 100644
index fdfeffc4..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/rewriter.js
+++ /dev/null
@@ -1,349 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, left, rite, _i, _len, _ref,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
- __slice = [].slice;
-
- exports.Rewriter = (function() {
-
- function Rewriter() {}
-
- Rewriter.prototype.rewrite = function(tokens) {
- this.tokens = tokens;
- this.removeLeadingNewlines();
- this.removeMidExpressionNewlines();
- this.closeOpenCalls();
- this.closeOpenIndexes();
- this.addImplicitIndentation();
- this.tagPostfixConditionals();
- this.addImplicitBraces();
- this.addImplicitParentheses();
- return this.tokens;
- };
-
- Rewriter.prototype.scanTokens = function(block) {
- var i, token, tokens;
- tokens = this.tokens;
- i = 0;
- while (token = tokens[i]) {
- i += block.call(this, token, i, tokens);
- }
- return true;
- };
-
- Rewriter.prototype.detectEnd = function(i, condition, action) {
- var levels, token, tokens, _ref, _ref1;
- tokens = this.tokens;
- levels = 0;
- while (token = tokens[i]) {
- if (levels === 0 && condition.call(this, token, i)) {
- return action.call(this, token, i);
- }
- if (!token || levels < 0) {
- return action.call(this, token, i - 1);
- }
- if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
- levels += 1;
- } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
- levels -= 1;
- }
- i += 1;
- }
- return i - 1;
- };
-
- Rewriter.prototype.removeLeadingNewlines = function() {
- var i, tag, _i, _len, _ref;
- _ref = this.tokens;
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
- tag = _ref[i][0];
- if (tag !== 'TERMINATOR') {
- break;
- }
- }
- if (i) {
- return this.tokens.splice(0, i);
- }
- };
-
- Rewriter.prototype.removeMidExpressionNewlines = function() {
- return this.scanTokens(function(token, i, tokens) {
- var _ref;
- if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
- return 1;
- }
- tokens.splice(i, 1);
- return 0;
- });
- };
-
- Rewriter.prototype.closeOpenCalls = function() {
- var action, condition;
- condition = function(token, i) {
- var _ref;
- return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
- };
- action = function(token, i) {
- return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
- };
- return this.scanTokens(function(token, i) {
- if (token[0] === 'CALL_START') {
- this.detectEnd(i + 1, condition, action);
- }
- return 1;
- });
- };
-
- Rewriter.prototype.closeOpenIndexes = function() {
- var action, condition;
- condition = function(token, i) {
- var _ref;
- return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
- };
- action = function(token, i) {
- return token[0] = 'INDEX_END';
- };
- return this.scanTokens(function(token, i) {
- if (token[0] === 'INDEX_START') {
- this.detectEnd(i + 1, condition, action);
- }
- return 1;
- });
- };
-
- Rewriter.prototype.addImplicitBraces = function() {
- var action, condition, sameLine, stack, start, startIndent, startIndex, startsLine;
- stack = [];
- start = null;
- startsLine = null;
- sameLine = true;
- startIndent = 0;
- startIndex = 0;
- condition = function(token, i) {
- var one, tag, three, two, _ref, _ref1;
- _ref = this.tokens.slice(i + 1, +(i + 3) + 1 || 9e9), one = _ref[0], two = _ref[1], three = _ref[2];
- if ('HERECOMMENT' === (one != null ? one[0] : void 0)) {
- return false;
- }
- tag = token[0];
- if (__indexOf.call(LINEBREAKS, tag) >= 0) {
- sameLine = false;
- }
- return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine && !(i - startIndex === 1))) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref1 = one[0]) !== 'IDENTIFIER' && _ref1 !== 'NUMBER' && _ref1 !== 'STRING' && _ref1 !== '@' && _ref1 !== 'TERMINATOR' && _ref1 !== 'OUTDENT'));
- };
- action = function(token, i) {
- var tok;
- tok = this.generate('}', '}', token[2]);
- return this.tokens.splice(i, 0, tok);
- };
- return this.scanTokens(function(token, i, tokens) {
- var ago, idx, prevTag, tag, tok, value, _ref, _ref1;
- if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
- stack.push([(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag), i]);
- return 1;
- }
- if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
- start = stack.pop();
- return 1;
- }
- if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref1 = stack[stack.length - 1]) != null ? _ref1[0] : void 0) !== '{'))) {
- return 1;
- }
- sameLine = true;
- startIndex = i + 1;
- stack.push(['{']);
- idx = ago === '@' ? i - 2 : i - 1;
- while (this.tag(idx - 2) === 'HERECOMMENT') {
- idx -= 2;
- }
- prevTag = this.tag(idx - 1);
- startsLine = !prevTag || (__indexOf.call(LINEBREAKS, prevTag) >= 0);
- value = new String('{');
- value.generated = true;
- tok = this.generate('{', value, token[2]);
- tokens.splice(idx, 0, tok);
- this.detectEnd(i + 2, condition, action);
- return 2;
- });
- };
-
- Rewriter.prototype.addImplicitParentheses = function() {
- var action, condition, noCall, seenControl, seenSingle;
- noCall = seenSingle = seenControl = false;
- condition = function(token, i) {
- var post, tag, _ref, _ref1;
- tag = token[0];
- if (!seenSingle && token.fromThen) {
- return true;
- }
- if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>' || tag === 'CLASS') {
- seenSingle = true;
- }
- if (tag === 'IF' || tag === 'ELSE' || tag === 'SWITCH' || tag === 'TRY' || tag === '=') {
- seenControl = true;
- }
- if ((tag === '.' || tag === '?.' || tag === '::') && this.tag(i - 1) === 'OUTDENT') {
- return true;
- }
- return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref1 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref1) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
- };
- action = function(token, i) {
- return this.tokens.splice(i, 0, this.generate('CALL_END', ')', token[2]));
- };
- return this.scanTokens(function(token, i, tokens) {
- var callObject, current, next, prev, tag, _ref, _ref1, _ref2;
- tag = token[0];
- if (tag === 'CLASS' || tag === 'IF' || tag === 'FOR' || tag === 'WHILE') {
- noCall = true;
- }
- _ref = tokens.slice(i - 1, +(i + 1) + 1 || 9e9), prev = _ref[0], current = _ref[1], next = _ref[2];
- callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref1 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref1) >= 0);
- seenSingle = false;
- seenControl = false;
- if (__indexOf.call(LINEBREAKS, tag) >= 0) {
- noCall = false;
- }
- if (prev && !prev.spaced && tag === '?') {
- token.call = true;
- }
- if (token.fromThen) {
- return 1;
- }
- if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
- return 1;
- }
- tokens.splice(i, 0, this.generate('CALL_START', '(', token[2]));
- this.detectEnd(i + 1, condition, action);
- if (prev[0] === '?') {
- prev[0] = 'FUNC_EXIST';
- }
- return 2;
- });
- };
-
- Rewriter.prototype.addImplicitIndentation = function() {
- var action, condition, indent, outdent, starter;
- starter = indent = outdent = null;
- condition = function(token, i) {
- var _ref;
- return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
- };
- action = function(token, i) {
- return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
- };
- return this.scanTokens(function(token, i, tokens) {
- var tag, _ref, _ref1;
- tag = token[0];
- if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
- tokens.splice(i, 1);
- return 0;
- }
- if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
- tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation(token))));
- return 2;
- }
- if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
- tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation(token))));
- return 4;
- }
- if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
- starter = tag;
- _ref1 = this.indentation(token, true), indent = _ref1[0], outdent = _ref1[1];
- if (starter === 'THEN') {
- indent.fromThen = true;
- }
- tokens.splice(i + 1, 0, indent);
- this.detectEnd(i + 2, condition, action);
- if (tag === 'THEN') {
- tokens.splice(i, 1);
- }
- return 1;
- }
- return 1;
- });
- };
-
- Rewriter.prototype.tagPostfixConditionals = function() {
- var action, condition, original;
- original = null;
- condition = function(token, i) {
- var _ref;
- return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT';
- };
- action = function(token, i) {
- if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
- return original[0] = 'POST_' + original[0];
- }
- };
- return this.scanTokens(function(token, i) {
- if (token[0] !== 'IF') {
- return 1;
- }
- original = token;
- this.detectEnd(i + 1, condition, action);
- return 1;
- });
- };
-
- Rewriter.prototype.indentation = function(token, implicit) {
- var indent, outdent;
- if (implicit == null) {
- implicit = false;
- }
- indent = ['INDENT', 2, token[2]];
- outdent = ['OUTDENT', 2, token[2]];
- if (implicit) {
- indent.generated = outdent.generated = true;
- }
- return [indent, outdent];
- };
-
- Rewriter.prototype.generate = function(tag, value, line) {
- var tok;
- tok = [tag, value, line];
- tok.generated = true;
- return tok;
- };
-
- Rewriter.prototype.tag = function(i) {
- var _ref;
- return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
- };
-
- return Rewriter;
-
- })();
-
- BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
-
- exports.INVERSES = INVERSES = {};
-
- EXPRESSION_START = [];
-
- EXPRESSION_END = [];
-
- for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
- _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
- EXPRESSION_START.push(INVERSES[rite] = left);
- EXPRESSION_END.push(INVERSES[left] = rite);
- }
-
- EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
-
- IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
-
- IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
-
- IMPLICIT_UNSPACED_CALL = ['+', '-'];
-
- IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
-
- IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
-
- SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
-
- SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
-
- LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/scope.js b/node_modules/jade/node_modules/coffee-script/lib/coffee-script/scope.js
deleted file mode 100644
index 3f35dbf6..00000000
--- a/node_modules/jade/node_modules/coffee-script/lib/coffee-script/scope.js
+++ /dev/null
@@ -1,146 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-(function() {
- var Scope, extend, last, _ref;
-
- _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
-
- exports.Scope = Scope = (function() {
-
- Scope.root = null;
-
- function Scope(parent, expressions, method) {
- this.parent = parent;
- this.expressions = expressions;
- this.method = method;
- this.variables = [
- {
- name: 'arguments',
- type: 'arguments'
- }
- ];
- this.positions = {};
- if (!this.parent) {
- Scope.root = this;
- }
- }
-
- Scope.prototype.add = function(name, type, immediate) {
- if (this.shared && !immediate) {
- return this.parent.add(name, type, immediate);
- }
- if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
- return this.variables[this.positions[name]].type = type;
- } else {
- return this.positions[name] = this.variables.push({
- name: name,
- type: type
- }) - 1;
- }
- };
-
- Scope.prototype.namedMethod = function() {
- if (this.method.name || !this.parent) {
- return this.method;
- }
- return this.parent.namedMethod();
- };
-
- Scope.prototype.find = function(name) {
- if (this.check(name)) {
- return true;
- }
- this.add(name, 'var');
- return false;
- };
-
- Scope.prototype.parameter = function(name) {
- if (this.shared && this.parent.check(name, true)) {
- return;
- }
- return this.add(name, 'param');
- };
-
- Scope.prototype.check = function(name) {
- var _ref1;
- return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
- };
-
- Scope.prototype.temporary = function(name, index) {
- if (name.length > 1) {
- return '_' + name + (index > 1 ? index - 1 : '');
- } else {
- return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
- }
- };
-
- Scope.prototype.type = function(name) {
- var v, _i, _len, _ref1;
- _ref1 = this.variables;
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- v = _ref1[_i];
- if (v.name === name) {
- return v.type;
- }
- }
- return null;
- };
-
- Scope.prototype.freeVariable = function(name, reserve) {
- var index, temp;
- if (reserve == null) {
- reserve = true;
- }
- index = 0;
- while (this.check((temp = this.temporary(name, index)))) {
- index++;
- }
- if (reserve) {
- this.add(temp, 'var', true);
- }
- return temp;
- };
-
- Scope.prototype.assign = function(name, value) {
- this.add(name, {
- value: value,
- assigned: true
- }, true);
- return this.hasAssignments = true;
- };
-
- Scope.prototype.hasDeclarations = function() {
- return !!this.declaredVariables().length;
- };
-
- Scope.prototype.declaredVariables = function() {
- var realVars, tempVars, v, _i, _len, _ref1;
- realVars = [];
- tempVars = [];
- _ref1 = this.variables;
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- v = _ref1[_i];
- if (v.type === 'var') {
- (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
- }
- }
- return realVars.sort().concat(tempVars.sort());
- };
-
- Scope.prototype.assignedVariables = function() {
- var v, _i, _len, _ref1, _results;
- _ref1 = this.variables;
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- v = _ref1[_i];
- if (v.type.assigned) {
- _results.push("" + v.name + " = " + v.type.value);
- }
- }
- return _results;
- };
-
- return Scope;
-
- })();
-
-}).call(this);
diff --git a/node_modules/jade/node_modules/coffee-script/package.json b/node_modules/jade/node_modules/coffee-script/package.json
deleted file mode 100644
index 99712a56..00000000
--- a/node_modules/jade/node_modules/coffee-script/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "coffee-script",
- "description": "Unfancy JavaScript",
- "keywords": [
- "javascript",
- "language",
- "coffeescript",
- "compiler"
- ],
- "author": {
- "name": "Jeremy Ashkenas"
- },
- "version": "1.4.0",
- "licenses": [
- {
- "type": "MIT",
- "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE"
- }
- ],
- "engines": {
- "node": ">=0.4.0"
- },
- "directories": {
- "lib": "./lib/coffee-script"
- },
- "main": "./lib/coffee-script/coffee-script",
- "bin": {
- "coffee": "./bin/coffee",
- "cake": "./bin/cake"
- },
- "scripts": {
- "test": "node ./bin/cake test"
- },
- "homepage": "http://coffeescript.org",
- "bugs": "https://github.com/jashkenas/coffee-script/issues",
- "repository": {
- "type": "git",
- "url": "git://github.com/jashkenas/coffee-script.git"
- },
- "devDependencies": {
- "uglify-js": ">=1.0.0",
- "jison": ">=0.2.0"
- },
- "readme": "\n {\n } } {\n { { } }\n } }{ {\n { }{ } } _____ __ __\n ( }{ }{ { ) / ____| / _|/ _|\n .- { { } { }} -. | | ___ | |_| |_ ___ ___\n ( ( } { } { } } ) | | / _ \\| _| _/ _ \\/ _ \\\n |`-..________ ..-'| | |___| (_) | | | || __/ __/\n | | \\_____\\___/|_| |_| \\___|\\___|\n | ;--.\n | (__ \\ _____ _ _\n | | ) ) / ____| (_) | |\n | |/ / | (___ ___ _ __ _ _ __ | |_\n | ( / \\___ \\ / __| '__| | '_ \\| __|\n | |/ ____) | (__| | | | |_) | |_\n | | |_____/ \\___|_| |_| .__/ \\__|\n `-.._________..-' | |\n |_|\n\n\n CoffeeScript is a little language that compiles into JavaScript.\n\n Install Node.js, and then the CoffeeScript compiler:\n sudo bin/cake install\n\n Or, if you have the Node Package Manager installed:\n npm install -g coffee-script\n (Leave off the -g if you don't wish to install globally.)\n\n Execute a script:\n coffee /path/to/script.coffee\n\n Compile a script:\n coffee -c /path/to/script.coffee\n\n For documentation, usage, and examples, see:\n http://coffeescript.org/\n\n To suggest a feature, report a bug, or general discussion:\n http://github.com/jashkenas/coffee-script/issues/\n\n If you'd like to chat, drop by #coffeescript on Freenode IRC,\n or on webchat.freenode.net.\n\n The source repository:\n git://github.com/jashkenas/coffee-script.git\n\n All contributors are listed here:\n http://github.com/jashkenas/coffee-script/contributors\n",
- "_id": "[email protected]",
- "dist": {
- "shasum": "db55ad8c2de9c4815b099547e589f1415be25dd0"
- },
- "_from": "coffee-script@~1.4.0"
-}
diff --git a/node_modules/jade/node_modules/commander/.npmignore b/node_modules/jade/node_modules/commander/.npmignore
deleted file mode 100644
index f1250e58..00000000
--- a/node_modules/jade/node_modules/commander/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-support
-test
-examples
-*.sock
diff --git a/node_modules/jade/node_modules/commander/.travis.yml b/node_modules/jade/node_modules/commander/.travis.yml
deleted file mode 100644
index f1d0f13c..00000000
--- a/node_modules/jade/node_modules/commander/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.4
- - 0.6
diff --git a/node_modules/jade/node_modules/commander/History.md b/node_modules/jade/node_modules/commander/History.md
deleted file mode 100644
index 4961d2e2..00000000
--- a/node_modules/jade/node_modules/commander/History.md
+++ /dev/null
@@ -1,107 +0,0 @@
-
-0.6.1 / 2012-06-01
-==================
-
- * Added: append (yes or no) on confirmation
- * Added: allow node.js v0.7.x
-
-0.6.0 / 2012-04-10
-==================
-
- * Added `.prompt(obj, callback)` support. Closes #49
- * Added default support to .choose(). Closes #41
- * Fixed the choice example
-
-0.5.1 / 2011-12-20
-==================
-
- * Fixed `password()` for recent nodes. Closes #36
-
-0.5.0 / 2011-12-04
-==================
-
- * Added sub-command option support [itay]
-
-0.4.3 / 2011-12-04
-==================
-
- * Fixed custom help ordering. Closes #32
-
-0.4.2 / 2011-11-24
-==================
-
- * Added travis support
- * Fixed: line-buffered input automatically trimmed. Closes #31
-
-0.4.1 / 2011-11-18
-==================
-
- * Removed listening for "close" on --help
-
-0.4.0 / 2011-11-15
-==================
-
- * Added support for `--`. Closes #24
-
-0.3.3 / 2011-11-14
-==================
-
- * Fixed: wait for close event when writing help info [Jerry Hamlet]
-
-0.3.2 / 2011-11-01
-==================
-
- * Fixed long flag definitions with values [felixge]
-
-0.3.1 / 2011-10-31
-==================
-
- * Changed `--version` short flag to `-V` from `-v`
- * Changed `.version()` so it's configurable [felixge]
-
-0.3.0 / 2011-10-31
-==================
-
- * Added support for long flags only. Closes #18
-
-0.2.1 / 2011-10-24
-==================
-
- * "node": ">= 0.4.x < 0.7.0". Closes #20
-
-0.2.0 / 2011-09-26
-==================
-
- * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]
-
-0.1.0 / 2011-08-24
-==================
-
- * Added support for custom `--help` output
-
-0.0.5 / 2011-08-18
-==================
-
- * Changed: when the user enters nothing prompt for password again
- * Fixed issue with passwords beginning with numbers [NuckChorris]
-
-0.0.4 / 2011-08-15
-==================
-
- * Fixed `Commander#args`
-
-0.0.3 / 2011-08-15
-==================
-
- * Added default option value support
-
-0.0.2 / 2011-08-15
-==================
-
- * Added mask support to `Command#password(str[, mask], fn)`
- * Added `Command#password(str, fn)`
-
-0.0.1 / 2010-01-03
-==================
-
- * Initial release
diff --git a/node_modules/jade/node_modules/commander/Makefile b/node_modules/jade/node_modules/commander/Makefile
deleted file mode 100644
index 00746255..00000000
--- a/node_modules/jade/node_modules/commander/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-
-TESTS = $(shell find test/test.*.js)
-
-test:
- @./test/run $(TESTS)
-
-.PHONY: test \ No newline at end of file
diff --git a/node_modules/jade/node_modules/commander/Readme.md b/node_modules/jade/node_modules/commander/Readme.md
deleted file mode 100644
index b8328c37..00000000
--- a/node_modules/jade/node_modules/commander/Readme.md
+++ /dev/null
@@ -1,262 +0,0 @@
-# Commander.js
-
- The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).
-
- [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)
-
-## Installation
-
- $ npm install commander
-
-## Option parsing
-
- Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.
-
-```js
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var program = require('commander');
-
-program
- .version('0.0.1')
- .option('-p, --peppers', 'Add peppers')
- .option('-P, --pineapple', 'Add pineapple')
- .option('-b, --bbq', 'Add bbq sauce')
- .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
- .parse(process.argv);
-
-console.log('you ordered a pizza with:');
-if (program.peppers) console.log(' - peppers');
-if (program.pineapple) console.log(' - pineappe');
-if (program.bbq) console.log(' - bbq');
-console.log(' - %s cheese', program.cheese);
-```
-
- Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.
-
-## Automated --help
-
- The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
-
-```
- $ ./examples/pizza --help
-
- Usage: pizza [options]
-
- Options:
-
- -V, --version output the version number
- -p, --peppers Add peppers
- -P, --pineapple Add pineappe
- -b, --bbq Add bbq sauce
- -c, --cheese <type> Add the specified type of cheese [marble]
- -h, --help output usage information
-
-```
-
-## Coercion
-
-```js
-function range(val) {
- return val.split('..').map(Number);
-}
-
-function list(val) {
- return val.split(',');
-}
-
-program
- .version('0.0.1')
- .usage('[options] <file ...>')
- .option('-i, --integer <n>', 'An integer argument', parseInt)
- .option('-f, --float <n>', 'A float argument', parseFloat)
- .option('-r, --range <a>..<b>', 'A range', range)
- .option('-l, --list <items>', 'A list', list)
- .option('-o, --optional [value]', 'An optional value')
- .parse(process.argv);
-
-console.log(' int: %j', program.integer);
-console.log(' float: %j', program.float);
-console.log(' optional: %j', program.optional);
-program.range = program.range || [];
-console.log(' range: %j..%j', program.range[0], program.range[1]);
-console.log(' list: %j', program.list);
-console.log(' args: %j', program.args);
-```
-
-## Custom help
-
- You can display arbitrary `-h, --help` information
- by listening for "--help". Commander will automatically
- exit once you are done so that the remainder of your program
- does not execute causing undesired behaviours, for example
- in the following executable "stuff" will not output when
- `--help` is used.
-
-```js
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var program = require('../');
-
-function list(val) {
- return val.split(',').map(Number);
-}
-
-program
- .version('0.0.1')
- .option('-f, --foo', 'enable some foo')
- .option('-b, --bar', 'enable some bar')
- .option('-B, --baz', 'enable some baz');
-
-// must be before .parse() since
-// node's emit() is immediate
-
-program.on('--help', function(){
- console.log(' Examples:');
- console.log('');
- console.log(' $ custom-help --help');
- console.log(' $ custom-help -h');
- console.log('');
-});
-
-program.parse(process.argv);
-
-console.log('stuff');
-```
-
-yielding the following help output:
-
-```
-
-Usage: custom-help [options]
-
-Options:
-
- -h, --help output usage information
- -V, --version output the version number
- -f, --foo enable some foo
- -b, --bar enable some bar
- -B, --baz enable some baz
-
-Examples:
-
- $ custom-help --help
- $ custom-help -h
-
-```
-
-## .prompt(msg, fn)
-
- Single-line prompt:
-
-```js
-program.prompt('name: ', function(name){
- console.log('hi %s', name);
-});
-```
-
- Multi-line prompt:
-
-```js
-program.prompt('description:', function(name){
- console.log('hi %s', name);
-});
-```
-
- Coercion:
-
-```js
-program.prompt('Age: ', Number, function(age){
- console.log('age: %j', age);
-});
-```
-
-```js
-program.prompt('Birthdate: ', Date, function(date){
- console.log('date: %s', date);
-});
-```
-
-## .password(msg[, mask], fn)
-
-Prompt for password without echoing:
-
-```js
-program.password('Password: ', function(pass){
- console.log('got "%s"', pass);
- process.stdin.destroy();
-});
-```
-
-Prompt for password with mask char "*":
-
-```js
-program.password('Password: ', '*', function(pass){
- console.log('got "%s"', pass);
- process.stdin.destroy();
-});
-```
-
-## .confirm(msg, fn)
-
- Confirm with the given `msg`:
-
-```js
-program.confirm('continue? ', function(ok){
- console.log(' got %j', ok);
-});
-```
-
-## .choose(list, fn)
-
- Let the user choose from a `list`:
-
-```js
-var list = ['tobi', 'loki', 'jane', 'manny', 'luna'];
-
-console.log('Choose the coolest pet:');
-program.choose(list, function(i){
- console.log('you chose %d "%s"', i, list[i]);
-});
-```
-
-## Links
-
- - [API documentation](http://visionmedia.github.com/commander.js/)
- - [ascii tables](https://github.com/LearnBoost/cli-table)
- - [progress bars](https://github.com/visionmedia/node-progress)
- - [more progress bars](https://github.com/substack/node-multimeter)
- - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2011 TJ Holowaychuk &lt;[email protected]&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/node_modules/jade/node_modules/commander/index.js b/node_modules/jade/node_modules/commander/index.js
deleted file mode 100644
index 06ec1e4b..00000000
--- a/node_modules/jade/node_modules/commander/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-
-module.exports = require('./lib/commander'); \ No newline at end of file
diff --git a/node_modules/jade/node_modules/commander/lib/commander.js b/node_modules/jade/node_modules/commander/lib/commander.js
deleted file mode 100644
index 5ba87ebb..00000000
--- a/node_modules/jade/node_modules/commander/lib/commander.js
+++ /dev/null
@@ -1,1026 +0,0 @@
-
-/*!
- * commander
- * Copyright(c) 2011 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('events').EventEmitter
- , path = require('path')
- , tty = require('tty')
- , basename = path.basename;
-
-/**
- * Expose the root command.
- */
-
-exports = module.exports = new Command;
-
-/**
- * Expose `Command`.
- */
-
-exports.Command = Command;
-
-/**
- * Expose `Option`.
- */
-
-exports.Option = Option;
-
-/**
- * Initialize a new `Option` with the given `flags` and `description`.
- *
- * @param {String} flags
- * @param {String} description
- * @api public
- */
-
-function Option(flags, description) {
- this.flags = flags;
- this.required = ~flags.indexOf('<');
- this.optional = ~flags.indexOf('[');
- this.bool = !~flags.indexOf('-no-');
- flags = flags.split(/[ ,|]+/);
- if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
- this.long = flags.shift();
- this.description = description;
-}
-
-/**
- * Return option name.
- *
- * @return {String}
- * @api private
- */
-
-Option.prototype.name = function(){
- return this.long
- .replace('--', '')
- .replace('no-', '');
-};
-
-/**
- * Check if `arg` matches the short or long flag.
- *
- * @param {String} arg
- * @return {Boolean}
- * @api private
- */
-
-Option.prototype.is = function(arg){
- return arg == this.short
- || arg == this.long;
-};
-
-/**
- * Initialize a new `Command`.
- *
- * @param {String} name
- * @api public
- */
-
-function Command(name) {
- this.commands = [];
- this.options = [];
- this.args = [];
- this.name = name;
-}
-
-/**
- * Inherit from `EventEmitter.prototype`.
- */
-
-Command.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Add command `name`.
- *
- * The `.action()` callback is invoked when the
- * command `name` is specified via __ARGV__,
- * and the remaining arguments are applied to the
- * function for access.
- *
- * When the `name` is "*" an un-matched command
- * will be passed as the first arg, followed by
- * the rest of __ARGV__ remaining.
- *
- * Examples:
- *
- * program
- * .version('0.0.1')
- * .option('-C, --chdir <path>', 'change the working directory')
- * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
- * .option('-T, --no-tests', 'ignore test hook')
- *
- * program
- * .command('setup')
- * .description('run remote setup commands')
- * .action(function(){
- * console.log('setup');
- * });
- *
- * program
- * .command('exec <cmd>')
- * .description('run the given remote command')
- * .action(function(cmd){
- * console.log('exec "%s"', cmd);
- * });
- *
- * program
- * .command('*')
- * .description('deploy the given env')
- * .action(function(env){
- * console.log('deploying "%s"', env);
- * });
- *
- * program.parse(process.argv);
- *
- * @param {String} name
- * @return {Command} the new command
- * @api public
- */
-
-Command.prototype.command = function(name){
- var args = name.split(/ +/);
- var cmd = new Command(args.shift());
- this.commands.push(cmd);
- cmd.parseExpectedArgs(args);
- cmd.parent = this;
- return cmd;
-};
-
-/**
- * Parse expected `args`.
- *
- * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
- *
- * @param {Array} args
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parseExpectedArgs = function(args){
- if (!args.length) return;
- var self = this;
- args.forEach(function(arg){
- switch (arg[0]) {
- case '<':
- self.args.push({ required: true, name: arg.slice(1, -1) });
- break;
- case '[':
- self.args.push({ required: false, name: arg.slice(1, -1) });
- break;
- }
- });
- return this;
-};
-
-/**
- * Register callback `fn` for the command.
- *
- * Examples:
- *
- * program
- * .command('help')
- * .description('display verbose help')
- * .action(function(){
- * // output help here
- * });
- *
- * @param {Function} fn
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.action = function(fn){
- var self = this;
- this.parent.on(this.name, function(args, unknown){
- // Parse any so-far unknown options
- unknown = unknown || [];
- var parsed = self.parseOptions(unknown);
-
- // Output help if necessary
- outputHelpIfNecessary(self, parsed.unknown);
-
- // If there are still any unknown options, then we simply
- // die, unless someone asked for help, in which case we give it
- // to them, and then we die.
- if (parsed.unknown.length > 0) {
- self.unknownOption(parsed.unknown[0]);
- }
-
- self.args.forEach(function(arg, i){
- if (arg.required && null == args[i]) {
- self.missingArgument(arg.name);
- }
- });
-
- // Always append ourselves to the end of the arguments,
- // to make sure we match the number of arguments the user
- // expects
- if (self.args.length) {
- args[self.args.length] = self;
- } else {
- args.push(self);
- }
-
- fn.apply(this, args);
- });
- return this;
-};
-
-/**
- * Define option with `flags`, `description` and optional
- * coercion `fn`.
- *
- * The `flags` string should contain both the short and long flags,
- * separated by comma, a pipe or space. The following are all valid
- * all will output this way when `--help` is used.
- *
- * "-p, --pepper"
- * "-p|--pepper"
- * "-p --pepper"
- *
- * Examples:
- *
- * // simple boolean defaulting to false
- * program.option('-p, --pepper', 'add pepper');
- *
- * --pepper
- * program.pepper
- * // => Boolean
- *
- * // simple boolean defaulting to false
- * program.option('-C, --no-cheese', 'remove cheese');
- *
- * program.cheese
- * // => true
- *
- * --no-cheese
- * program.cheese
- * // => true
- *
- * // required argument
- * program.option('-C, --chdir <path>', 'change the working directory');
- *
- * --chdir /tmp
- * program.chdir
- * // => "/tmp"
- *
- * // optional argument
- * program.option('-c, --cheese [type]', 'add cheese [marble]');
- *
- * @param {String} flags
- * @param {String} description
- * @param {Function|Mixed} fn or default
- * @param {Mixed} defaultValue
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.option = function(flags, description, fn, defaultValue){
- var self = this
- , option = new Option(flags, description)
- , oname = option.name()
- , name = camelcase(oname);
-
- // default as 3rd arg
- if ('function' != typeof fn) defaultValue = fn, fn = null;
-
- // preassign default value only for --no-*, [optional], or <required>
- if (false == option.bool || option.optional || option.required) {
- // when --no-* we make sure default is true
- if (false == option.bool) defaultValue = true;
- // preassign only if we have a default
- if (undefined !== defaultValue) self[name] = defaultValue;
- }
-
- // register the option
- this.options.push(option);
-
- // when it's passed assign the value
- // and conditionally invoke the callback
- this.on(oname, function(val){
- // coercion
- if (null != val && fn) val = fn(val);
-
- // unassigned or bool
- if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) {
- // if no value, bool true, and we have a default, then use it!
- if (null == val) {
- self[name] = option.bool
- ? defaultValue || true
- : false;
- } else {
- self[name] = val;
- }
- } else if (null !== val) {
- // reassign
- self[name] = val;
- }
- });
-
- return this;
-};
-
-/**
- * Parse `argv`, settings options and invoking commands when defined.
- *
- * @param {Array} argv
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parse = function(argv){
- // store raw args
- this.rawArgs = argv;
-
- // guess name
- if (!this.name) this.name = basename(argv[1]);
-
- // process argv
- var parsed = this.parseOptions(this.normalize(argv.slice(2)));
- this.args = parsed.args;
- return this.parseArgs(this.args, parsed.unknown);
-};
-
-/**
- * Normalize `args`, splitting joined short flags. For example
- * the arg "-abc" is equivalent to "-a -b -c".
- *
- * @param {Array} args
- * @return {Array}
- * @api private
- */
-
-Command.prototype.normalize = function(args){
- var ret = []
- , arg;
-
- for (var i = 0, len = args.length; i < len; ++i) {
- arg = args[i];
- if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) {
- arg.slice(1).split('').forEach(function(c){
- ret.push('-' + c);
- });
- } else {
- ret.push(arg);
- }
- }
-
- return ret;
-};
-
-/**
- * Parse command `args`.
- *
- * When listener(s) are available those
- * callbacks are invoked, otherwise the "*"
- * event is emitted and those actions are invoked.
- *
- * @param {Array} args
- * @return {Command} for chaining
- * @api private
- */
-
-Command.prototype.parseArgs = function(args, unknown){
- var cmds = this.commands
- , len = cmds.length
- , name;
-
- if (args.length) {
- name = args[0];
- if (this.listeners(name).length) {
- this.emit(args.shift(), args, unknown);
- } else {
- this.emit('*', args);
- }
- } else {
- outputHelpIfNecessary(this, unknown);
-
- // If there were no args and we have unknown options,
- // then they are extraneous and we need to error.
- if (unknown.length > 0) {
- this.unknownOption(unknown[0]);
- }
- }
-
- return this;
-};
-
-/**
- * Return an option matching `arg` if any.
- *
- * @param {String} arg
- * @return {Option}
- * @api private
- */
-
-Command.prototype.optionFor = function(arg){
- for (var i = 0, len = this.options.length; i < len; ++i) {
- if (this.options[i].is(arg)) {
- return this.options[i];
- }
- }
-};
-
-/**
- * Parse options from `argv` returning `argv`
- * void of these options.
- *
- * @param {Array} argv
- * @return {Array}
- * @api public
- */
-
-Command.prototype.parseOptions = function(argv){
- var args = []
- , len = argv.length
- , literal
- , option
- , arg;
-
- var unknownOptions = [];
-
- // parse options
- for (var i = 0; i < len; ++i) {
- arg = argv[i];
-
- // literal args after --
- if ('--' == arg) {
- literal = true;
- continue;
- }
-
- if (literal) {
- args.push(arg);
- continue;
- }
-
- // find matching Option
- option = this.optionFor(arg);
-
- // option is defined
- if (option) {
- // requires arg
- if (option.required) {
- arg = argv[++i];
- if (null == arg) return this.optionMissingArgument(option);
- if ('-' == arg[0]) return this.optionMissingArgument(option, arg);
- this.emit(option.name(), arg);
- // optional arg
- } else if (option.optional) {
- arg = argv[i+1];
- if (null == arg || '-' == arg[0]) {
- arg = null;
- } else {
- ++i;
- }
- this.emit(option.name(), arg);
- // bool
- } else {
- this.emit(option.name());
- }
- continue;
- }
-
- // looks like an option
- if (arg.length > 1 && '-' == arg[0]) {
- unknownOptions.push(arg);
-
- // If the next argument looks like it might be
- // an argument for this option, we pass it on.
- // If it isn't, then it'll simply be ignored
- if (argv[i+1] && '-' != argv[i+1][0]) {
- unknownOptions.push(argv[++i]);
- }
- continue;
- }
-
- // arg
- args.push(arg);
- }
-
- return { args: args, unknown: unknownOptions };
-};
-
-/**
- * Argument `name` is missing.
- *
- * @param {String} name
- * @api private
- */
-
-Command.prototype.missingArgument = function(name){
- console.error();
- console.error(" error: missing required argument `%s'", name);
- console.error();
- process.exit(1);
-};
-
-/**
- * `Option` is missing an argument, but received `flag` or nothing.
- *
- * @param {String} option
- * @param {String} flag
- * @api private
- */
-
-Command.prototype.optionMissingArgument = function(option, flag){
- console.error();
- if (flag) {
- console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag);
- } else {
- console.error(" error: option `%s' argument missing", option.flags);
- }
- console.error();
- process.exit(1);
-};
-
-/**
- * Unknown option `flag`.
- *
- * @param {String} flag
- * @api private
- */
-
-Command.prototype.unknownOption = function(flag){
- console.error();
- console.error(" error: unknown option `%s'", flag);
- console.error();
- process.exit(1);
-};
-
-/**
- * Set the program version to `str`.
- *
- * This method auto-registers the "-V, --version" flag
- * which will print the version number when passed.
- *
- * @param {String} str
- * @param {String} flags
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.version = function(str, flags){
- if (0 == arguments.length) return this._version;
- this._version = str;
- flags = flags || '-V, --version';
- this.option(flags, 'output the version number');
- this.on('version', function(){
- console.log(str);
- process.exit(0);
- });
- return this;
-};
-
-/**
- * Set the description `str`.
- *
- * @param {String} str
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.description = function(str){
- if (0 == arguments.length) return this._description;
- this._description = str;
- return this;
-};
-
-/**
- * Set / get the command usage `str`.
- *
- * @param {String} str
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.usage = function(str){
- var args = this.args.map(function(arg){
- return arg.required
- ? '<' + arg.name + '>'
- : '[' + arg.name + ']';
- });
-
- var usage = '[options'
- + (this.commands.length ? '] [command' : '')
- + ']'
- + (this.args.length ? ' ' + args : '');
- if (0 == arguments.length) return this._usage || usage;
- this._usage = str;
-
- return this;
-};
-
-/**
- * Return the largest option length.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.largestOptionLength = function(){
- return this.options.reduce(function(max, option){
- return Math.max(max, option.flags.length);
- }, 0);
-};
-
-/**
- * Return help for options.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.optionHelp = function(){
- var width = this.largestOptionLength();
-
- // Prepend the help information
- return [pad('-h, --help', width) + ' ' + 'output usage information']
- .concat(this.options.map(function(option){
- return pad(option.flags, width)
- + ' ' + option.description;
- }))
- .join('\n');
-};
-
-/**
- * Return command help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.commandHelp = function(){
- if (!this.commands.length) return '';
- return [
- ''
- , ' Commands:'
- , ''
- , this.commands.map(function(cmd){
- var args = cmd.args.map(function(arg){
- return arg.required
- ? '<' + arg.name + '>'
- : '[' + arg.name + ']';
- }).join(' ');
-
- return cmd.name
- + (cmd.options.length
- ? ' [options]'
- : '') + ' ' + args
- + (cmd.description()
- ? '\n' + cmd.description()
- : '');
- }).join('\n\n').replace(/^/gm, ' ')
- , ''
- ].join('\n');
-};
-
-/**
- * Return program help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.helpInformation = function(){
- return [
- ''
- , ' Usage: ' + this.name + ' ' + this.usage()
- , '' + this.commandHelp()
- , ' Options:'
- , ''
- , '' + this.optionHelp().replace(/^/gm, ' ')
- , ''
- , ''
- ].join('\n');
-};
-
-/**
- * Prompt for a `Number`.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptForNumber = function(str, fn){
- var self = this;
- this.promptSingleLine(str, function parseNumber(val){
- val = Number(val);
- if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber);
- fn(val);
- });
-};
-
-/**
- * Prompt for a `Date`.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptForDate = function(str, fn){
- var self = this;
- this.promptSingleLine(str, function parseDate(val){
- val = new Date(val);
- if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate);
- fn(val);
- });
-};
-
-/**
- * Single-line prompt.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptSingleLine = function(str, fn){
- if ('function' == typeof arguments[2]) {
- return this['promptFor' + (fn.name || fn)](str, arguments[2]);
- }
-
- process.stdout.write(str);
- process.stdin.setEncoding('utf8');
- process.stdin.once('data', function(val){
- fn(val.trim());
- }).resume();
-};
-
-/**
- * Multi-line prompt.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptMultiLine = function(str, fn){
- var buf = [];
- console.log(str);
- process.stdin.setEncoding('utf8');
- process.stdin.on('data', function(val){
- if ('\n' == val || '\r\n' == val) {
- process.stdin.removeAllListeners('data');
- fn(buf.join('\n'));
- } else {
- buf.push(val.trimRight());
- }
- }).resume();
-};
-
-/**
- * Prompt `str` and callback `fn(val)`
- *
- * Commander supports single-line and multi-line prompts.
- * To issue a single-line prompt simply add white-space
- * to the end of `str`, something like "name: ", whereas
- * for a multi-line prompt omit this "description:".
- *
- *
- * Examples:
- *
- * program.prompt('Username: ', function(name){
- * console.log('hi %s', name);
- * });
- *
- * program.prompt('Description:', function(desc){
- * console.log('description was "%s"', desc.trim());
- * });
- *
- * @param {String|Object} str
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.prompt = function(str, fn){
- var self = this;
-
- if ('string' == typeof str) {
- if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments);
- this.promptMultiLine(str, fn);
- } else {
- var keys = Object.keys(str)
- , obj = {};
-
- function next() {
- var key = keys.shift()
- , label = str[key];
-
- if (!key) return fn(obj);
- self.prompt(label, function(val){
- obj[key] = val;
- next();
- });
- }
-
- next();
- }
-};
-
-/**
- * Prompt for password with `str`, `mask` char and callback `fn(val)`.
- *
- * The mask string defaults to '', aka no output is
- * written while typing, you may want to use "*" etc.
- *
- * Examples:
- *
- * program.password('Password: ', function(pass){
- * console.log('got "%s"', pass);
- * process.stdin.destroy();
- * });
- *
- * program.password('Password: ', '*', function(pass){
- * console.log('got "%s"', pass);
- * process.stdin.destroy();
- * });
- *
- * @param {String} str
- * @param {String} mask
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.password = function(str, mask, fn){
- var self = this
- , buf = '';
-
- // default mask
- if ('function' == typeof mask) {
- fn = mask;
- mask = '';
- }
-
- process.stdin.resume();
- tty.setRawMode(true);
- process.stdout.write(str);
-
- // keypress
- process.stdin.on('keypress', function(c, key){
- if (key && 'enter' == key.name) {
- console.log();
- process.stdin.removeAllListeners('keypress');
- tty.setRawMode(false);
- if (!buf.trim().length) return self.password(str, mask, fn);
- fn(buf);
- return;
- }
-
- if (key && key.ctrl && 'c' == key.name) {
- console.log('%s', buf);
- process.exit();
- }
-
- process.stdout.write(mask);
- buf += c;
- }).resume();
-};
-
-/**
- * Confirmation prompt with `str` and callback `fn(bool)`
- *
- * Examples:
- *
- * program.confirm('continue? ', function(ok){
- * console.log(' got %j', ok);
- * process.stdin.destroy();
- * });
- *
- * @param {String} str
- * @param {Function} fn
- * @api public
- */
-
-
-Command.prototype.confirm = function(str, fn, verbose){
- var self = this;
- this.prompt(str, function(ok){
- if (!ok.trim()) {
- if (!verbose) str += '(yes or no) ';
- return self.confirm(str, fn, true);
- }
- fn(parseBool(ok));
- });
-};
-
-/**
- * Choice prompt with `list` of items and callback `fn(index, item)`
- *
- * Examples:
- *
- * var list = ['tobi', 'loki', 'jane', 'manny', 'luna'];
- *
- * console.log('Choose the coolest pet:');
- * program.choose(list, function(i){
- * console.log('you chose %d "%s"', i, list[i]);
- * process.stdin.destroy();
- * });
- *
- * @param {Array} list
- * @param {Number|Function} index or fn
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.choose = function(list, index, fn){
- var self = this
- , hasDefault = 'number' == typeof index;
-
- if (!hasDefault) {
- fn = index;
- index = null;
- }
-
- list.forEach(function(item, i){
- if (hasDefault && i == index) {
- console.log('* %d) %s', i + 1, item);
- } else {
- console.log(' %d) %s', i + 1, item);
- }
- });
-
- function again() {
- self.prompt(' : ', function(val){
- val = parseInt(val, 10) - 1;
- if (hasDefault && isNaN(val)) val = index;
-
- if (null == list[val]) {
- again();
- } else {
- fn(val, list[val]);
- }
- });
- }
-
- again();
-};
-
-/**
- * Camel-case the given `flag`
- *
- * @param {String} flag
- * @return {String}
- * @api private
- */
-
-function camelcase(flag) {
- return flag.split('-').reduce(function(str, word){
- return str + word[0].toUpperCase() + word.slice(1);
- });
-}
-
-/**
- * Parse a boolean `str`.
- *
- * @param {String} str
- * @return {Boolean}
- * @api private
- */
-
-function parseBool(str) {
- return /^y|yes|ok|true$/i.test(str);
-}
-
-/**
- * Pad `str` to `width`.
- *
- * @param {String} str
- * @param {Number} width
- * @return {String}
- * @api private
- */
-
-function pad(str, width) {
- var len = Math.max(0, width - str.length);
- return str + Array(len + 1).join(' ');
-}
-
-/**
- * Output help information if necessary
- *
- * @param {Command} command to output help for
- * @param {Array} array of options to search for -h or --help
- * @api private
- */
-
-function outputHelpIfNecessary(cmd, options) {
- options = options || [];
- for (var i = 0; i < options.length; i++) {
- if (options[i] == '--help' || options[i] == '-h') {
- process.stdout.write(cmd.helpInformation());
- cmd.emit('--help');
- process.exit(0);
- }
- }
-}
diff --git a/node_modules/jade/node_modules/commander/package.json b/node_modules/jade/node_modules/commander/package.json
deleted file mode 100644
index 764dece5..00000000
--- a/node_modules/jade/node_modules/commander/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "commander",
- "version": "0.6.1",
- "description": "the complete solution for node.js command-line programs",
- "keywords": [
- "command",
- "option",
- "parser",
- "prompt",
- "stdin"
- ],
- "author": {
- "name": "TJ Holowaychuk",
- "email": "[email protected]"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/visionmedia/commander.js.git"
- },
- "dependencies": {},
- "devDependencies": {
- "should": ">= 0.0.1"
- },
- "scripts": {
- "test": "make test"
- },
- "main": "index",
- "engines": {
- "node": ">= 0.4.x"
- },
- "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineappe');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineappe\n -b, --bbq Add bbq sauce\n -c, --cheese <type> Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] <file ...>')\n .option('-i, --integer <n>', 'An integer argument', parseInt)\n .option('-f, --float <n>', 'A float argument', parseFloat)\n .option('-r, --range <a>..<b>', 'A range', range)\n .option('-l, --list <items>', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt('name: ', function(name){\n console.log('hi %s', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt('description:', function(name){\n console.log('hi %s', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt('Age: ', Number, function(age){\n console.log('age: %j', age);\n});\n```\n\n```js\nprogram.prompt('Birthdate: ', Date, function(date){\n console.log('date: %s', date);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password('Password: ', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char \"*\":\n\n```js\nprogram.password('Password: ', '*', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm('continue? ', function(ok){\n console.log(' got %j', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = ['tobi', 'loki', 'jane', 'manny', 'luna'];\n\nconsole.log('Choose the coolest pet:');\nprogram.choose(list, function(i){\n console.log('you chose %d \"%s\"', i, list[i]);\n});\n```\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk &lt;[email protected]&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
- "_id": "[email protected]",
- "_from": "[email protected]"
-}
diff --git a/node_modules/jade/node_modules/mkdirp/.npmignore b/node_modules/jade/node_modules/mkdirp/.npmignore
deleted file mode 100644
index 9303c347..00000000
--- a/node_modules/jade/node_modules/mkdirp/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules/
-npm-debug.log \ No newline at end of file
diff --git a/node_modules/jade/node_modules/mkdirp/.travis.yml b/node_modules/jade/node_modules/mkdirp/.travis.yml
deleted file mode 100644
index f1d0f13c..00000000
--- a/node_modules/jade/node_modules/mkdirp/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.4
- - 0.6
diff --git a/node_modules/jade/node_modules/mkdirp/LICENSE b/node_modules/jade/node_modules/mkdirp/LICENSE
deleted file mode 100644
index 432d1aeb..00000000
--- a/node_modules/jade/node_modules/mkdirp/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright 2010 James Halliday ([email protected])
-
-This project is free software released under the MIT/X11 license:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/node_modules/jade/node_modules/mkdirp/README.markdown b/node_modules/jade/node_modules/mkdirp/README.markdown
deleted file mode 100644
index 40de04f7..00000000
--- a/node_modules/jade/node_modules/mkdirp/README.markdown
+++ /dev/null
@@ -1,61 +0,0 @@
-mkdirp
-======
-
-Like `mkdir -p`, but in node.js!
-
-[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)
-
-example
-=======
-
-pow.js
-------
- var mkdirp = require('mkdirp');
-
- mkdirp('/tmp/foo/bar/baz', function (err) {
- if (err) console.error(err)
- else console.log('pow!')
- });
-
-Output
- pow!
-
-And now /tmp/foo/bar/baz exists, huzzah!
-
-methods
-=======
-
-var mkdirp = require('mkdirp');
-
-mkdirp(dir, mode, cb)
----------------------
-
-Create a new directory and any necessary subdirectories at `dir` with octal
-permission string `mode`.
-
-If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
-
-`cb(err, made)` fires with the error or the first directory `made`
-that had to be created, if any.
-
-mkdirp.sync(dir, mode)
-----------------------
-
-Synchronously create a new directory and any necessary subdirectories at `dir`
-with octal permission string `mode`.
-
-If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
-
-Returns the first directory that had to be created, if any.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
- npm install mkdirp
-
-license
-=======
-
-MIT/X11
diff --git a/node_modules/jade/node_modules/mkdirp/examples/pow.js b/node_modules/jade/node_modules/mkdirp/examples/pow.js
deleted file mode 100644
index e6924212..00000000
--- a/node_modules/jade/node_modules/mkdirp/examples/pow.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var mkdirp = require('mkdirp');
-
-mkdirp('/tmp/foo/bar/baz', function (err) {
- if (err) console.error(err)
- else console.log('pow!')
-});
diff --git a/node_modules/jade/node_modules/mkdirp/index.js b/node_modules/jade/node_modules/mkdirp/index.js
deleted file mode 100644
index fda6de8a..00000000
--- a/node_modules/jade/node_modules/mkdirp/index.js
+++ /dev/null
@@ -1,82 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-
-module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
-
-function mkdirP (p, mode, f, made) {
- if (typeof mode === 'function' || mode === undefined) {
- f = mode;
- mode = 0777 & (~process.umask());
- }
- if (!made) made = null;
-
- var cb = f || function () {};
- if (typeof mode === 'string') mode = parseInt(mode, 8);
- p = path.resolve(p);
-
- fs.mkdir(p, mode, function (er) {
- if (!er) {
- made = made || p;
- return cb(null, made);
- }
- switch (er.code) {
- case 'ENOENT':
- mkdirP(path.dirname(p), mode, function (er, made) {
- if (er) cb(er, made);
- else mkdirP(p, mode, cb, made);
- });
- break;
-
- // In the case of any other error, just see if there's a dir
- // there already. If so, then hooray! If not, then something
- // is borked.
- default:
- fs.stat(p, function (er2, stat) {
- // if the stat fails, then that's super weird.
- // let the original error be the failure reason.
- if (er2 || !stat.isDirectory()) cb(er, made)
- else cb(null, made);
- });
- break;
- }
- });
-}
-
-mkdirP.sync = function sync (p, mode, made) {
- if (mode === undefined) {
- mode = 0777 & (~process.umask());
- }
- if (!made) made = null;
-
- if (typeof mode === 'string') mode = parseInt(mode, 8);
- p = path.resolve(p);
-
- try {
- fs.mkdirSync(p, mode);
- made = made || p;
- }
- catch (err0) {
- switch (err0.code) {
- case 'ENOENT' :
- made = sync(path.dirname(p), mode, made);
- sync(p, mode, made);
- break;
-
- // In the case of any other error, just see if there's a dir
- // there already. If so, then hooray! If not, then something
- // is borked.
- default:
- var stat;
- try {
- stat = fs.statSync(p);
- }
- catch (err1) {
- throw err0;
- }
- if (!stat.isDirectory()) throw err0;
- break;
- }
- }
-
- return made;
-};
diff --git a/node_modules/jade/node_modules/mkdirp/package.json b/node_modules/jade/node_modules/mkdirp/package.json
deleted file mode 100644
index 0a4a83a5..00000000
--- a/node_modules/jade/node_modules/mkdirp/package.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "mkdirp",
- "description": "Recursively mkdir, like `mkdir -p`",
- "version": "0.3.4",
- "author": {
- "name": "James Halliday",
- "email": "[email protected]",
- "url": "http://substack.net"
- },
- "main": "./index",
- "keywords": [
- "mkdir",
- "directory"
- ],
- "repository": {
- "type": "git",
- "url": "http://github.com/substack/node-mkdirp.git"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "devDependencies": {
- "tap": "~0.2.4"
- },
- "license": "MIT/X11",
- "engines": {
- "node": "*"
- },
- "readme": "mkdirp\n======\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\nexample\n=======\n\npow.js\n------\n var mkdirp = require('mkdirp');\n \n mkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n });\n\nOutput\n pow!\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\nmethods\n=======\n\nvar mkdirp = require('mkdirp');\n\nmkdirp(dir, mode, cb)\n---------------------\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\nmkdirp.sync(dir, mode)\n----------------------\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n npm install mkdirp\n\nlicense\n=======\n\nMIT/X11\n",
- "_id": "[email protected]",
- "_from": "[email protected]"
-}
diff --git a/node_modules/jade/node_modules/mkdirp/test/chmod.js b/node_modules/jade/node_modules/mkdirp/test/chmod.js
deleted file mode 100644
index 520dcb8e..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/chmod.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var mkdirp = require('../').mkdirp;
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-var ps = [ '', 'tmp' ];
-
-for (var i = 0; i < 25; i++) {
- var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- ps.push(dir);
-}
-
-var file = ps.join('/');
-
-test('chmod-pre', function (t) {
- var mode = 0744
- mkdirp(file, mode, function (er) {
- t.ifError(er, 'should not error');
- fs.stat(file, function (er, stat) {
- t.ifError(er, 'should exist');
- t.ok(stat && stat.isDirectory(), 'should be directory');
- t.equal(stat && stat.mode & 0777, mode, 'should be 0744');
- t.end();
- });
- });
-});
-
-test('chmod', function (t) {
- var mode = 0755
- mkdirp(file, mode, function (er) {
- t.ifError(er, 'should not error');
- fs.stat(file, function (er, stat) {
- t.ifError(er, 'should exist');
- t.ok(stat && stat.isDirectory(), 'should be directory');
- t.end();
- });
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/clobber.js b/node_modules/jade/node_modules/mkdirp/test/clobber.js
deleted file mode 100644
index 0eb70998..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/clobber.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var mkdirp = require('../').mkdirp;
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-var ps = [ '', 'tmp' ];
-
-for (var i = 0; i < 25; i++) {
- var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- ps.push(dir);
-}
-
-var file = ps.join('/');
-
-// a file in the way
-var itw = ps.slice(0, 3).join('/');
-
-
-test('clobber-pre', function (t) {
- console.error("about to write to "+itw)
- fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.');
-
- fs.stat(itw, function (er, stat) {
- t.ifError(er)
- t.ok(stat && stat.isFile(), 'should be file')
- t.end()
- })
-})
-
-test('clobber', function (t) {
- t.plan(2);
- mkdirp(file, 0755, function (err) {
- t.ok(err);
- t.equal(err.code, 'ENOTDIR');
- t.end();
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/mkdirp.js b/node_modules/jade/node_modules/mkdirp/test/mkdirp.js
deleted file mode 100644
index b07cd70c..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/mkdirp.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('woo', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- mkdirp(file, 0755, function (err) {
- if (err) t.fail(err);
- else path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- })
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/perm.js b/node_modules/jade/node_modules/mkdirp/test/perm.js
deleted file mode 100644
index 23a7abbd..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/perm.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('async perm', function (t) {
- t.plan(2);
- var file = '/tmp/' + (Math.random() * (1<<30)).toString(16);
-
- mkdirp(file, 0755, function (err) {
- if (err) t.fail(err);
- else path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- })
- });
-});
-
-test('async root perm', function (t) {
- mkdirp('/tmp', 0755, function (err) {
- if (err) t.fail(err);
- t.end();
- });
- t.end();
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/perm_sync.js b/node_modules/jade/node_modules/mkdirp/test/perm_sync.js
deleted file mode 100644
index f685f609..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/perm_sync.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('sync perm', function (t) {
- t.plan(2);
- var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json';
-
- mkdirp.sync(file, 0755);
- path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- });
-});
-
-test('sync root perm', function (t) {
- t.plan(1);
-
- var file = '/tmp';
- mkdirp.sync(file, 0755);
- path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/race.js b/node_modules/jade/node_modules/mkdirp/test/race.js
deleted file mode 100644
index 96a04476..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/race.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var mkdirp = require('../').mkdirp;
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('race', function (t) {
- t.plan(4);
- var ps = [ '', 'tmp' ];
-
- for (var i = 0; i < 25; i++) {
- var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- ps.push(dir);
- }
- var file = ps.join('/');
-
- var res = 2;
- mk(file, function () {
- if (--res === 0) t.end();
- });
-
- mk(file, function () {
- if (--res === 0) t.end();
- });
-
- function mk (file, cb) {
- mkdirp(file, 0755, function (err) {
- if (err) t.fail(err);
- else path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- if (cb) cb();
- }
- })
- })
- });
- }
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/rel.js b/node_modules/jade/node_modules/mkdirp/test/rel.js
deleted file mode 100644
index 79858243..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/rel.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('rel', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var cwd = process.cwd();
- process.chdir('/tmp');
-
- var file = [x,y,z].join('/');
-
- mkdirp(file, 0755, function (err) {
- if (err) t.fail(err);
- else path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- process.chdir(cwd);
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- })
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/return.js b/node_modules/jade/node_modules/mkdirp/test/return.js
deleted file mode 100644
index bce68e56..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/return.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('return value', function (t) {
- t.plan(4);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- // should return the first dir created.
- // By this point, it would be profoundly surprising if /tmp didn't
- // already exist, since every other test makes things in there.
- mkdirp(file, function (err, made) {
- t.ifError(err);
- t.equal(made, '/tmp/' + x);
- mkdirp(file, function (err, made) {
- t.ifError(err);
- t.equal(made, null);
- });
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/return_sync.js b/node_modules/jade/node_modules/mkdirp/test/return_sync.js
deleted file mode 100644
index 7c222d35..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/return_sync.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('return value', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- // should return the first dir created.
- // By this point, it would be profoundly surprising if /tmp didn't
- // already exist, since every other test makes things in there.
- // Note that this will throw on failure, which will fail the test.
- var made = mkdirp.sync(file);
- t.equal(made, '/tmp/' + x);
-
- // making the same file again should have no effect.
- made = mkdirp.sync(file);
- t.equal(made, null);
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/root.js b/node_modules/jade/node_modules/mkdirp/test/root.js
deleted file mode 100644
index 97ad7a2f..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/root.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('root', function (t) {
- // '/' on unix, 'c:/' on windows.
- var file = path.resolve('/');
-
- mkdirp(file, 0755, function (err) {
- if (err) throw err
- fs.stat(file, function (er, stat) {
- if (er) throw er
- t.ok(stat.isDirectory(), 'target is a directory');
- t.end();
- })
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/sync.js b/node_modules/jade/node_modules/mkdirp/test/sync.js
deleted file mode 100644
index 7530cada..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/sync.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('sync', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- try {
- mkdirp.sync(file, 0755);
- } catch (err) {
- t.fail(err);
- return t.end();
- }
-
- path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0755);
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- });
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/umask.js b/node_modules/jade/node_modules/mkdirp/test/umask.js
deleted file mode 100644
index 64ccafe2..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/umask.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('implicit mode from umask', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- mkdirp(file, function (err) {
- if (err) t.fail(err);
- else path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, 0777 & (~process.umask()));
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- })
- })
- });
-});
diff --git a/node_modules/jade/node_modules/mkdirp/test/umask_sync.js b/node_modules/jade/node_modules/mkdirp/test/umask_sync.js
deleted file mode 100644
index 35bd5cbb..00000000
--- a/node_modules/jade/node_modules/mkdirp/test/umask_sync.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var mkdirp = require('../');
-var path = require('path');
-var fs = require('fs');
-var test = require('tap').test;
-
-test('umask sync modes', function (t) {
- t.plan(2);
- var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
- var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
-
- var file = '/tmp/' + [x,y,z].join('/');
-
- try {
- mkdirp.sync(file);
- } catch (err) {
- t.fail(err);
- return t.end();
- }
-
- path.exists(file, function (ex) {
- if (!ex) t.fail('file not created')
- else fs.stat(file, function (err, stat) {
- if (err) t.fail(err)
- else {
- t.equal(stat.mode & 0777, (0777 & (~process.umask())));
- t.ok(stat.isDirectory(), 'target not a directory');
- t.end();
- }
- });
- });
-});
diff --git a/node_modules/jade/package.json b/node_modules/jade/package.json
deleted file mode 100644
index a3a79f49..00000000
--- a/node_modules/jade/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "jade",
- "description": "Jade template engine",
- "version": "0.27.7",
- "author": {
- "name": "TJ Holowaychuk",
- "email": "[email protected]"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/visionmedia/jade"
- },
- "main": "./index.js",
- "bin": {
- "jade": "./bin/jade"
- },
- "man": [
- "./jade.1"
- ],
- "dependencies": {
- "commander": "0.6.1",
- "mkdirp": "0.3.x",
- "coffee-script": "~1.4.0"
- },
- "devDependencies": {
- "mocha": "*",
- "markdown": "*",
- "stylus": "*",
- "uubench": "*",
- "should": "*",
- "less": "*",
- "uglify-js": "*"
- },
- "component": {
- "scripts": {
- "jade": "runtime.js"
- }
- },
- "scripts": {
- "prepublish": "npm prune"
- },
- "readme": " [![Build Status](https://secure.travis-ci.org/visionmedia/jade.png)](http://travis-ci.org/visionmedia/jade)\n\n# Jade - template engine\n\n Jade is a high performance template engine heavily influenced by [Haml](http://haml-lang.com)\n and implemented with JavaScript for [node](http://nodejs.org). For discussion join the [Google Group](http://groups.google.com/group/jadejs).\n\n## Test drive\n\n You can test drive Jade online [here](http://naltatis.github.com/jade-syntax-docs).\n\n## README Contents\n\n- [Features](#a1)\n- [Implementations](#a2)\n- [Installation](#a3)\n- [Browser Support](#a4)\n- [Public API](#a5)\n- [Syntax](#a6)\n - [Line Endings](#a6-1)\n - [Tags](#a6-2)\n - [Tag Text](#a6-3)\n - [Comments](#a6-4)\n - [Block Comments](#a6-5)\n - [Nesting](#a6-6)\n - [Block Expansion](#a6-7)\n - [Case](#a6-8)\n - [Attributes](#a6-9)\n - [HTML](#a6-10)\n - [Doctypes](#a6-11)\n- [Filters](#a7)\n- [Code](#a8)\n- [Iteration](#a9)\n- [Conditionals](#a10)\n- [Template inheritance](#a11)\n- [Block append / prepend](#a12)\n- [Includes](#a13)\n- [Mixins](#a14)\n- [Generated Output](#a15)\n- [Example Makefile](#a16)\n- [jade(1)](#a17)\n- [Tutorials](#a18)\n- [License](#a19)\n\n<a name=\"a1\"/>\n## Features\n\n - client-side support\n - great readability\n - flexible indentation\n - block-expansion\n - mixins\n - static includes\n - attribute interpolation\n - code is escaped by default for security\n - contextual error reporting at compile &amp; run time\n - executable for compiling jade templates via the command line\n - html 5 mode (the default doctype)\n - optional memory caching\n - combine dynamic and static tag classes\n - parse tree manipulation via _filters_\n - template inheritance\n - block append / prepend\n - supports [Express JS](http://expressjs.com) out of the box\n - transparent iteration over objects, arrays, and even non-enumerables via `each`\n - block comments\n - no tag prefix\n - AST filters\n - filters\n - :stylus must have [stylus](http://github.com/LearnBoost/stylus) installed\n - :less must have [less.js](http://github.com/cloudhead/less.js) installed\n - :markdown must have [markdown-js](http://github.com/evilstreak/markdown-js), [node-discount](http://github.com/visionmedia/node-discount), or [marked](http://github.com/chjj/marked) installed\n - :cdata\n - :coffeescript must have [coffee-script](http://jashkenas.github.com/coffee-script/) installed\n - [Emacs Mode](https://github.com/brianc/jade-mode)\n - [Vim Syntax](https://github.com/digitaltoad/vim-jade)\n - [TextMate Bundle](http://github.com/miksago/jade-tmbundle)\n - [Coda/SubEtha syntax Mode](https://github.com/aaronmccall/jade.mode)\n - [Screencasts](http://tjholowaychuk.com/post/1004255394/jade-screencast-template-engine-for-nodejs)\n - [html2jade](https://github.com/donpark/html2jade) converter\n\n<a name=\"a2\"/>\n## Implementations\n\n - [php](http://github.com/everzet/jade.php)\n - [scala](http://scalate.fusesource.org/versions/snapshot/documentation/scaml-reference.html)\n - [ruby](http://github.com/stonean/slim)\n - [python](https://github.com/SyrusAkbary/pyjade)\n - [java](https://github.com/neuland/jade4j)\n\n<a name=\"a3\"/>\n## Installation\n\nvia npm:\n\n```bash\n$ npm install jade\n```\n\n<a name=\"a4\"/>\n## Browser Support\n\n To compile jade to a single file compatible for client-side use simply execute:\n\n```bash\n$ make jade.js\n```\n\n Alternatively, if uglifyjs is installed via npm (`npm install uglify-js`) you may execute the following which will create both files. However each release builds these for you.\n\n```bash\n$ make jade.min.js\n```\n\n By default Jade instruments templates with line number statements such as `__.lineno = 3` for debugging purposes. When used in a browser it's useful to minimize this boiler plate, you can do so by passing the option `{ compileDebug: false }`. The following template\n\n```jade\np Hello #{name}\n```\n\n Can then be as small as the following generated function:\n\n```js\nfunction anonymous(locals, attrs, escape, rethrow) {\n var buf = [];\n with (locals || {}) {\n var interp;\n buf.push('\\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\\n</p>');\n }\n return buf.join(\"\");\n}\n```\n\n Through the use of Jade's `./runtime.js` you may utilize these pre-compiled templates on the client-side _without_ Jade itself, all you need is the associated utility functions (in runtime.js), which are then available as `jade.attrs`, `jade.escape` etc. To enable this you should pass `{ client: true }` to `jade.compile()` to tell Jade to reference the helper functions\n via `jade.attrs`, `jade.escape` etc.\n\n```js\nfunction anonymous(locals, attrs, escape, rethrow) {\n var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;\n var buf = [];\n with (locals || {}) {\n var interp;\n buf.push('\\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\\n</p>');\n }\n return buf.join(\"\");\n}\n```\n\n<a name=\"a5\"/>\n## Public API\n\n```js\nvar jade = require('jade');\n\n// Compile a function\nvar fn = jade.compile('string of jade', options);\nfn(locals);\n```\n\n### Options\n\n - `self` Use a `self` namespace to hold the locals _(false by default)_\n - `locals` Local variable object\n - `filename` Used in exceptions, and required when using includes\n - `debug` Outputs tokens and function body generated\n - `compiler` Compiler to replace jade's default\n - `compileDebug` When `false` no debug instrumentation is compiled\n - `pretty` Add pretty-indentation whitespace to output _(false by default)_\n\n<a name=\"a6\"/>\n## Syntax\n\n<a name=\"a6-1\"/>\n### Line Endings\n\n**CRLF** and **CR** are converted to **LF** before parsing.\n\n<a name=\"a6-2\"/>\n### Tags\n\nA tag is simply a leading word:\n\n```jade\nhtml\n```\n\nfor example is converted to `<html></html>`\n\ntags can also have ids:\n\n```jade\ndiv#container\n```\n\nwhich would render `<div id=\"container\"></div>`\n\nhow about some classes?\n\n```jade\ndiv.user-details\n```\n\nrenders `<div class=\"user-details\"></div>`\n\nmultiple classes? _and_ an id? sure:\n\n```jade\ndiv#foo.bar.baz\n```\n\nrenders `<div id=\"foo\" class=\"bar baz\"></div>`\n\ndiv div div sure is annoying, how about:\n\n```jade\n#foo\n.bar\n```\n\nwhich is syntactic sugar for what we have already been doing, and outputs:\n\n```html\n<div id=\"foo\"></div><div class=\"bar\"></div>\n```\n\n<a name=\"a6-3\"/>\n### Tag Text\n\nSimply place some content after the tag:\n\n```jade\np wahoo!\n```\n\nrenders `<p>wahoo!</p>`.\n\nwell cool, but how about large bodies of text:\n\n```jade\np\n | foo bar baz\n | rawr rawr\n | super cool\n | go jade go\n```\n\nrenders `<p>foo bar baz rawr.....</p>`\n\ninterpolation? yup! both types of text can utilize interpolation,\nif we passed `{ name: 'tj', email: '[email protected]' }` to the compiled function we can do the following:\n\n```jade\n#user #{name} &lt;#{email}&gt;\n```\n\noutputs `<div id=\"user\">tj &lt;[email protected]&gt;</div>`\n\nActually want `#{}` for some reason? escape it!\n\n```jade\np \\#{something}\n```\n\nnow we have `<p>#{something}</p>`\n\nWe can also utilize the unescaped variant `!{html}`, so the following\nwill result in a literal script tag:\n\n```jade\n- var html = \"<script></script>\"\n| !{html}\n```\n\nNested tags that also contain text can optionally use a text block:\n\n```jade\nlabel\n | Username:\n input(name='user[name]')\n```\n\nor immediate tag text:\n\n```jade\nlabel Username:\n input(name='user[name]')\n```\n\nTags that accept _only_ text such as `script` and `style` do not\nneed the leading `|` character, for example:\n\n```jade\nhtml\n head\n title Example\n script\n if (foo) {\n bar();\n } else {\n baz();\n }\n```\n\nOnce again as an alternative, we may use a trailing `.` to indicate a text block, for example:\n\n```jade\np.\n foo asdf\n asdf\n asdfasdfaf\n asdf\n asd.\n```\n\noutputs:\n\n```html\n<p>foo asdf\nasdf\n asdfasdfaf\n asdf\nasd.\n</p>\n```\n\nThis however differs from a trailing `.` followed by a space, which although is ignored by the Jade parser, tells Jade that this period is a literal:\n\n```jade\np .\n```\n\noutputs:\n\n```html\n<p>.</p>\n```\n\nIt should be noted that text blocks should be doubled escaped. For example if you desire the following output.\n\n```html\n<p>foo\\bar</p>\n```\n\nuse:\n\n```jade\np.\n foo\\\\bar\n```\n\n<a name=\"a6-4\"/>\n### Comments\n\nSingle line comments currently look the same as JavaScript comments,\naka `//` and must be placed on their own line:\n\n```jade\n// just some paragraphs\np foo\np bar\n```\n\nwould output\n\n```html\n<!-- just some paragraphs -->\n<p>foo</p>\n<p>bar</p>\n```\n\nJade also supports unbuffered comments, by simply adding a hyphen:\n\n```jade\n//- will not output within markup\np foo\np bar\n```\n\noutputting\n\n```html\n<p>foo</p>\n<p>bar</p>\n```\n\n<a name=\"a6-5\"/>\n### Block Comments\n\n A block comment is legal as well:\n\n```jade\nbody\n //\n #content\n h1 Example\n```\n\noutputting\n\n```html\n<body>\n <!--\n <div id=\"content\">\n <h1>Example</h1>\n </div>\n -->\n</body>\n```\n\nJade supports conditional-comments as well, for example:\n\n```jade\nhead\n //if lt IE 8\n script(src='/ie-sucks.js')\n```\n\noutputs:\n\n```html\n<body>\n <!--[if lt IE 8]>\n <script src=\"/ie-sucks.js\"></script>\n <![endif]-->\n</body>\n```\n\n<a name=\"a6-6\"/>\n### Nesting\n\n Jade supports nesting to define the tags in a natural way:\n\n```jade\nul\n li.first\n a(href='#') foo\n li\n a(href='#') bar\n li.last\n a(href='#') baz\n```\n\n<a name=\"a6-7\"/>\n### Block Expansion\n\n Block expansion allows you to create terse single-line nested tags,\n the following example is equivalent to the nesting example above.\n\n```jade\nul\n li.first: a(href='#') foo\n li: a(href='#') bar\n li.last: a(href='#') baz\n```\n\n<a name=\"a6-8\"/>\n### Case\n\n The case statement takes the following form:\n\n```jade\nhtml\n body\n friends = 10\n case friends\n when 0\n p you have no friends\n when 1\n p you have a friend\n default\n p you have #{friends} friends\n```\n\n Block expansion may also be used:\n\n```jade\nfriends = 5\n\nhtml\n body\n case friends\n when 0: p you have no friends\n when 1: p you have a friend\n default: p you have #{friends} friends\n```\n\n<a name=\"a6-9\"/>\n### Attributes\n\nJade currently supports `(` and `)` as attribute delimiters.\n\n```jade\na(href='/login', title='View login page') Login\n```\n\nWhen a value is `undefined` or `null` the attribute is _not_ added,\nso this is fine, it will not compile `something=\"null\"`.\n\n```jade\ndiv(something=null)\n```\n\nBoolean attributes are also supported:\n\n```jade\ninput(type=\"checkbox\", checked)\n```\n\nBoolean attributes with code will only output the attribute when `true`:\n\n```jade\ninput(type=\"checkbox\", checked=someValue)\n```\n\nMultiple lines work too:\n\n```jade\ninput(type='checkbox',\n name='agreement',\n checked)\n```\n\nMultiple lines without the comma work fine:\n\n```jade\ninput(type='checkbox'\n name='agreement'\n checked)\n```\n\nFunky whitespace? fine:\n\n```jade\ninput(\n type='checkbox'\n name='agreement'\n checked)\n```\n\nColons work:\n\n```jade\nrss(xmlns:atom=\"atom\")\n```\n\nSuppose we have the `user` local `{ id: 12, name: 'tobi' }`\nand we wish to create an anchor tag with `href` pointing to \"/user/12\"\nwe could use regular javascript concatenation:\n\n```jade\na(href='/user/' + user.id)= user.name\n```\n\nor we could use jade's interpolation, which I added because everyone\nusing Ruby or CoffeeScript seems to think this is legal js..:\n\n```jade\na(href='/user/#{user.id}')= user.name\n```\n\nThe `class` attribute is special-cased when an array is given,\nallowing you to pass an array such as `bodyClasses = ['user', 'authenticated']` directly:\n\n```jade\nbody(class=bodyClasses)\n```\n\n<a name=\"a6-10\"/>\n### HTML\n\n Inline html is fine, we can use the pipe syntax to\n write arbitrary text, in this case some html:\n\n```jade\nhtml\n body\n | <h1>Title</h1>\n | <p>foo bar baz</p>\n```\n\n Or we can use the trailing `.` to indicate to Jade that we\n only want text in this block, allowing us to omit the pipes:\n\n```jade\nhtml\n body.\n <h1>Title</h1>\n <p>foo bar baz</p>\n```\n\n Both of these examples yield the same result:\n\n```html\n<html><body><h1>Title</h1>\n<p>foo bar baz</p>\n</body></html>\n```\n\n The same rule applies for anywhere you can have text\n in jade, raw html is fine:\n\n```jade\nhtml\n body\n h1 User <em>#{name}</em>\n```\n\n<a name=\"a6-11\"/>\n### Doctypes\n\nTo add a doctype simply use `!!!`, or `doctype` followed by an optional value:\n\n```jade\n!!!\n```\n\nor\n\n```jade\ndoctype\n```\n\nWill output the _html 5_ doctype, however:\n\n```jade\n!!! transitional\n```\n\nWill output the _transitional_ doctype.\n\nDoctypes are case-insensitive, so the following are equivalent:\n\n```jade\ndoctype Basic\ndoctype basic\n```\n\nit's also possible to simply pass a doctype literal:\n\n```jade\ndoctype html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\n```\n\nyielding:\n\n```html\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN>\n```\n\nBelow are the doctypes defined by default, which can easily be extended:\n\n```js\nvar doctypes = exports.doctypes = {\n '5': '<!DOCTYPE html>',\n 'default': '<!DOCTYPE html>',\n 'xml': '<?xml version=\"1.0\" encoding=\"utf-8\" ?>',\n 'transitional': '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">',\n 'strict': '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">',\n 'frameset': '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">',\n '1.1': '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">',\n 'basic': '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\" \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\">',\n 'mobile': '<!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.2//EN\" \"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd\">'\n};\n```\n\nTo alter the default simply change:\n\n```js\njade.doctypes.default = 'whatever you want';\n```\n\n<a name=\"a7\"/>\n## Filters\n\nFilters are prefixed with `:`, for example `:markdown` and\npass the following block of text to an arbitrary function for processing. View the _features_\nat the top of this document for available filters.\n\n```jade\nbody\n :markdown\n Woah! jade _and_ markdown, very **cool**\n we can even link to [stuff](http://google.com)\n```\n\nRenders:\n\n```html\n<body><p>Woah! jade <em>and</em> markdown, very <strong>cool</strong> we can even link to <a href=\"http://google.com\">stuff</a></p></body>\n```\n\n<a name=\"a8\"/>\n## Code\n\nJade currently supports three classifications of executable code. The first\nis prefixed by `-`, and is not buffered:\n\n```jade\n- var foo = 'bar';\n```\n\nThis can be used for conditionals, or iteration:\n\n```jade\n- for (var key in obj)\n p= obj[key]\n```\n\nDue to Jade's buffering techniques the following is valid as well:\n\n```jade\n- if (foo)\n ul\n li yay\n li foo\n li worked\n- else\n p oh no! didnt work\n```\n\nHell, even verbose iteration:\n\n```jade\n- if (items.length)\n ul\n - items.forEach(function(item){\n li= item\n - })\n```\n\nAnything you want!\n\nNext up we have _escaped_ buffered code, which is used to\nbuffer a return value, which is prefixed by `=`:\n\n```jade\n- var foo = 'bar'\n= foo\nh1= foo\n```\n\nWhich outputs `bar<h1>bar</h1>`. Code buffered by `=` is escaped\nby default for security, however to output unescaped return values\nyou may use `!=`:\n\n```jade\np!= aVarContainingMoreHTML\n```\n\n Jade also has designer-friendly variants, making the literal JavaScript\n more expressive and declarative. For example the following assignments\n are equivalent, and the expression is still regular javascript:\n\n```jade\n- var foo = 'foo ' + 'bar'\nfoo = 'foo ' + 'bar'\n```\n\n Likewise Jade has first-class `if`, `else if`, `else`, `until`, `while`, `unless` among others, however you must remember that the expressions are still regular javascript:\n\n```jade\nif foo == 'bar'\n ul\n li yay\n li foo\n li worked\nelse\n p oh no! didnt work\n```\n\n<a name=\"a9\"/>\n## Iteration\n\n Along with vanilla JavaScript Jade also supports a subset of\n constructs that allow you to create more designer-friendly templates,\n one of these constructs is `each`, taking the form:\n\n```jade\neach VAL[, KEY] in OBJ\n```\n\nAn example iterating over an array:\n\n```jade\n- var items = [\"one\", \"two\", \"three\"]\neach item in items\n li= item\n```\n\noutputs:\n\n```html\n<li>one</li>\n<li>two</li>\n<li>three</li>\n```\n\niterating an array with index:\n\n```jade\nitems = [\"one\", \"two\", \"three\"]\neach item, i in items\n li #{item}: #{i}\n```\n\noutputs:\n\n```html\n<li>one: 0</li>\n<li>two: 1</li>\n<li>three: 2</li>\n```\n\niterating an object's keys and values:\n\n```jade\nobj = { foo: 'bar' }\neach val, key in obj\n li #{key}: #{val}\n```\n\nwould output `<li>foo: bar</li>`\n\nInternally Jade converts these statements to regular\nJavaScript loops such as `users.forEach(function(user){`,\nso lexical scope and nesting applies as it would with regular\nJavaScript:\n\n```jade\neach user in users\n each role in user.roles\n li= role\n```\n\n You may also use `for` if you prefer:\n\n```jade\nfor user in users\n for role in user.roles\n li= role\n```\n\n<a name=\"a10\"/>\n## Conditionals\n\n Jade conditionals are equivalent to those using the code (`-`) prefix,\n however allow you to ditch parenthesis to become more designer friendly,\n however keep in mind the expression given is _regular_ JavaScript:\n\n```jade\nfor user in users\n if user.role == 'admin'\n p #{user.name} is an admin\n else\n p= user.name\n```\n\n is equivalent to the following using vanilla JavaScript literals:\n\n```jade\nfor user in users\n - if (user.role == 'admin')\n p #{user.name} is an admin\n - else\n p= user.name\n```\n\n Jade also provides have `unless` which is equivalent to `if (!(expr))`:\n\n```jade\nfor user in users\n unless user.isAnonymous\n p\n | Click to view\n a(href='/users/' + user.id)= user.name\n```\n\n<a name=\"a11\"/>\n## Template inheritance\n\n Jade supports template inheritance via the `block` and `extends` keywords. A block is simply a \"block\" of Jade that may be replaced within a child template, this process is recursive. To activate template inheritance in Express 2.x you must add: `app.set('view options', { layout: false });`.\n\n Jade blocks can provide default content if desired, however optional as shown below by `block scripts`, `block content`, and `block foot`.\n\n```jade\nhtml\n head\n h1 My Site - #{title}\n block scripts\n script(src='/jquery.js')\n body\n block content\n block foot\n #footer\n p some footer content\n```\n\n Now to extend the layout, simply create a new file and use the `extends` directive as shown below, giving the path (with or without the .jade extension). You may now define one or more blocks that will override the parent block content, note that here the `foot` block is _not_ redefined and will output \"some footer content\".\n\n```jade\nextends layout\n\nblock scripts\n script(src='/jquery.js')\n script(src='/pets.js')\n\nblock content\n h1= title\n each pet in pets\n include pet\n```\n\n It's also possible to override a block to provide additional blocks, as shown in the following example where `content` now exposes a `sidebar` and `primary` block for overriding, or the child template could override `content` all together.\n\n```jade\nextends regular-layout\n\nblock content\n .sidebar\n block sidebar\n p nothing\n .primary\n block primary\n p nothing\n```\n\n<a name=\"a12\"/>\n## Block append / prepend\n\n Jade allows you to _replace_ (default), _prepend_, or _append_ blocks. Suppose for example you have default scripts in a \"head\" block that you wish to utilize on _every_ page, you might do this:\n\n```jade\nhtml\n head\n block head\n script(src='/vendor/jquery.js')\n script(src='/vendor/caustic.js')\n body\n block content\n```\n\n Now suppose you have a page of your application for a JavaScript game, you want some game related scripts as well as these defaults, you can simply `append` the block:\n\n```jade\nextends layout\n\nblock append head\n script(src='/vendor/three.js')\n script(src='/game.js')\n```\n\n When using `block append` or `block prepend` the `block` is optional:\n\n```jade\nextends layout\n\nappend head\n script(src='/vendor/three.js')\n script(src='/game.js')\n```\n\n<a name=\"a13\"/>\n## Includes\n\n Includes allow you to statically include chunks of Jade,\n or other content like css, or html which lives in separate files. The classical example is including a header and footer. Suppose we have the following directory structure:\n\n ./layout.jade\n ./includes/\n ./head.jade\n ./foot.jade\n\nand the following _layout.jade_:\n\n```jade\nhtml\n include includes/head\n body\n h1 My Site\n p Welcome to my super amazing site.\n include includes/foot\n```\n\nboth includes _includes/head_ and _includes/foot_ are\nread relative to the `filename` option given to _layout.jade_,\nwhich should be an absolute path to this file, however Express does this for you. Include then parses these files, and injects the AST produced to render what you would expect:\n\n```html\n<html>\n <head>\n <title>My Site</title>\n <script src=\"/javascripts/jquery.js\">\n </script><script src=\"/javascripts/app.js\"></script>\n </head>\n <body>\n <h1>My Site</h1>\n <p>Welcome to my super lame site.</p>\n <div id=\"footer\">\n <p>Copyright>(c) foobar</p>\n </div>\n </body>\n</html>\n```\n\n As mentioned `include` can be used to include other content\n such as html or css. By providing an extension Jade will not\n assume that the file is Jade source and will include it as\n a literal:\n\n```jade\nhtml\n body\n include content.html\n```\n\n Include directives may also accept a block, in which case the\n the given block will be appended to the _last_ block defined\n in the file. For example if `head.jade` contains:\n\n```jade\nhead\n script(src='/jquery.js')\n```\n\n We may append values by providing a block to `include head`\n as shown below, adding the two scripts.\n\n```jade\nhtml\n include head\n script(src='/foo.js')\n script(src='/bar.js')\n body\n h1 test\n```\n\n You may also `yield` within an included template, allowing you to explicitly mark where the block given to `include` will be placed. Suppose for example you wish to prepend scripts rather than append, you might do the following:\n\n```jade\nhead\n yield\n script(src='/jquery.js')\n script(src='/jquery.ui.js')\n```\n\n Since included Jade is parsed and literally merges the AST, lexically scoped variables function as if the included Jade was written right in the same file. This means `include` may be used as sort of partial, for example suppose we have `user.jade` which utilizes a `user` variable.\n\n```jade\nh1= user.name\np= user.occupation\n```\n\nWe could then simply `include user` while iterating users, and since the `user` variable is already defined within the loop the included template will have access to it.\n\n```jade\nusers = [{ name: 'Tobi', occupation: 'Ferret' }]\n\neach user in users\n .user\n include user\n```\n\nyielding:\n\n```html\n<div class=\"user\">\n <h1>Tobi</h1>\n <p>Ferret</p>\n</div>\n```\n\nIf we wanted to expose a different variable name as `user` since `user.jade` references that name, we could simply define a new variable as shown here with `user = person`:\n\n```jade\neach person in users\n .user\n user = person\n include user\n```\n\n<a name=\"a14\"/>\n## Mixins\n\n Mixins are converted to regular JavaScript functions in\n the compiled template that Jade constructs. Mixins may\n take arguments, though not required:\n\n```jade\nmixin list\n ul\n li foo\n li bar\n li baz\n```\n\n Utilizing a mixin without args looks similar, just without a block:\n\n```jade\nh2 Groceries\nmixin list\n```\n\n Mixins may take one or more arguments as well, the arguments\n are regular javascripts expressions, so for example the following:\n\n```jade\nmixin pets(pets)\n ul.pets\n - each pet in pets\n li= pet\n\nmixin profile(user)\n .user\n h2= user.name\n mixin pets(user.pets)\n```\n\n Would yield something similar to the following html:\n\n```html\n<div class=\"user\">\n <h2>tj</h2>\n <ul class=\"pets\">\n <li>tobi</li>\n <li>loki</li>\n <li>jane</li>\n <li>manny</li>\n </ul>\n</div>\n```\n\n<a name=\"a15\"/>\n## Generated Output\n\n Suppose we have the following Jade:\n\n```jade\n- var title = 'yay'\nh1.title #{title}\np Just an example\n```\n\n When the `compileDebug` option is not explicitly `false`, Jade\n will compile the function instrumented with `__.lineno = n;`, which\n in the event of an exception is passed to `rethrow()` which constructs\n a useful message relative to the initial Jade input.\n\n```js\nfunction anonymous(locals) {\n var __ = { lineno: 1, input: \"- var title = 'yay'\\nh1.title #{title}\\np Just an example\", filename: \"testing/test.js\" };\n var rethrow = jade.rethrow;\n try {\n var attrs = jade.attrs, escape = jade.escape;\n var buf = [];\n with (locals || {}) {\n var interp;\n __.lineno = 1;\n var title = 'yay'\n __.lineno = 2;\n buf.push('<h1');\n buf.push(attrs({ \"class\": ('title') }));\n buf.push('>');\n buf.push('' + escape((interp = title) == null ? '' : interp) + '');\n buf.push('</h1>');\n __.lineno = 3;\n buf.push('<p>');\n buf.push('Just an example');\n buf.push('</p>');\n }\n return buf.join(\"\");\n } catch (err) {\n rethrow(err, __.input, __.filename, __.lineno);\n }\n}\n```\n\nWhen the `compileDebug` option _is_ explicitly `false`, this instrumentation\nis stripped, which is very helpful for light-weight client-side templates. Combining Jade's options with the `./runtime.js` file in this repo allows you\nto toString() compiled templates and avoid running the entire Jade library on\nthe client, increasing performance, and decreasing the amount of JavaScript\nrequired.\n\n```js\nfunction anonymous(locals) {\n var attrs = jade.attrs, escape = jade.escape;\n var buf = [];\n with (locals || {}) {\n var interp;\n var title = 'yay'\n buf.push('<h1');\n buf.push(attrs({ \"class\": ('title') }));\n buf.push('>');\n buf.push('' + escape((interp = title) == null ? '' : interp) + '');\n buf.push('</h1>');\n buf.push('<p>');\n buf.push('Just an example');\n buf.push('</p>');\n }\n return buf.join(\"\");\n}\n```\n\n<a name=\"a16\"/>\n## Example Makefile\n\n Below is an example Makefile used to compile _pages/*.jade_\n into _pages/*.html_ files by simply executing `make`.\n\n```make\nJADE = $(shell find pages/*.jade)\nHTML = $(JADE:.jade=.html)\n\nall: $(HTML)\n\n%.html: %.jade\n jade < $< --path $< > $@\n\nclean:\n rm -f $(HTML)\n\n.PHONY: clean\n```\n\nthis can be combined with the `watch(1)` command to produce\na watcher-like behaviour:\n\n```bash\n$ watch make\n```\n\n<a name=\"a17\"/>\n## jade(1)\n\n```\n\nUsage: jade [options] [dir|file ...]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -o, --obj <str> javascript options object\n -O, --out <dir> output the compiled html to <dir>\n -p, --path <path> filename used to resolve includes\n -P, --pretty compile pretty html output\n -c, --client compile for client-side runtime.js\n -D, --no-debug compile without debugging (smaller functions)\n\nExamples:\n\n # translate jade the templates dir\n $ jade templates\n\n # create {foo,bar}.html\n $ jade {foo,bar}.jade\n\n # jade over stdio\n $ jade < my.jade > my.html\n\n # jade over stdio\n $ echo \"h1 Jade!\" | jade\n\n # foo, bar dirs rendering to /tmp\n $ jade foo bar --out /tmp\n\n```\n\n<a name=\"a18\"/>\n## Tutorials\n\n - cssdeck interactive [Jade syntax tutorial](http://cssdeck.com/labs/learning-the-jade-templating-engine-syntax)\n - cssdeck interactive [Jade logic tutorial](http://cssdeck.com/labs/jade-templating-tutorial-codecast-part-2)\n - in [Japanese](http://blog.craftgear.net/4f501e97c1347ec934000001/title/10%E5%88%86%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8Bjade%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)\n\n<a name=\"a19\"/>\n## License\n\n(The MIT License)\n\nCopyright (c) 2009-2010 TJ Holowaychuk &lt;[email protected]&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
- "_id": "[email protected]",
- "dist": {
- "shasum": "ce3ba16de56f019534d54673edc8f5ae9226cdf5"
- },
- "_from": "jade@*"
-}
diff --git a/node_modules/jade/runtime.js b/node_modules/jade/runtime.js
deleted file mode 100644
index 0f549077..00000000
--- a/node_modules/jade/runtime.js
+++ /dev/null
@@ -1,179 +0,0 @@
-
-jade = (function(exports){
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
- Array.isArray = function(arr){
- return '[object Array]' == Object.prototype.toString.call(arr);
- };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
- Object.keys = function(obj){
- var arr = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr.push(key);
- }
- }
- return arr;
- }
-}
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- ac = ac.filter(nulls);
- bc = bc.filter(nulls);
- a['class'] = ac.concat(bc).join(' ');
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
-
-function nulls(val) {
- return val != null;
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj, escaped){
- var buf = []
- , terse = obj.terse;
-
- delete obj.terse;
- var keys = Object.keys(obj)
- , len = keys.length;
-
- if (len) {
- buf.push('');
- for (var i = 0; i < len; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('boolean' == typeof val || null == val) {
- if (val) {
- terse
- ? buf.push(key)
- : buf.push(key + '="' + key + '"');
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- buf.push(key + "='" + JSON.stringify(val) + "'");
- } else if ('class' == key && Array.isArray(val)) {
- buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
- } else if (escaped && escaped[key]) {
- buf.push(key + '="' + exports.escape(val) + '"');
- } else {
- buf.push(key + '="' + val + '"');
- }
- }
- }
-
- return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
- return String(html)
- .replace(/&(?!(\w+|\#\d+);)/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno){
- if (!filename) throw err;
-
- var context = 3
- , str = require('fs').readFileSync(filename, 'utf8')
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
-
- return exports;
-
-})({});
diff --git a/node_modules/jade/runtime.min.js b/node_modules/jade/runtime.min.js
deleted file mode 100644
index 1714efb0..00000000
--- a/node_modules/jade/runtime.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a};function nulls(val){return val!=null}return exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i<len;++i){var key=keys[i],val=obj[key];"boolean"==typeof val||null==val?val&&(terse?buf.push(key):buf.push(key+'="'+key+'"')):0==key.indexOf("data")&&"string"!=typeof val?buf.push(key+"='"+JSON.stringify(val)+"'"):"class"==key&&Array.isArray(val)?buf.push(key+'="'+exports.escape(val.join(" "))+'"'):escaped&&escaped[key]?buf.push(key+'="'+exports.escape(val)+'"'):buf.push(key+'="'+val+'"')}}return buf.join(" ")},exports.escape=function escape(html){return String(html).replace(/&(?!(\w+|\#\d+);)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err},exports}({}); \ No newline at end of file