dreemgl
Version:
DreemGL is an open-source multi-screen prototyping framework for mediated environments, with a visual editor and shader styling for webGL and DALi runtimes written in JavaScript. As a toolkit for gpu-accelerated multiscreen development, DreemGL includes
183 lines (172 loc) • 1.44 MB
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CodeRay output</title>
<style type="text/css">
.CodeRay .line-numbers a {
text-decoration: inherit;
color: inherit;
}
body {
background-color: white;
padding: 0;
margin: 0;
}
.CodeRay {
background-color: hsl(0,0%,95%);
border: 1px solid silver;
color: black;
}
.CodeRay pre {
margin: 0px;
}
span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
table.CodeRay td { padding: 2px 4px; vertical-align: top; }
.CodeRay .line-numbers {
background-color: hsl(180,65%,90%);
color: gray;
text-align: right;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.CodeRay .line-numbers a {
background-color: hsl(180,65%,90%) !important;
color: gray !important;
text-decoration: none !important;
}
.CodeRay .line-numbers pre {
word-break: normal;
}
.CodeRay .line-numbers a:target { color: blue !important; }
.CodeRay .line-numbers .highlighted { color: red !important; }
.CodeRay .line-numbers .highlighted a { color: red !important; }
.CodeRay span.line-numbers { padding: 0px 4px; }
.CodeRay .line { display: block; float: left; width: 100%; }
.CodeRay .code { width: 100%; }
.CodeRay .debug { color: white !important; background: blue !important; }
.CodeRay .annotation { color:#007 }
.CodeRay .attribute-name { color:#b48 }
.CodeRay .attribute-value { color:#700 }
.CodeRay .binary { color:#549 }
.CodeRay .binary .char { color:#325 }
.CodeRay .binary .delimiter { color:#325 }
.CodeRay .char { color:#D20 }
.CodeRay .char .content { color:#D20 }
.CodeRay .char .delimiter { color:#710 }
.CodeRay .class { color:#B06; font-weight:bold }
.CodeRay .class-variable { color:#369 }
.CodeRay .color { color:#0A0 }
.CodeRay .comment { color:#777 }
.CodeRay .comment .char { color:#444 }
.CodeRay .comment .delimiter { color:#444 }
.CodeRay .constant { color:#036; font-weight:bold }
.CodeRay .decorator { color:#B0B }
.CodeRay .definition { color:#099; font-weight:bold }
.CodeRay .delimiter { color:black }
.CodeRay .directive { color:#088; font-weight:bold }
.CodeRay .docstring { color:#D42; }
.CodeRay .doctype { color:#34b }
.CodeRay .done { text-decoration: line-through; color: gray }
.CodeRay .entity { color:#800; font-weight:bold }
.CodeRay .error { color:#F00; background-color:#FAA }
.CodeRay .escape { color:#666 }
.CodeRay .exception { color:#C00; font-weight:bold }
.CodeRay .float { color:#60E }
.CodeRay .function { color:#06B; font-weight:bold }
.CodeRay .function .delimiter { color:#024; font-weight:bold }
.CodeRay .global-variable { color:#d70 }
.CodeRay .hex { color:#02b }
.CodeRay .id { color:#33D; font-weight:bold }
.CodeRay .include { color:#B44; font-weight:bold }
.CodeRay .inline { background-color: hsla(0,0%,0%,0.07); color: black }
.CodeRay .inline-delimiter { font-weight: bold; color: #666 }
.CodeRay .instance-variable { color:#33B }
.CodeRay .integer { color:#00D }
.CodeRay .imaginary { color:#f00 }
.CodeRay .important { color:#D00 }
.CodeRay .key { color: #606 }
.CodeRay .key .char { color: #60f }
.CodeRay .key .delimiter { color: #404 }
.CodeRay .keyword { color:#080; font-weight:bold }
.CodeRay .label { color:#970; font-weight:bold }
.CodeRay .local-variable { color:#950 }
.CodeRay .map .content { color:#808 }
.CodeRay .map .delimiter { color:#40A}
.CodeRay .map { background-color:hsla(200,100%,50%,0.06); }
.CodeRay .namespace { color:#707; font-weight:bold }
.CodeRay .octal { color:#40E }
.CodeRay .operator { }
.CodeRay .predefined { color:#369; font-weight:bold }
.CodeRay .predefined-constant { color:#069 }
.CodeRay .predefined-type { color:#0a8; font-weight:bold }
.CodeRay .preprocessor { color:#579 }
.CodeRay .pseudo-class { color:#00C; font-weight:bold }
.CodeRay .regexp { background-color:hsla(300,100%,50%,0.06); }
.CodeRay .regexp .content { color:#808 }
.CodeRay .regexp .delimiter { color:#404 }
.CodeRay .regexp .modifier { color:#C2C }
.CodeRay .reserved { color:#080; font-weight:bold }
.CodeRay .shell { background-color:hsla(120,100%,50%,0.06); }
.CodeRay .shell .content { color:#2B2 }
.CodeRay .shell .delimiter { color:#161 }
.CodeRay .string { background-color:hsla(0,100%,50%,0.05); }
.CodeRay .string .char { color: #b0b }
.CodeRay .string .content { color: #D20 }
.CodeRay .string .delimiter { color: #710 }
.CodeRay .string .modifier { color: #E40 }
.CodeRay .symbol { color:#A60 }
.CodeRay .symbol .content { color:#A60 }
.CodeRay .symbol .delimiter { color:#740 }
.CodeRay .tag { color:#070; font-weight:bold }
.CodeRay .type { color:#339; font-weight:bold }
.CodeRay .value { color: #088 }
.CodeRay .variable { color:#037 }
.CodeRay .insert { background: hsla(120,100%,50%,0.12) }
.CodeRay .delete { background: hsla(0,100%,50%,0.12) }
.CodeRay .change { color: #bbf; background: #007 }
.CodeRay .head { color: #f8f; background: #505 }
.CodeRay .head .filename { color: white; }
.CodeRay .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
.CodeRay .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
.CodeRay .insert .insert { color: #0c0; background:transparent; font-weight:bold }
.CodeRay .delete .delete { color: #c00; background:transparent; font-weight:bold }
.CodeRay .change .change { color: #88f }
.CodeRay .head .head { color: #f4f }
.CodeRay {
border: none;
}
</style>
</head>
<body>
<table class="CodeRay"><tr>
<td class="line-numbers"><pre><a href="#n1" name="n1">1</a>
<a href="#n2" name="n2">2</a>
<a href="#n3" name="n3">3</a>
<a href="#n4" name="n4">4</a>
<a href="#n5" name="n5">5</a>
<a href="#n6" name="n6">6</a>
<a href="#n7" name="n7">7</a>
<a href="#n8" name="n8">8</a>
<a href="#n9" name="n9">9</a>
<strong><a href="#n10" name="n10">10</a></strong>
<a href="#n11" name="n11">11</a>
<a href="#n12" name="n12">12</a>
<a href="#n13" name="n13">13</a>
<a href="#n14" name="n14">14</a>
<a href="#n15" name="n15">15</a>
<a href="#n16" name="n16">16</a>
<a href="#n17" name="n17">17</a>
<a href="#n18" name="n18">18</a>
</pre></td>
<td class="code"><pre><span class="comment">/**
* CoffeeScript Compiler v1.7.1
* http://coffeescript.org
*
* Copyright 2011, Jeremy Ashkenas
* Released under the MIT License
*/</span>
define(<span class="keyword">function</span>(require, exports, module){
<span class="keyword">var</span> <span class="function">CoffeeScript</span>=<span class="keyword">function</span>(){<span class="keyword">function</span> <span class="function">require</span>(e){<span class="keyword">return</span> require[e]}<span class="keyword">return</span> require[<span class="string"><span class="delimiter">"</span><span class="content">./helpers</span><span class="delimiter">"</span></span>]=<span class="keyword">function</span>(){<span class="keyword">var</span> e={},t={<span class="key">exports</span>:e};<span class="keyword">return</span> <span class="keyword">function</span>(){<span class="keyword">var</span> t,n,i,r,s,o,a;e.<span class="function">starts</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">return</span> t===e.substr(n,t.length)},e.<span class="function">ends</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">var</span> i;<span class="keyword">return</span> i=t.length,t===e.substr(e.length-i-(n||<span class="integer">0</span>),i)},e.repeat=<span class="function">s</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n;<span class="keyword">for</span>(n=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>;t><span class="integer">0</span>;)<span class="integer">1</span>&t&&(n+=e),t>>>=<span class="integer">1</span>,e+=e;<span class="keyword">return</span> n},e.<span class="function">compact</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t,n,i,r;<span class="keyword">for</span>(r=[],n=<span class="integer">0</span>,i=e.length;i>n;n++)t=e[n],t&&r.push(t);<span class="keyword">return</span> r},e.<span class="function">count</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n,i;<span class="keyword">if</span>(n=i=<span class="integer">0</span>,!t.length)<span class="keyword">return</span> <span class="integer">1</span>/<span class="integer">0</span>;<span class="keyword">for</span>(;i=<span class="integer">1</span>+e.indexOf(t,i);)n++;<span class="keyword">return</span> n},e.<span class="function">merge</span>=<span class="keyword">function</span>(e,t){<span class="keyword">return</span> n(n({},e),t)},n=e.<span class="function">extend</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n,i;<span class="keyword">for</span>(n <span class="keyword">in</span> t)i=t[n],e[n]=i;<span class="keyword">return</span> e},e.flatten=<span class="function">i</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t,n,r,s;<span class="keyword">for</span>(n=[],r=<span class="integer">0</span>,s=e.length;s>r;r++)t=e[r],t <span class="keyword">instanceof</span> Array?n=n.concat(i(t)):n.push(t);<span class="keyword">return</span> n},e.<span class="function">del</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n;<span class="keyword">return</span> n=e[t],<span class="keyword">delete</span> e[t],n},e.last=<span class="function">r</span>=<span class="keyword">function</span>(e,t){<span class="keyword">return</span> e[e.length-(t||<span class="integer">0</span>)-<span class="integer">1</span>]},e.some=<span class="predefined-constant">null</span>!=(a=Array.prototype.some)?<span class="function">a</span>:<span class="keyword">function</span>(e){<span class="keyword">var</span> t,n,i;<span class="keyword">for</span>(n=<span class="integer">0</span>,i=<span class="local-variable">this</span>.length;i>n;n++)<span class="keyword">if</span>(t=<span class="local-variable">this</span>[n],e(t))<span class="keyword">return</span>!<span class="integer">0</span>;<span class="keyword">return</span>!<span class="integer">1</span>},e.<span class="function">invertLiterate</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t,n,i;<span class="keyword">return</span> i=!<span class="integer">0</span>,<span class="function">n</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> n,r,s,o;<span class="keyword">for</span>(s=e.split(<span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>),o=[],n=<span class="integer">0</span>,r=s.length;r>n;n++)t=s[n],i&&<span class="regexp"><span class="delimiter">/</span><span class="content">^([ ]{4}|[ ]{0,3}</span><span class="char">\t</span><span class="content">)</span><span class="delimiter">/</span></span>.test(t)?o.push(t):(i=<span class="regexp"><span class="delimiter">/</span><span class="content">^</span><span class="char">\s</span><span class="content">*$</span><span class="delimiter">/</span></span>.test(t))?o.push(t):o.push(<span class="string"><span class="delimiter">"</span><span class="content"># </span><span class="delimiter">"</span></span>+t);<span class="keyword">return</span> o}(),n.join(<span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>)},<span class="function">t</span>=<span class="keyword">function</span>(e,t){<span class="keyword">return</span> t?{<span class="key">first_line</span>:e.first_line,<span class="key">first_column</span>:e.first_column,<span class="key">last_line</span>:t.last_line,<span class="key">last_column</span>:t.last_column}:e},e.<span class="function">addLocationDataFn</span>=<span class="keyword">function</span>(e,n){<span class="keyword">return</span> <span class="keyword">function</span>(i){<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">object</span><span class="delimiter">"</span></span>==<span class="keyword">typeof</span> i&&i.updateLocationDataIfMissing&&i.updateLocationDataIfMissing(t(e,n)),i}},e.<span class="function">locationDataToString</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t;<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">2</span><span class="delimiter">"</span></span><span class="keyword">in</span> e&&<span class="string"><span class="delimiter">"</span><span class="content">first_line</span><span class="delimiter">"</span></span><span class="keyword">in</span> e[<span class="integer">2</span>]?t=e[<span class="integer">2</span>]:<span class="string"><span class="delimiter">"</span><span class="content">first_line</span><span class="delimiter">"</span></span><span class="keyword">in</span> e&&(t=e),t?<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>+(t.first_line+<span class="integer">1</span>)+<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>+(t.first_column+<span class="integer">1</span>)+<span class="string"><span class="delimiter">"</span><span class="content">-</span><span class="delimiter">"</span></span>+(<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>+(t.last_line+<span class="integer">1</span>)+<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>+(t.last_column+<span class="integer">1</span>)):<span class="string"><span class="delimiter">"</span><span class="content">No location data</span><span class="delimiter">"</span></span>},e.<span class="function">baseFileName</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">var</span> i,r;<span class="keyword">return</span> <span class="predefined-constant">null</span>==t&&(t=!<span class="integer">1</span>),<span class="predefined-constant">null</span>==n&&(n=!<span class="integer">1</span>),r=n?<span class="regexp"><span class="delimiter">/</span><span class="char">\\</span><span class="content">|</span><span class="content">\/</span><span class="delimiter">/</span></span>:<span class="regexp"><span class="delimiter">/</span><span class="content">\/</span><span class="delimiter">/</span></span>,i=e.split(r),e=i[i.length-<span class="integer">1</span>],t&&e.indexOf(<span class="string"><span class="delimiter">"</span><span class="content">.</span><span class="delimiter">"</span></span>)>=<span class="integer">0</span>?(i=e.split(<span class="string"><span class="delimiter">"</span><span class="content">.</span><span class="delimiter">"</span></span>),i.pop(),<span class="string"><span class="delimiter">"</span><span class="content">coffee</span><span class="delimiter">"</span></span>===i[i.length-<span class="integer">1</span>]&&i.length><span class="integer">1</span>&&i.pop(),i.join(<span class="string"><span class="delimiter">"</span><span class="content">.</span><span class="delimiter">"</span></span>)):e},e.<span class="function">isCoffee</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span><span class="regexp"><span class="delimiter">/</span><span class="content">\.</span><span class="content">((lit)?coffee|coffee</span><span class="content">\.</span><span class="content">md)$</span><span class="delimiter">/</span></span>.test(e)},e.<span class="function">isLiterate</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span><span class="regexp"><span class="delimiter">/</span><span class="content">\.</span><span class="content">(litcoffee|coffee</span><span class="content">\.</span><span class="content">md)$</span><span class="delimiter">/</span></span>.test(e)},e.<span class="function">throwSyntaxError</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n;<span class="keyword">throw</span> n=<span class="keyword">new</span> SyntaxError(e),n.location=t,n.toString=o,n.stack=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>+n,n},e.<span class="function">updateSyntaxError</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">return</span> e.toString===o&&(e.code||(e.code=t),e.filename||(e.filename=n),e.stack=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>+e),e},<span class="function">o</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t,n,i,r,o,a,c,h,l,u,p,d;<span class="keyword">return</span> <span class="local-variable">this</span>.code&&<span class="local-variable">this</span>.location?(p=<span class="local-variable">this</span>.location,a=p.first_line,o=p.first_column,h=p.last_line,c=p.last_column,<span class="predefined-constant">null</span>==h&&(h=a),<span class="predefined-constant">null</span>==c&&(c=o),r=<span class="local-variable">this</span>.filename||<span class="string"><span class="delimiter">"</span><span class="content">[stdin]</span><span class="delimiter">"</span></span>,e=<span class="local-variable">this</span>.code.split(<span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>)[a],u=o,i=a===h?c+<span class="integer">1</span>:e.length,l=s(<span class="string"><span class="delimiter">"</span><span class="content"> </span><span class="delimiter">"</span></span>,u)+s(<span class="string"><span class="delimiter">"</span><span class="content">^</span><span class="delimiter">"</span></span>,i-u),<span class="string"><span class="delimiter">"</span><span class="content">undefined</span><span class="delimiter">"</span></span>!=<span class="keyword">typeof</span> process&&<span class="predefined-constant">null</span>!==process&&(n=process.stdout.isTTY&&!process.env.NODE_DISABLE_COLORS),(<span class="predefined-constant">null</span>!=(d=<span class="local-variable">this</span>.colorful)?d:n)&&(<span class="function">t</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content"> [1;31m</span><span class="delimiter">"</span></span>+e+<span class="string"><span class="delimiter">"</span><span class="content"> [0m</span><span class="delimiter">"</span></span>},e=e.slice(<span class="integer">0</span>,u)+t(e.slice(u,i))+e.slice(i),l=t(l)),<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span>+r+<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>+(a+<span class="integer">1</span>)+<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>+(o+<span class="integer">1</span>)+<span class="string"><span class="delimiter">"</span><span class="content">: error: </span><span class="delimiter">"</span></span>+<span class="local-variable">this</span>.message+<span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>+e+<span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>+l):Error.prototype.toString.call(<span class="local-variable">this</span>)},e.<span class="function">nameWhitespaceCharacter</span>=<span class="keyword">function</span>(e){<span class="keyword">switch</span>(e){<span class="keyword">case</span><span class="string"><span class="delimiter">"</span><span class="content"> </span><span class="delimiter">"</span></span>:<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">space</span><span class="delimiter">"</span></span>;<span class="keyword">case</span><span class="string"><span class="delimiter">"</span><span class="char">\n</span><span class="delimiter">"</span></span>:<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">newline</span><span class="delimiter">"</span></span>;<span class="keyword">case</span><span class="string"><span class="delimiter">"</span><span class="char">\r</span><span class="delimiter">"</span></span>:<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">carriage return</span><span class="delimiter">"</span></span>;<span class="keyword">case</span><span class="string"><span class="delimiter">"</span><span class="content"> </span><span class="delimiter">"</span></span>:<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">tab</span><span class="delimiter">"</span></span>;<span class="keyword">default</span>:<span class="keyword">return</span> e}}}.call(<span class="local-variable">this</span>),t.exports}(),require[<span class="string"><span class="delimiter">"</span><span class="content">./rewriter</span><span class="delimiter">"</span></span>]=<span class="keyword">function</span>(){<span class="keyword">var</span> e={},t={<span class="key">exports</span>:e};<span class="keyword">return</span> <span class="keyword">function</span>(){<span class="keyword">var</span> t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,b,g,k,y,v=[].indexOf||<span class="keyword">function</span>(e){<span class="keyword">for</span>(<span class="keyword">var</span> t=<span class="integer">0</span>,n=<span class="local-variable">this</span>.length;n>t;t++)<span class="keyword">if</span>(t <span class="keyword">in</span> <span class="local-variable">this</span>&&<span class="local-variable">this</span>[t]===e)<span class="keyword">return</span> t;<span class="keyword">return</span>-<span class="integer">1</span>},w=[].slice;<span class="keyword">for</span>(<span class="function">f</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">var</span> i;<span class="keyword">return</span> i=[e,t],i.generated=!<span class="integer">0</span>,n&&(i.origin=n),i},e.<span class="function">Rewriter</span>=<span class="keyword">function</span>(){<span class="keyword">function</span> <span class="function">e</span>(){}<span class="keyword">return</span> e.prototype.<span class="function">rewrite</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span> <span class="local-variable">this</span>.tokens=e,<span class="local-variable">this</span>.removeLeadingNewlines(),<span class="local-variable">this</span>.closeOpenCalls(),<span class="local-variable">this</span>.closeOpenIndexes(),<span class="local-variable">this</span>.normalizeLines(),<span class="local-variable">this</span>.tagPostfixConditionals(),<span class="local-variable">this</span>.addImplicitBracesAndParens(),<span class="local-variable">this</span>.addLocationDataToGeneratedTokens(),<span class="local-variable">this</span>.tokens},e.prototype.<span class="function">scanTokens</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t,n,i;<span class="keyword">for</span>(i=<span class="local-variable">this</span>.tokens,t=<span class="integer">0</span>;n=i[t];)t+=e.call(<span class="local-variable">this</span>,n,t,i);<span class="keyword">return</span>!<span class="integer">0</span>},e.prototype.<span class="function">detectEnd</span>=<span class="keyword">function</span>(e,t,n){<span class="keyword">var</span> i,o,a,c,h;<span class="keyword">for</span>(a=<span class="local-variable">this</span>.tokens,i=<span class="integer">0</span>;o=a[e];){<span class="keyword">if</span>(<span class="integer">0</span>===i&&t.call(<span class="local-variable">this</span>,o,e))<span class="keyword">return</span> n.call(<span class="local-variable">this</span>,o,e);<span class="keyword">if</span>(!o||<span class="integer">0</span>>i)<span class="keyword">return</span> n.call(<span class="local-variable">this</span>,o,e-<span class="integer">1</span>);c=o[<span class="integer">0</span>],v.call(s,c)>=<span class="integer">0</span>?i+=<span class="integer">1</span>:(h=o[<span class="integer">0</span>],v.call(r,h)>=<span class="integer">0</span>&&(i-=<span class="integer">1</span>)),e+=<span class="integer">1</span>}<span class="keyword">return</span> e-<span class="integer">1</span>},e.prototype.<span class="function">removeLeadingNewlines</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t,n,i,r;<span class="keyword">for</span>(r=<span class="local-variable">this</span>.tokens,e=n=<span class="integer">0</span>,i=r.length;i>n&&(t=r[e][<span class="integer">0</span>],<span class="string"><span class="delimiter">"</span><span class="content">TERMINATOR</span><span class="delimiter">"</span></span>===t);e=++n);<span class="keyword">return</span> e?<span class="local-variable">this</span>.tokens.splice(<span class="integer">0</span>,e):<span class="keyword">void</span> <span class="integer">0</span>},e.prototype.<span class="function">closeOpenCalls</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t;<span class="keyword">return</span> <span class="function">t</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n;<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">)</span><span class="delimiter">"</span></span>===(n=e[<span class="integer">0</span>])||<span class="string"><span class="delimiter">"</span><span class="content">CALL_END</span><span class="delimiter">"</span></span>===n||<span class="string"><span class="delimiter">"</span><span class="content">OUTDENT</span><span class="delimiter">"</span></span>===e[<span class="integer">0</span>]&&<span class="string"><span class="delimiter">"</span><span class="content">)</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(t-<span class="integer">1</span>)},<span class="function">e</span>=<span class="keyword">function</span>(e,t){<span class="keyword">return</span> <span class="local-variable">this</span>.tokens[<span class="string"><span class="delimiter">"</span><span class="content">OUTDENT</span><span class="delimiter">"</span></span>===e[<span class="integer">0</span>]?t-<span class="integer">1</span>:t][<span class="integer">0</span>]=<span class="string"><span class="delimiter">"</span><span class="content">CALL_END</span><span class="delimiter">"</span></span>},<span class="local-variable">this</span>.scanTokens(<span class="keyword">function</span>(n,i){<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">CALL_START</span><span class="delimiter">"</span></span>===n[<span class="integer">0</span>]&&<span class="local-variable">this</span>.detectEnd(i+<span class="integer">1</span>,t,e),<span class="integer">1</span>})},e.prototype.<span class="function">closeOpenIndexes</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t;<span class="keyword">return</span> <span class="function">t</span>=<span class="keyword">function</span>(e){<span class="keyword">var</span> t;<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">]</span><span class="delimiter">"</span></span>===(t=e[<span class="integer">0</span>])||<span class="string"><span class="delimiter">"</span><span class="content">INDEX_END</span><span class="delimiter">"</span></span>===t},<span class="function">e</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span> e[<span class="integer">0</span>]=<span class="string"><span class="delimiter">"</span><span class="content">INDEX_END</span><span class="delimiter">"</span></span>},<span class="local-variable">this</span>.scanTokens(<span class="keyword">function</span>(n,i){<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">INDEX_START</span><span class="delimiter">"</span></span>===n[<span class="integer">0</span>]&&<span class="local-variable">this</span>.detectEnd(i+<span class="integer">1</span>,t,e),<span class="integer">1</span>})},e.prototype.<span class="function">matchTags</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t,n,i,r,s,o;<span class="keyword">for</span>(t=<span class="local-variable">arguments</span>[<span class="integer">0</span>],i=<span class="local-variable">arguments</span>.length>=<span class="integer">2</span>?w.call(<span class="local-variable">arguments</span>,<span class="integer">1</span>):[],e=<span class="integer">0</span>,n=r=<span class="integer">0</span>,s=i.length;s>=<span class="integer">0</span>?s>r:r>s;n=s>=<span class="integer">0</span>?++r:--r){<span class="keyword">for</span>(;<span class="string"><span class="delimiter">"</span><span class="content">HERECOMMENT</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(t+n+e);)e+=<span class="integer">2</span>;<span class="keyword">if</span>(<span class="predefined-constant">null</span>!=i[n]&&(<span class="string"><span class="delimiter">"</span><span class="content">string</span><span class="delimiter">"</span></span>==<span class="keyword">typeof</span> i[n]&&(i[n]=[i[n]]),o=<span class="local-variable">this</span>.tag(t+n+e),<span class="integer">0</span>>v.call(i[n],o)))<span class="keyword">return</span>!<span class="integer">1</span>}<span class="keyword">return</span>!<span class="integer">0</span>},e.prototype.<span class="function">looksObjectish</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span> <span class="local-variable">this</span>.matchTags(e,<span class="string"><span class="delimiter">"</span><span class="content">@</span><span class="delimiter">"</span></span>,<span class="predefined-constant">null</span>,<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>)||<span class="local-variable">this</span>.matchTags(e,<span class="predefined-constant">null</span>,<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>)},e.prototype.<span class="function">findTagsBackwards</span>=<span class="keyword">function</span>(e,t){<span class="keyword">var</span> n,i,o,a,c,h,l;<span class="keyword">for</span>(n=[];e>=<span class="integer">0</span>&&(n.length||(a=<span class="local-variable">this</span>.tag(e),<span class="integer">0</span>>v.call(t,a)&&(c=<span class="local-variable">this</span>.tag(e),<span class="integer">0</span>>v.call(s,c)||<span class="local-variable">this</span>.tokens[e].generated)&&(h=<span class="local-variable">this</span>.tag(e),<span class="integer">0</span>>v.call(u,h))));)i=<span class="local-variable">this</span>.tag(e),v.call(r,i)>=<span class="integer">0</span>&&n.push(<span class="local-variable">this</span>.tag(e)),o=<span class="local-variable">this</span>.tag(e),v.call(s,o)>=<span class="integer">0</span>&&n.length&&n.pop(),e-=<span class="integer">1</span>;<span class="keyword">return</span> l=<span class="local-variable">this</span>.tag(e),v.call(t,l)>=<span class="integer">0</span>},e.prototype.<span class="function">addImplicitBracesAndParens</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e;<span class="keyword">return</span> e=[],<span class="local-variable">this</span>.scanTokens(<span class="keyword">function</span>(t,i,l){<span class="keyword">var</span> p,d,m,b,g,k,y,w,T,F,L,C,N,E,x,D,S,R,A,I,_,<span class="predefined">$</span>,O,j,M,B,V,P;<span class="keyword">if</span>(<span class="predefined">$</span>=t[<span class="integer">0</span>],L=(C=i><span class="integer">0</span>?l[i-<span class="integer">1</span>]:[])[<span class="integer">0</span>],T=(l.length-<span class="integer">1</span>>i?l[i+<span class="integer">1</span>]:[])[<span class="integer">0</span>],<span class="function">S</span>=<span class="keyword">function</span>(){<span class="keyword">return</span> e[e.length-<span class="integer">1</span>]},R=i,<span class="function">m</span>=<span class="keyword">function</span>(e){<span class="keyword">return</span> i-R+e},<span class="function">b</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e,t;<span class="keyword">return</span> <span class="predefined-constant">null</span>!=(e=S())?<span class="predefined-constant">null</span>!=(t=e[<span class="integer">2</span>])?t.ours:<span class="keyword">void</span> <span class="integer">0</span>:<span class="keyword">void</span> <span class="integer">0</span>},<span class="function">g</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e;<span class="keyword">return</span> b()&&<span class="string"><span class="delimiter">"</span><span class="content">(</span><span class="delimiter">"</span></span>===(<span class="predefined-constant">null</span>!=(e=S())?e[<span class="integer">0</span>]:<span class="keyword">void</span> <span class="integer">0</span>)},<span class="function">y</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e;<span class="keyword">return</span> b()&&<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>===(<span class="predefined-constant">null</span>!=(e=S())?e[<span class="integer">0</span>]:<span class="keyword">void</span> <span class="integer">0</span>)},<span class="function">k</span>=<span class="keyword">function</span>(){<span class="keyword">var</span> e;<span class="keyword">return</span> b&&<span class="string"><span class="delimiter">"</span><span class="content">CONTROL</span><span class="delimiter">"</span></span>===(<span class="predefined-constant">null</span>!=(e=S())?e[<span class="integer">0</span>]:<span class="keyword">void</span> <span class="integer">0</span>)},<span class="function">A</span>=<span class="keyword">function</span>(t){<span class="keyword">var</span> n;<span class="keyword">return</span> n=<span class="predefined-constant">null</span>!=t?t:i,e.push([<span class="string"><span class="delimiter">"</span><span class="content">(</span><span class="delimiter">"</span></span>,n,{<span class="key">ours</span>:!<span class="integer">0</span>}]),l.splice(n,<span class="integer">0</span>,f(<span class="string"><span class="delimiter">"</span><span class="content">CALL_START</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">(</span><span class="delimiter">"</span></span>)),<span class="predefined-constant">null</span>==t?i+=<span class="integer">1</span>:<span class="keyword">void</span> <span class="integer">0</span>},<span class="function">p</span>=<span class="keyword">function</span>(){<span class="keyword">return</span> e.pop(),l.splice(i,<span class="integer">0</span>,f(<span class="string"><span class="delimiter">"</span><span class="content">CALL_END</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">)</span><span class="delimiter">"</span></span>)),i+=<span class="integer">1</span>},<span class="function">I</span>=<span class="keyword">function</span>(n,r){<span class="keyword">var</span> s;<span class="keyword">return</span> <span class="predefined-constant">null</span>==r&&(r=!<span class="integer">0</span>),s=<span class="predefined-constant">null</span>!=n?n:i,e.push([<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>,s,{<span class="key">sameLine</span>:!<span class="integer">0</span>,<span class="key">startsLine</span>:r,<span class="key">ours</span>:!<span class="integer">0</span>}]),l.splice(s,<span class="integer">0</span>,f(<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>,f(<span class="keyword">new</span> String(<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>)),t)),<span class="predefined-constant">null</span>==n?i+=<span class="integer">1</span>:<span class="keyword">void</span> <span class="integer">0</span>},<span class="function">d</span>=<span class="keyword">function</span>(n){<span class="keyword">return</span> n=<span class="predefined-constant">null</span>!=n?n:i,e.pop(),l.splice(n,<span class="integer">0</span>,f(<span class="string"><span class="delimiter">"</span><span class="content">}</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">}</span><span class="delimiter">"</span></span>,t)),i+=<span class="integer">1</span>},g()&&(<span class="string"><span class="delimiter">"</span><span class="content">IF</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">TRY</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">FINALLY</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">CATCH</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">CLASS</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">SWITCH</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>))<span class="keyword">return</span> e.push([<span class="string"><span class="delimiter">"</span><span class="content">CONTROL</span><span class="delimiter">"</span></span>,i,{<span class="key">ours</span>:!<span class="integer">0</span>}]),m(<span class="integer">1</span>);<span class="keyword">if</span>(<span class="string"><span class="delimiter">"</span><span class="content">INDENT</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>&&b()){<span class="keyword">if</span>(<span class="string"><span class="delimiter">"</span><span class="content">=></span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">-></span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">[</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">(</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">,</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">TRY</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">ELSE</span><span class="delimiter">"</span></span>!==L&&<span class="string"><span class="delimiter">"</span><span class="content">=</span><span class="delimiter">"</span></span>!==L)<span class="keyword">for</span>(;g();)p();<span class="keyword">return</span> k()&&e.pop(),e.push([<span class="predefined">$</span>,i]),m(<span class="integer">1</span>)}<span class="keyword">if</span>(v.call(s,<span class="predefined">$</span>)>=<span class="integer">0</span>)<span class="keyword">return</span> e.push([<span class="predefined">$</span>,i]),m(<span class="integer">1</span>);<span class="keyword">if</span>(v.call(r,<span class="predefined">$</span>)>=<span class="integer">0</span>){<span class="keyword">for</span>(;b();)g()?p():y()?d():e.pop();e.pop()}<span class="keyword">if</span>((v.call(c,<span class="predefined">$</span>)>=<span class="integer">0</span>&&t.spaced&&!t.stringEnd||<span class="string"><span class="delimiter">"</span><span class="content">?</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>&&i><span class="integer">0</span>&&!l[i-<span class="integer">1</span>].spaced)&&(v.call(o,T)>=<span class="integer">0</span>||v.call(h,T)>=<span class="integer">0</span>&&!(<span class="predefined-constant">null</span>!=(O=l[i+<span class="integer">1</span>])?O.spaced:<span class="keyword">void</span> <span class="integer">0</span>)&&!(<span class="predefined-constant">null</span>!=(j=l[i+<span class="integer">1</span>])?j.newLine:<span class="keyword">void</span> <span class="integer">0</span>)))<span class="keyword">return</span><span class="string"><span class="delimiter">"</span><span class="content">?</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>&&(<span class="predefined">$</span>=t[<span class="integer">0</span>]=<span class="string"><span class="delimiter">"</span><span class="content">FUNC_EXIST</span><span class="delimiter">"</span></span>),A(i+<span class="integer">1</span>),m(<span class="integer">2</span>);<span class="keyword">if</span>(v.call(c,<span class="predefined">$</span>)>=<span class="integer">0</span>&&<span class="local-variable">this</span>.matchTags(i+<span class="integer">1</span>,<span class="string"><span class="delimiter">"</span><span class="content">INDENT</span><span class="delimiter">"</span></span>,<span class="predefined-constant">null</span>,<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>)&&!<span class="local-variable">this</span>.findTagsBackwards(i,[<span class="string"><span class="delimiter">"</span><span class="content">CLASS</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">EXTENDS</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">IF</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">CATCH</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">SWITCH</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">LEADING_WHEN</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">FOR</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">WHILE</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">UNTIL</span><span class="delimiter">"</span></span>]))<span class="keyword">return</span> A(i+<span class="integer">1</span>),e.push([<span class="string"><span class="delimiter">"</span><span class="content">INDENT</span><span class="delimiter">"</span></span>,i+<span class="integer">2</span>]),m(<span class="integer">3</span>);<span class="keyword">if</span>(<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>===<span class="predefined">$</span>){<span class="keyword">for</span>(N=<span class="string"><span class="delimiter">"</span><span class="content">@</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(i-<span class="integer">2</span>)?i-<span class="integer">2</span>:i-<span class="integer">1</span>;<span class="string"><span class="delimiter">"</span><span class="content">HERECOMMENT</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(N-<span class="integer">2</span>);)N-=<span class="integer">2</span>;<span class="keyword">return</span> <span class="local-variable">this</span>.insideForDeclaration=<span class="string"><span class="delimiter">"</span><span class="content">FOR</span><span class="delimiter">"</span></span>===T,_=<span class="integer">0</span>===N||(M=<span class="local-variable">this</span>.tag(N-<span class="integer">1</span>),v.call(u,M)>=<span class="integer">0</span>)||l[N-<span class="integer">1</span>].newLine,S()&&(B=S(),D=B[<span class="integer">0</span>],x=B[<span class="integer">1</span>],(<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>===D||<span class="string"><span class="delimiter">"</span><span class="content">INDENT</span><span class="delimiter">"</span></span>===D&&<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(x-<span class="integer">1</span>))&&(_||<span class="string"><span class="delimiter">"</span><span class="content">,</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(N-<span class="integer">1</span>)||<span class="string"><span class="delimiter">"</span><span class="content">{</span><span class="delimiter">"</span></span>===<span class="local-variable">this</span>.tag(N-<span class="integer">1</span>)))?m(<span class="integer">1</span>):(I(N,!!_),m(<span class="integer">2</span>))}<span class="keyword">if</span>(y()&&v.call(u,<span class="predefined">$</span>)>=<span class="integer">0</span>&&(S()[<span class="integer">2</span>].sameLine=!<span class="integer">1</span>),w=<span class="string"><span class="delimiter">"</span><span class="content">OUTDENT</span><span class="delimiter">"</span></span>===L||C.newLine,v.call(a,<span class="predefined">$</span>)>=<span class="integer">0</span>||v.call(n,<span class="predefined">$</span>)>=<span class="integer">0</span>&&w)<span class="keyword">for</span>(;b();)<span class="keyword">if</span>(V=S(),D=V[<span class="integer">0</span>],x=V[<span class="integer">1</span>],P=V[<span class="integer">2</span>],E=P.sameLine,_=P.startsLine,g()&&<span class="string"><span class="delimiter">"</span><span class="content">,</span><span class="delimiter">"</span></span>!==L)p();<span class="keyword">else</span> <span class="keyword">if</span>(y()&&!<span class="local-variable">this</span>.insideForDeclaration&&E&&<span class="string"><span class="delimiter">"</span><span class="content">TERMINATOR</span><span class="delimiter">"</span></span>!==<span class="predefined">$</span>&&<span class="string"><span class="delimiter">"</span><span class="content">:</span><span class="delimiter">"</span></span>!==L&&d());<span class="keyword">else</span>{<span class="keyword">if</span>(!y()||<span class="string"><span class="delimiter">"</span><span class="content">TERMINATOR</span><span class="delimiter">"</span></span>!==<span class="predefined">$</span>||<span class="string"><span class="delimiter">"</span><span class="content">,</span><span class="delimiter">"</span></span>===L||_&&<span class="local-variable">this</span>.looksObjectish(i+<span class="integer">1</span>))<span class="keyword">break</span>;d()}<span class="keyword">if</span>(!(<span class="string"><span class="delimiter">"</span><span class="content">,</span><span class="delimiter">"</span></span>!==<span class="predefined">$</span>||<span class="local-variable">this</span>.looksObjectish(i+<span class="integer">1</span>)||!y()||<span class="local-variable">this</