: that is not followed by a space (@ForbesLindesay)compileClientWithDependenciesTracked (@ForbesLindesay)case blocks (@ForbesLindesay)cache and parser options (@TimothyGu)--watch sometimes dying when there were file-system errors (@ForbesLindesay)--watch by using fs.watchFile correctly (@TimothyGu)--extension to CLI(@nicocedron and @TimothyGu)- as the default filename when using stdin on CLI (@TimothyGu)string.trimLeft() (@ForbesLindesay)lexer is given as an option (@TimothyGu)globals option from the with module (@sokra)+ when calling a mixin (@char101)options.globals option (@ForbesLindesay)node.clone, block.replace, attrs.removeAttribute, attrs.getAttribute - these are all internal APIs for the AST (@ForbesLindesay)when without case and else without if (@ForbesLindesay)if/else etc. to not have a block.&attributes but no other attributes and a block that was supposed to be fixed in 1.1.4 (@ForbesLindesay)&attributes but no other attributes and a block (@ForbesLindesay)&attributes with false null or undefined but combined with dynamic attributes (@ForbesLindesay)&attributes is combined with static attributes that evaluate to false or null or undefined (@ForbesLindesay)&attributes is combined with dynamic attributes (@ForbesLindesay)// rather than treating them as comments (@ForbesLindesay). work as expected (@ForbesLindesay)!!! shortcut for doctype (@ForbesLindesay)5 shorcut for html doctype (@ForbesLindesay)colons option from the distant past (@ForbesLindesay)compileClient and compileFileClient to replace the client option (@ForbesLindesay)node.type instead of node.constructor.name so it can be minified (@ForbesLindesay)attributes magic attribute with &attributes(attributes) (@ForbesLindesay)compileDebug set explicitly to true)pug.version and fix pug --versionwith for a massive performance upgrade at compile timelocals variable being undefinedscript and style tagswith at compile time using lexical-scopeoptions.parser that behaves exactly like options.compilerhasOwnProperty check in each loops$ sign in each loop variable names, (was sometimes incorrect)---objeach else support. Closes #716attrs() escape bug [caseywebdev]block doesn't consume blockquotes tag [chowey]block statementman pug after installation for docs)-D, --no-debug to pug(1)-p, --pretty to pug(1)-c, --client option to pug(1)-o { client: true } with stdinextend -> extends. Closes #527 [guillermo].filename to filters only:stylus import capabilities, pass .filenameyield for block includes__ var with __pug [chrisleishman]append / prepend support. Closes #355Object.keys() failover bugelse bug when compileDebug: falseinclude block support. Closes #303block and extends. Closes #242pug.render(str[,options], fn) backwhile supportArray.isArray() polyfill. Closes #345Object.keys() polyfill typo. Closes #331include error contextres.render() removalclient option to reference runtime helpersArray.isArray() for runtime.js as wellObject.keys() for the client-side runtimeif, unless, else and else if supporteach / for supportmake benchmark for continuous-benchinline option, SS helpers are no longer inlined eitherParser#debug()pug.render() and pug.renderFile()escape() bug causing window.escape to be usedinclude support for non-pug filescolons option for everyone stuck with ":". Closes #231compileDebug option to enable lineno instrumentationinline option to disable inlining of helpers (for client-side)mixin supportinclude supportmake testdoctype as alias of !!!self object to avoid poor with(){} performance [masylum]doctype option [Jeremy Larkin]Object.keys() [reported by robholland]Object.keys() for the client-sidehtml doctype, same as "5"pre, no longer text-onlyrss("xmlns:atom"="atom")support/compile.js to exclude browser js in node<tag>[attrs]<:><block>Block#unshift(node)pug.js for the client-side to the repopug.min.js for the client-side to the repo--version${} interpolation support, use #{}.map() call due to recent changesmake pug.js and make pug.min.js.mkdirs() to pug(1)--watch, recursive compilation etc [khingebjerg]--pipe flag== null to ''. Closes #167:markdown. Closes #160:discountpre pipe-less text support (and auto-escaping)script() etc pipe-less text with attrs:javascript filter (it doesn't really do anything special, use script tags)script, textarea, etc) do not require |.:text filter for ad-hoc pipe-less:stylus filter:discount filter,, =, and : within attr value strings are valid Closes #133span.name= user.name when undefined or null will not output "undefined". Closes #130each support for Array-like objects [guillermo]!{code}. Closes #124#{code}tag()exports.compile(str, options)_ to __, since _() is commonly used for translationFixed quoted attributes issue.
Fixed attribute issue with over greedy regexp. Previously "p(foo=(((('bar')))))= ((('baz')))" would fail for example since the regexp would lookahead to far. Now we simply pair the delimiters.
Added; Text introduces newlines to mimic the grammar. Whitespace handling is a little tricky with this sort of grammar. Pug will now mimic the written grammar, meaning that text blocks using the "|" margin character will introduce a literal newline, where as immediate tag text (ex "a(href='#') Link") will not.
This may not be ideal, but it makes more sense than what Pug was previously doing.
Added Tag#text to disambiguate between immediate / block text
Removed pretty option (was kinda useless in the state it was in)
Reverted ignoring of newlines. Closes #92.
Fixed; Parser#parse() ignoring newlines
(function(){}).call(this)render()pug.renderFile() to utilize primed cacheAdded support for node-discount and markdown-js depending on which is available.
Added support for tags to have blocks and text. this kinda fucks with arbitrary whitespace unfortunately, but also fixes trailing spaces after tags with blocks.
Caching generated functions. Closes #46
- each support for readable iteration${} support for interpolation. Closes #45label("for": 'something') is allowed (although not required) [Guillermo]:less filter [jakeluer]context as synonym for scope option [Guillermo]div(style:"color: red") is now allowed( and ) within attrs: a(class: (a ? 'a' : 'b')) is now alloweda( href="#" ) is now allowed [Guillermo]