2016-01-14 20:00:40 +00:00
/ * !
* @ overview Ember - JavaScript Application Framework
* @ copyright Copyright 2011 - 2014 Tilde Inc . and contributors
* Portions Copyright 2006 - 2011 Strobe Inc .
* Portions Copyright 2008 - 2011 Apple Inc . All rights reserved .
* @ license Licensed under MIT license
* See https : //raw.github.com/emberjs/ember.js/master/LICENSE
* @ version 1.10 . 1
* /
( function ( ) {
var define , requireModule , require , requirejs , Ember ;
( function ( ) {
Ember = this . Ember = this . Ember || { } ;
if ( typeof Ember === 'undefined' ) { Ember = { } ; } ;
function UNDEFINED ( ) { }
if ( typeof Ember . _ _loader === 'undefined' ) {
var registry = { } , seen = { } ;
define = function ( name , deps , callback ) {
registry [ name ] = { deps : deps , callback : callback } ;
} ;
requirejs = require = requireModule = function ( name ) {
var s = seen [ name ] ;
if ( s !== undefined ) { return seen [ name ] ; }
if ( s === UNDEFINED ) { return undefined ; }
seen [ name ] = { } ;
if ( ! registry [ name ] ) {
throw new Error ( 'Could not find module ' + name ) ;
}
var mod = registry [ name ] ;
var deps = mod . deps ;
var callback = mod . callback ;
var reified = [ ] ;
var exports ;
var length = deps . length ;
for ( var i = 0 ; i < length ; i ++ ) {
if ( deps [ i ] === 'exports' ) {
reified . push ( exports = { } ) ;
} else {
reified . push ( requireModule ( resolve ( deps [ i ] , name ) ) ) ;
}
}
var value = length === 0 ? callback . call ( this ) : callback . apply ( this , reified ) ;
return seen [ name ] = exports || ( value === undefined ? UNDEFINED : value ) ;
} ;
function resolve ( child , name ) {
if ( child . charAt ( 0 ) !== '.' ) {
return child ;
}
var parts = child . split ( '/' ) ;
var parentBase = name . split ( '/' ) . slice ( 0 , - 1 ) ;
for ( var i = 0 , l = parts . length ; i < l ; i ++ ) {
var part = parts [ i ] ;
if ( part === '..' ) { parentBase . pop ( ) ; }
else if ( part === '.' ) { continue ; }
else { parentBase . push ( part ) ; }
}
return parentBase . join ( '/' ) ;
}
requirejs . _eak _seen = registry ;
Ember . _ _loader = {
define : define ,
require : require ,
registry : registry
} ;
} else {
define = Ember . _ _loader . define ;
requirejs = require = requireModule = Ember . _ _loader . require ;
}
} ) ( ) ;
define ( "ember-metal/core" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/*globals Ember:true,ENV,EmberENV,MetamorphENV:true */
/ * *
@ module ember
@ submodule ember - metal
* /
/ * *
All Ember methods and functions are defined inside of this namespace . You
generally should not add new properties to this namespace as it may be
overwritten by future versions of Ember .
You can also use the shorthand ` Em ` instead of ` Ember ` .
Ember - Runtime is a framework that provides core functions for Ember including
cross - platform functions , support for property observing and objects . Its
focus is on small size and performance . You can use this in place of or
along - side other cross - platform libraries such as jQuery .
The core Runtime framework is based on the jQuery API with a number of
performance optimizations .
@ class Ember
@ static
@ version 1.10 . 1
* /
if ( 'undefined' === typeof Ember ) {
// Create core object. Make it act like an instance of Ember.Namespace so that
// objects assigned to it are given a sane string representation.
Ember = { } ;
}
// Default imports, exports and lookup to the global object;
Ember . imports = Ember . imports || this ;
Ember . lookup = Ember . lookup || this ;
var exports = Ember . exports = Ember . exports || this ;
// aliases needed to keep minifiers from removing the global context
exports . Em = exports . Ember = Ember ;
// Make sure these are set whether Ember was already defined or not
Ember . isNamespace = true ;
Ember . toString = function ( ) { return "Ember" ; } ;
/ * *
@ property VERSION
@ type String
@ default '1.10.1'
@ static
* /
Ember . VERSION = '1.10.1' ;
/ * *
Standard environmental variables . You can define these in a global ` EmberENV `
variable before loading Ember to control various configuration settings .
For backwards compatibility with earlier versions of Ember the global ` ENV `
variable will be used if ` EmberENV ` is not defined .
@ property ENV
@ type Hash
* /
if ( Ember . ENV ) {
// do nothing if Ember.ENV is already setup
} else if ( 'undefined' !== typeof EmberENV ) {
Ember . ENV = EmberENV ;
} else if ( 'undefined' !== typeof ENV ) {
Ember . ENV = ENV ;
} else {
Ember . ENV = { } ;
}
Ember . config = Ember . config || { } ;
// We disable the RANGE API by default for performance reasons
if ( 'undefined' === typeof Ember . ENV . DISABLE _RANGE _API ) {
Ember . ENV . DISABLE _RANGE _API = true ;
}
if ( "undefined" === typeof MetamorphENV ) {
exports . MetamorphENV = { } ;
}
MetamorphENV . DISABLE _RANGE _API = Ember . ENV . DISABLE _RANGE _API ;
/ * *
Hash of enabled Canary features . Add to this before creating your application .
You can also define ` EmberENV.FEATURES ` if you need to enable features flagged at runtime .
@ class FEATURES
@ namespace Ember
@ static
@ since 1.1 . 0
* /
Ember . FEATURES = Ember . ENV . FEATURES || { } ;
/ * *
Test that a feature is enabled . Parsed by Ember ' s build tools to leave
experimental features out of beta / stable builds .
You can define the following configuration options :
* ` EmberENV.ENABLE_ALL_FEATURES ` - force all features to be enabled .
* ` EmberENV.ENABLE_OPTIONAL_FEATURES ` - enable any features that have not been explicitly
enabled / disabled .
@ method isEnabled
@ param { String } feature
@ return { Boolean }
@ for Ember . FEATURES
@ since 1.1 . 0
* /
Ember . FEATURES . isEnabled = function ( feature ) {
var featureValue = Ember . FEATURES [ feature ] ;
if ( Ember . ENV . ENABLE _ALL _FEATURES ) {
return true ;
} else if ( featureValue === true || featureValue === false || featureValue === undefined ) {
return featureValue ;
} else if ( Ember . ENV . ENABLE _OPTIONAL _FEATURES ) {
return true ;
} else {
return false ;
}
} ;
// ..........................................................
// BOOTSTRAP
//
/ * *
Determines whether Ember should enhance some built - in object prototypes to
provide a more friendly API . If enabled , a few methods will be added to
` Function ` , ` String ` , and ` Array ` . ` Object.prototype ` will not be enhanced ,
which is the one that causes most trouble for people .
In general we recommend leaving this option set to true since it rarely
conflicts with other code . If you need to turn it off however , you can
define an ` EmberENV.EXTEND_PROTOTYPES ` config to disable it .
@ property EXTEND _PROTOTYPES
@ type Boolean
@ default true
@ for Ember
* /
Ember . EXTEND _PROTOTYPES = Ember . ENV . EXTEND _PROTOTYPES ;
if ( typeof Ember . EXTEND _PROTOTYPES === 'undefined' ) {
Ember . EXTEND _PROTOTYPES = true ;
}
/ * *
Determines whether Ember logs a full stack trace during deprecation warnings
@ property LOG _STACKTRACE _ON _DEPRECATION
@ type Boolean
@ default true
* /
Ember . LOG _STACKTRACE _ON _DEPRECATION = ( Ember . ENV . LOG _STACKTRACE _ON _DEPRECATION !== false ) ;
/ * *
Determines whether Ember should add ECMAScript 5 Array shims to older browsers .
@ property SHIM _ES5
@ type Boolean
@ default Ember . EXTEND _PROTOTYPES
* /
Ember . SHIM _ES5 = ( Ember . ENV . SHIM _ES5 === false ) ? false : Ember . EXTEND _PROTOTYPES ;
/ * *
Determines whether Ember logs info about version of used libraries
@ property LOG _VERSION
@ type Boolean
@ default true
* /
Ember . LOG _VERSION = ( Ember . ENV . LOG _VERSION === false ) ? false : true ;
/ * *
Empty function . Useful for some operations . Always returns ` this ` .
@ method K
@ private
@ return { Object }
* /
function K ( ) { return this ; }
_ _exports _ _ . K = K ;
Ember . K = K ;
//TODO: ES6 GLOBAL TODO
// Stub out the methods defined by the ember-debug package in case it's not loaded
if ( 'undefined' === typeof Ember . assert ) { Ember . assert = K ; }
if ( 'undefined' === typeof Ember . warn ) { Ember . warn = K ; }
if ( 'undefined' === typeof Ember . debug ) { Ember . debug = K ; }
if ( 'undefined' === typeof Ember . runInDebug ) { Ember . runInDebug = K ; }
if ( 'undefined' === typeof Ember . deprecate ) { Ember . deprecate = K ; }
if ( 'undefined' === typeof Ember . deprecateFunc ) {
Ember . deprecateFunc = function ( _ , func ) { return func ; } ;
}
_ _exports _ _ [ "default" ] = Ember ;
} ) ;
define ( "ember-template-compiler" ,
[ "ember-metal/core" , "ember-template-compiler/system/precompile" , "ember-template-compiler/system/compile" , "ember-template-compiler/system/template" , "ember-template-compiler/plugins" , "ember-template-compiler/plugins/transform-each-in-to-hash" , "ember-template-compiler/plugins/transform-with-as-to-hash" , "ember-template-compiler/compat" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _dependency6 _ _ , _ _dependency7 _ _ , _ _dependency8 _ _ , _ _exports _ _ ) {
"use strict" ;
var _Ember = _ _dependency1 _ _ [ "default" ] ;
var precompile = _ _dependency2 _ _ [ "default" ] ;
var compile = _ _dependency3 _ _ [ "default" ] ;
var template = _ _dependency4 _ _ [ "default" ] ;
var registerPlugin = _ _dependency5 _ _ . registerPlugin ;
var TransformEachInToHash = _ _dependency6 _ _ [ "default" ] ;
var TransformWithAsToHash = _ _dependency7 _ _ [ "default" ] ;
// used for adding Ember.Handlebars.compile for backwards compat
registerPlugin ( 'ast' , TransformWithAsToHash ) ;
registerPlugin ( 'ast' , TransformEachInToHash ) ;
_ _exports _ _ . _Ember = _Ember ;
_ _exports _ _ . precompile = precompile ;
_ _exports _ _ . compile = compile ;
_ _exports _ _ . template = template ;
_ _exports _ _ . registerPlugin = registerPlugin ;
} ) ;
define ( "ember-template-compiler/compat" ,
[ "ember-metal/core" , "ember-template-compiler/compat/precompile" , "ember-template-compiler/system/compile" , "ember-template-compiler/system/template" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ ) {
"use strict" ;
var Ember = _ _dependency1 _ _ [ "default" ] ;
var precompile = _ _dependency2 _ _ [ "default" ] ;
var compile = _ _dependency3 _ _ [ "default" ] ;
var template = _ _dependency4 _ _ [ "default" ] ;
var EmberHandlebars = Ember . Handlebars = Ember . Handlebars || { } ;
EmberHandlebars . precompile = precompile ;
EmberHandlebars . compile = compile ;
EmberHandlebars . template = template ;
} ) ;
define ( "ember-template-compiler/compat/precompile" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
var compile , compileSpec ;
_ _exports _ _ [ "default" ] = function ( string ) {
if ( ( ! compile || ! compileSpec ) && Ember . _ _loader . registry [ 'htmlbars-compiler/compiler' ] ) {
var Compiler = requireModule ( 'htmlbars-compiler/compiler' ) ;
compile = Compiler . compile ;
compileSpec = Compiler . compileSpec ;
}
if ( ! compile || ! compileSpec ) {
throw new Error ( 'Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.' ) ;
}
var asObject = arguments [ 1 ] === undefined ? true : arguments [ 1 ] ;
var compileFunc = asObject ? compile : compileSpec ;
return compileFunc ( string ) ;
}
} ) ;
define ( "ember-template-compiler/plugins" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
/ * *
@ private
@ property helpers
* /
var plugins = {
ast : [ ]
} ;
/ * *
Adds an AST plugin to be used by Ember . HTMLBars . compile .
@ private
@ method registerASTPlugin
* /
function registerPlugin ( type , Plugin ) {
if ( ! plugins [ type ] ) {
throw new Error ( 'Attempting to register "' + Plugin + '" as "' + type + '" which is not a valid HTMLBars plugin type.' ) ;
}
plugins [ type ] . push ( Plugin ) ;
}
_ _exports _ _ . registerPlugin = registerPlugin ; _ _exports _ _ [ "default" ] = plugins ;
} ) ;
define ( "ember-template-compiler/plugins/transform-each-in-to-hash" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - htmlbars
* /
/ * *
An HTMLBars AST transformation that replaces all instances of
` ` ` handlebars
{ { # each item in items } }
{ { / e a c h } }
` ` `
with
` ` ` handlebars
{ { # each items keyword = "item" } }
{ { / e a c h } }
` ` `
@ class TransformEachInToHash
@ private
* /
function TransformEachInToHash ( ) {
// set later within HTMLBars to the syntax package
this . syntax = null ;
}
/ * *
@ private
@ method transform
@ param { AST } The AST to be transformed .
* /
TransformEachInToHash . prototype . transform = function TransformEachInToHash _transform ( ast ) {
var pluginContext = this ;
var walker = new pluginContext . syntax . Walker ( ) ;
var b = pluginContext . syntax . builders ;
walker . visit ( ast , function ( node ) {
if ( pluginContext . validate ( node ) ) {
if ( node . program && node . program . blockParams . length ) {
throw new Error ( 'You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.' ) ;
}
var removedParams = node . sexpr . params . splice ( 0 , 2 ) ;
var keyword = removedParams [ 0 ] . original ;
// TODO: This may not be necessary.
if ( ! node . sexpr . hash ) {
node . sexpr . hash = b . hash ( ) ;
}
node . sexpr . hash . pairs . push ( b . pair (
'keyword' ,
b . string ( keyword )
) ) ;
}
} ) ;
return ast ;
} ;
TransformEachInToHash . prototype . validate = function TransformEachInToHash _validate ( node ) {
return ( node . type === 'BlockStatement' || node . type === 'MustacheStatement' ) &&
node . sexpr . path . original === 'each' &&
node . sexpr . params . length === 3 &&
node . sexpr . params [ 1 ] . type === 'PathExpression' &&
node . sexpr . params [ 1 ] . original === 'in' ;
} ;
_ _exports _ _ [ "default" ] = TransformEachInToHash ;
} ) ;
define ( "ember-template-compiler/plugins/transform-with-as-to-hash" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - htmlbars
* /
/ * *
An HTMLBars AST transformation that replaces all instances of
` ` ` handlebars
{ { # with foo . bar as bar } }
{ { / w i t h } }
` ` `
with
` ` ` handlebars
{ { # with foo . bar as | bar | } }
{ { / w i t h } }
` ` `
@ private
@ class TransformWithAsToHash
* /
function TransformWithAsToHash ( ) {
// set later within HTMLBars to the syntax package
this . syntax = null ;
}
/ * *
@ private
@ method transform
@ param { AST } The AST to be transformed .
* /
TransformWithAsToHash . prototype . transform = function TransformWithAsToHash _transform ( ast ) {
var pluginContext = this ;
var walker = new pluginContext . syntax . Walker ( ) ;
walker . visit ( ast , function ( node ) {
if ( pluginContext . validate ( node ) ) {
if ( node . program && node . program . blockParams . length ) {
throw new Error ( 'You cannot use keyword (`{{with foo as bar}}`) and block params (`{{with foo as |bar|}}`) at the same time.' ) ;
}
var removedParams = node . sexpr . params . splice ( 1 , 2 ) ;
var keyword = removedParams [ 1 ] . original ;
node . program . blockParams = [ keyword ] ;
}
} ) ;
return ast ;
} ;
TransformWithAsToHash . prototype . validate = function TransformWithAsToHash _validate ( node ) {
return node . type === 'BlockStatement' &&
node . sexpr . path . original === 'with' &&
node . sexpr . params . length === 3 &&
node . sexpr . params [ 1 ] . type === 'PathExpression' &&
node . sexpr . params [ 1 ] . original === 'as' ;
} ;
_ _exports _ _ [ "default" ] = TransformWithAsToHash ;
} ) ;
define ( "ember-template-compiler/system/compile" ,
[ "ember-template-compiler/system/compile_options" , "ember-template-compiler/system/template" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
var compile ;
var compileOptions = _ _dependency1 _ _ [ "default" ] ;
var template = _ _dependency2 _ _ [ "default" ] ;
/ * *
Uses HTMLBars ` compile ` function to process a string into a compiled template .
This is not present in production builds .
@ private
@ method compile
@ param { String } templateString This is the string to be compiled by HTMLBars .
* /
_ _exports _ _ [ "default" ] = function ( templateString ) {
if ( ! compile && Ember . _ _loader . registry [ 'htmlbars-compiler/compiler' ] ) {
compile = requireModule ( 'htmlbars-compiler/compiler' ) . compile ;
}
if ( ! compile ) {
throw new Error ( 'Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.' ) ;
}
var templateSpec = compile ( templateString , compileOptions ( ) ) ;
return template ( templateSpec ) ;
}
} ) ;
define ( "ember-template-compiler/system/compile_options" ,
[ "ember-metal/core" , "ember-template-compiler/plugins" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
var Ember = _ _dependency1 _ _ [ "default" ] ;
var plugins = _ _dependency2 _ _ [ "default" ] ;
/ * *
@ private
@ property compileOptions
* /
_ _exports _ _ [ "default" ] = function ( ) {
var disableComponentGeneration = true ;
return {
disableComponentGeneration : disableComponentGeneration ,
plugins : plugins
} ;
}
} ) ;
define ( "ember-template-compiler/system/precompile" ,
[ "ember-template-compiler/system/compile_options" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
var compileOptions = _ _dependency1 _ _ [ "default" ] ;
var compileSpec ;
/ * *
Uses HTMLBars ` compile ` function to process a string into a compiled template string .
The returned string must be passed through ` Ember.HTMLBars.template ` .
This is not present in production builds .
@ private
@ method precompile
@ param { String } templateString This is the string to be compiled by HTMLBars .
* /
_ _exports _ _ [ "default" ] = function ( templateString ) {
if ( ! compileSpec && Ember . _ _loader . registry [ 'htmlbars-compiler/compiler' ] ) {
compileSpec = requireModule ( 'htmlbars-compiler/compiler' ) . compileSpec ;
}
if ( ! compileSpec ) {
throw new Error ( 'Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.' ) ;
}
return compileSpec ( templateString , compileOptions ( ) ) ;
}
} ) ;
define ( "ember-template-compiler/system/template" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/ * *
@ module ember
@ submodule ember - template - compiler
* /
/ * *
Augments the detault precompiled output of an HTMLBars template with
additional information needed by Ember .
@ private
@ method template
@ param { Function } templateSpec This is the compiled HTMLBars template spec .
* /
_ _exports _ _ [ "default" ] = function ( templateSpec ) {
templateSpec . isTop = true ;
templateSpec . isMethod = false ;
return templateSpec ;
}
} ) ;
define ( "htmlbars-compiler" ,
[ "./htmlbars-compiler/compiler" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var compile = _ _dependency1 _ _ . compile ;
var compilerSpec = _ _dependency1 _ _ . compilerSpec ;
_ _exports _ _ . compile = compile ;
_ _exports _ _ . compilerSpec = compilerSpec ;
} ) ;
define ( "htmlbars-compiler/compiler" ,
[ "../htmlbars-syntax/parser" , "./template-compiler" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
/*jshint evil:true*/
var preprocess = _ _dependency1 _ _ . preprocess ;
var TemplateCompiler = _ _dependency2 _ _ [ "default" ] ;
/ *
* Compile a string into a template rendering function
*
* Example usage :
*
* // Template is the hydration portion of the compiled template
* var template = compile ( "Howdy {{name}}" ) ;
*
* // Template accepts three arguments:
* //
* // 1. A context object
* // 2. An env object
* // 3. A contextualElement (optional, document.body is the default)
* //
* // The env object *must* have at least these two properties:
* //
* // 1. `hooks` - Basic hooks for rendering a template
* // 2. `dom` - An instance of DOMHelper
* //
* import { hooks } from 'htmlbars-runtime' ;
* import { DOMHelper } from 'morph' ;
* var context = { name : 'whatever' } ,
* env = { hooks : hooks , dom : new DOMHelper ( ) } ,
* contextualElement = document . body ;
* var domFragment = template ( context , env , contextualElement ) ;
*
* @ method compile
* @ param { String } string An htmlbars template string
* @ param { Object } options A set of options to provide to the compiler
* @ return { Function } A function for rendering the template
* /
function compile ( string , options ) {
var program = compileSpec ( string , options ) ;
return new Function ( "return " + program ) ( ) ;
}
_ _exports _ _ . compile = compile ; / *
* Compile a string into a template spec string . The template spec is a string
* representation of a template . Usually , you would use compileSpec for
* pre - compilation of a template on the server .
*
* Example usage :
*
* var templateSpec = compileSpec ( "Howdy {{name}}" ) ;
* // This next step is basically what plain compile does
* var template = new Function ( "return " + templateSpec ) ( ) ;
*
* @ method compileSpec
* @ param { String } string An htmlbars template string
* @ return { Function } A template spec string
* /
function compileSpec ( string , options ) {
var ast = preprocess ( string , options ) ;
var compiler = new TemplateCompiler ( options ) ;
var program = compiler . compile ( ast ) ;
return program ;
}
_ _exports _ _ . compileSpec = compileSpec ;
} ) ;
define ( "htmlbars-compiler/fragment-javascript-compiler" ,
[ "./utils" , "../htmlbars-util/quoting" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
var processOpcodes = _ _dependency1 _ _ . processOpcodes ;
var string = _ _dependency2 _ _ . string ;
var svgNamespace = "http://www.w3.org/2000/svg" ,
// http://www.w3.org/html/wg/drafts/html/master/syntax.html#html-integration-point
svgHTMLIntegrationPoints = { 'foreignObject' : true , 'desc' : true , 'title' : true } ;
function FragmentJavaScriptCompiler ( ) {
this . source = [ ] ;
this . depth = - 1 ;
}
_ _exports _ _ [ "default" ] = FragmentJavaScriptCompiler ;
FragmentJavaScriptCompiler . prototype . compile = function ( opcodes , options ) {
this . source . length = 0 ;
this . depth = - 1 ;
this . indent = ( options && options . indent ) || "" ;
this . namespaceFrameStack = [ { namespace : null , depth : null } ] ;
this . domNamespace = null ;
this . source . push ( 'function build(dom) {\n' ) ;
processOpcodes ( this , opcodes ) ;
this . source . push ( this . indent + '}' ) ;
return this . source . join ( '' ) ;
} ;
FragmentJavaScriptCompiler . prototype . createFragment = function ( ) {
var el = 'el' + ( ++ this . depth ) ;
this . source . push ( this . indent + ' var ' + el + ' = dom.createDocumentFragment();\n' ) ;
} ;
FragmentJavaScriptCompiler . prototype . createElement = function ( tagName ) {
var el = 'el' + ( ++ this . depth ) ;
if ( tagName === 'svg' ) {
this . pushNamespaceFrame ( { namespace : svgNamespace , depth : this . depth } ) ;
}
this . ensureNamespace ( ) ;
this . source . push ( this . indent + ' var ' + el + ' = dom.createElement(' + string ( tagName ) + ');\n' ) ;
if ( svgHTMLIntegrationPoints [ tagName ] ) {
this . pushNamespaceFrame ( { namespace : null , depth : this . depth } ) ;
}
} ;
FragmentJavaScriptCompiler . prototype . createText = function ( str ) {
var el = 'el' + ( ++ this . depth ) ;
this . source . push ( this . indent + ' var ' + el + ' = dom.createTextNode(' + string ( str ) + ');\n' ) ;
} ;
FragmentJavaScriptCompiler . prototype . createComment = function ( str ) {
var el = 'el' + ( ++ this . depth ) ;
this . source . push ( this . indent + ' var ' + el + ' = dom.createComment(' + string ( str ) + ');\n' ) ;
} ;
FragmentJavaScriptCompiler . prototype . returnNode = function ( ) {
var el = 'el' + this . depth ;
this . source . push ( this . indent + ' return ' + el + ';\n' ) ;
} ;
FragmentJavaScriptCompiler . prototype . setAttribute = function ( name , value , namespace ) {
var el = 'el' + this . depth ;
if ( namespace ) {
this . source . push ( this . indent + ' dom.setAttributeNS(' + el + ',' + string ( namespace ) + ',' + string ( name ) + ',' + string ( value ) + ');\n' ) ;
} else {
this . source . push ( this . indent + ' dom.setAttribute(' + el + ',' + string ( name ) + ',' + string ( value ) + ');\n' ) ;
}
} ;
FragmentJavaScriptCompiler . prototype . appendChild = function ( ) {
if ( this . depth === this . getCurrentNamespaceFrame ( ) . depth ) {
this . popNamespaceFrame ( ) ;
}
var child = 'el' + ( this . depth -- ) ;
var el = 'el' + this . depth ;
this . source . push ( this . indent + ' dom.appendChild(' + el + ', ' + child + ');\n' ) ;
} ;
FragmentJavaScriptCompiler . prototype . getCurrentNamespaceFrame = function ( ) {
return this . namespaceFrameStack [ this . namespaceFrameStack . length - 1 ] ;
} ;
FragmentJavaScriptCompiler . prototype . pushNamespaceFrame = function ( frame ) {
this . namespaceFrameStack . push ( frame ) ;
} ;
FragmentJavaScriptCompiler . prototype . popNamespaceFrame = function ( ) {
return this . namespaceFrameStack . pop ( ) ;
} ;
FragmentJavaScriptCompiler . prototype . ensureNamespace = function ( ) {
var correctNamespace = this . getCurrentNamespaceFrame ( ) . namespace ;
if ( this . domNamespace !== correctNamespace ) {
this . source . push ( this . indent + ' dom.setNamespace(' + ( correctNamespace ? string ( correctNamespace ) : 'null' ) + ');\n' ) ;
this . domNamespace = correctNamespace ;
}
} ;
} ) ;
define ( "htmlbars-compiler/fragment-opcode-compiler" ,
[ "./template-visitor" , "./utils" , "../htmlbars-util" , "../htmlbars-util/array-utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _exports _ _ ) {
"use strict" ;
var TemplateVisitor = _ _dependency1 _ _ [ "default" ] ;
var processOpcodes = _ _dependency2 _ _ . processOpcodes ;
var getAttrNamespace = _ _dependency3 _ _ . getAttrNamespace ;
var forEach = _ _dependency4 _ _ . forEach ;
function FragmentOpcodeCompiler ( ) {
this . opcodes = [ ] ;
}
_ _exports _ _ [ "default" ] = FragmentOpcodeCompiler ;
FragmentOpcodeCompiler . prototype . compile = function ( ast ) {
var templateVisitor = new TemplateVisitor ( ) ;
templateVisitor . visit ( ast ) ;
processOpcodes ( this , templateVisitor . actions ) ;
return this . opcodes ;
} ;
FragmentOpcodeCompiler . prototype . opcode = function ( type , params ) {
this . opcodes . push ( [ type , params ] ) ;
} ;
FragmentOpcodeCompiler . prototype . text = function ( text , childIndex , childCount , isSingleRoot ) {
this . opcode ( 'createText' , [ text . chars ] ) ;
if ( ! isSingleRoot ) { this . opcode ( 'appendChild' ) ; }
} ;
FragmentOpcodeCompiler . prototype . comment = function ( comment , childIndex , childCount , isSingleRoot ) {
this . opcode ( 'createComment' , [ comment . value ] ) ;
if ( ! isSingleRoot ) { this . opcode ( 'appendChild' ) ; }
} ;
FragmentOpcodeCompiler . prototype . openElement = function ( element ) {
this . opcode ( 'createElement' , [ element . tag ] ) ;
forEach ( element . attributes , this . attribute , this ) ;
} ;
FragmentOpcodeCompiler . prototype . closeElement = function ( element , childIndex , childCount , isSingleRoot ) {
if ( ! isSingleRoot ) { this . opcode ( 'appendChild' ) ; }
} ;
FragmentOpcodeCompiler . prototype . startProgram = function ( program ) {
this . opcodes . length = 0 ;
if ( program . body . length !== 1 ) {
this . opcode ( 'createFragment' ) ;
}
} ;
FragmentOpcodeCompiler . prototype . endProgram = function ( /* program */ ) {
this . opcode ( 'returnNode' ) ;
} ;
FragmentOpcodeCompiler . prototype . mustache = function ( ) { } ;
FragmentOpcodeCompiler . prototype . component = function ( ) { } ;
FragmentOpcodeCompiler . prototype . block = function ( ) { } ;
FragmentOpcodeCompiler . prototype . attribute = function ( attr ) {
if ( attr . value . type === 'TextNode' ) {
var namespace = getAttrNamespace ( attr . name ) ;
this . opcode ( 'setAttribute' , [ attr . name , attr . value . chars , namespace ] ) ;
}
} ;
FragmentOpcodeCompiler . prototype . setNamespace = function ( namespace ) {
this . opcode ( 'setNamespace' , [ namespace ] ) ;
} ;
} ) ;
define ( "htmlbars-compiler/hydration-javascript-compiler" ,
[ "./utils" , "../htmlbars-util/quoting" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
var processOpcodes = _ _dependency1 _ _ . processOpcodes ;
var string = _ _dependency2 _ _ . string ;
var array = _ _dependency2 _ _ . array ;
function HydrationJavaScriptCompiler ( ) {
this . stack = [ ] ;
this . source = [ ] ;
this . mustaches = [ ] ;
this . parents = [ [ 'fragment' ] ] ;
this . parentCount = 0 ;
this . morphs = [ ] ;
this . fragmentProcessing = [ ] ;
this . hooks = undefined ;
}
_ _exports _ _ [ "default" ] = HydrationJavaScriptCompiler ;
var prototype = HydrationJavaScriptCompiler . prototype ;
prototype . compile = function ( opcodes , options ) {
this . stack . length = 0 ;
this . mustaches . length = 0 ;
this . source . length = 0 ;
this . parents . length = 1 ;
this . parents [ 0 ] = [ 'fragment' ] ;
this . morphs . length = 0 ;
this . fragmentProcessing . length = 0 ;
this . parentCount = 0 ;
this . indent = ( options && options . indent ) || "" ;
this . hooks = { } ;
processOpcodes ( this , opcodes ) ;
var i , l ;
if ( this . morphs . length ) {
var morphs = "" ;
for ( i = 0 , l = this . morphs . length ; i < l ; ++ i ) {
var morph = this . morphs [ i ] ;
morphs += this . indent + ' var ' + morph [ 0 ] + ' = ' + morph [ 1 ] + ';\n' ;
}
this . source . unshift ( morphs ) ;
}
if ( this . fragmentProcessing . length ) {
var processing = "" ;
for ( i = 0 , l = this . fragmentProcessing . length ; i < l ; ++ i ) {
processing += this . indent + ' ' + this . fragmentProcessing [ i ] + '\n' ;
}
this . source . unshift ( processing ) ;
}
return this . source . join ( '' ) ;
} ;
prototype . prepareArray = function ( length ) {
var values = [ ] ;
for ( var i = 0 ; i < length ; i ++ ) {
values . push ( this . stack . pop ( ) ) ;
}
this . stack . push ( '[' + values . join ( ', ' ) + ']' ) ;
} ;
prototype . prepareObject = function ( size ) {
var pairs = [ ] ;
for ( var i = 0 ; i < size ; i ++ ) {
pairs . push ( this . stack . pop ( ) + ': ' + this . stack . pop ( ) ) ;
}
this . stack . push ( '{' + pairs . join ( ', ' ) + '}' ) ;
} ;
prototype . pushRaw = function ( value ) {
this . stack . push ( value ) ;
} ;
prototype . pushLiteral = function ( value ) {
if ( typeof value === 'string' ) {
this . stack . push ( string ( value ) ) ;
} else {
this . stack . push ( value . toString ( ) ) ;
}
} ;
prototype . pushHook = function ( name , args ) {
this . hooks [ name ] = true ;
this . stack . push ( name + '(' + args . join ( ', ' ) + ')' ) ;
} ;
prototype . pushGetHook = function ( path ) {
this . pushHook ( 'get' , [
'env' ,
'context' ,
string ( path )
] ) ;
} ;
prototype . pushSexprHook = function ( ) {
this . pushHook ( 'subexpr' , [
'env' ,
'context' ,
this . stack . pop ( ) , // path
this . stack . pop ( ) , // params
this . stack . pop ( ) // hash
] ) ;
} ;
prototype . pushConcatHook = function ( ) {
this . pushHook ( 'concat' , [
'env' ,
this . stack . pop ( ) // parts
] ) ;
} ;
prototype . printHook = function ( name , args ) {
this . hooks [ name ] = true ;
this . source . push ( this . indent + ' ' + name + '(' + args . join ( ', ' ) + ');\n' ) ;
} ;
prototype . printSetHook = function ( name , index ) {
this . printHook ( 'set' , [
'env' ,
'context' ,
string ( name ) ,
'blockArguments[' + index + ']'
] ) ;
} ;
prototype . printBlockHook = function ( morphNum , templateId , inverseId ) {
this . printHook ( 'block' , [
'env' ,
'morph' + morphNum ,
'context' ,
this . stack . pop ( ) , // path
this . stack . pop ( ) , // params
this . stack . pop ( ) , // hash
templateId === null ? 'null' : 'child' + templateId ,
inverseId === null ? 'null' : 'child' + inverseId
] ) ;
} ;
prototype . printInlineHook = function ( morphNum ) {
this . printHook ( 'inline' , [
'env' ,
'morph' + morphNum ,
'context' ,
this . stack . pop ( ) , // path
this . stack . pop ( ) , // params
this . stack . pop ( ) // hash
] ) ;
} ;
prototype . printContentHook = function ( morphNum ) {
this . printHook ( 'content' , [
'env' ,
'morph' + morphNum ,
'context' ,
this . stack . pop ( ) // path
] ) ;
} ;
prototype . printComponentHook = function ( morphNum , templateId ) {
this . printHook ( 'component' , [
'env' ,
'morph' + morphNum ,
'context' ,
this . stack . pop ( ) , // path
this . stack . pop ( ) , // attrs
templateId === null ? 'null' : 'child' + templateId
] ) ;
} ;
prototype . printAttributeHook = function ( attrMorphNum , elementNum ) {
this . printHook ( 'attribute' , [
'env' ,
'attrMorph' + attrMorphNum ,
'element' + elementNum ,
this . stack . pop ( ) , // name
this . stack . pop ( ) // value
] ) ;
} ;
prototype . printElementHook = function ( elementNum ) {
this . printHook ( 'element' , [
'env' ,
'element' + elementNum ,
'context' ,
this . stack . pop ( ) , // path
this . stack . pop ( ) , // params
this . stack . pop ( ) // hash
] ) ;
} ;
prototype . createMorph = function ( morphNum , parentPath , startIndex , endIndex , escaped ) {
var isRoot = parentPath . length === 0 ;
var parent = this . getParent ( ) ;
var morphMethod = escaped ? 'createMorphAt' : 'createUnsafeMorphAt' ;
var morph = "dom." + morphMethod + "(" + parent +
"," + ( startIndex === null ? "-1" : startIndex ) +
"," + ( endIndex === null ? "-1" : endIndex ) +
( isRoot ? ",contextualElement)" : ")" ) ;
this . morphs . push ( [ 'morph' + morphNum , morph ] ) ;
} ;
prototype . createAttrMorph = function ( attrMorphNum , elementNum , name , escaped , namespace ) {
var morphMethod = escaped ? 'createAttrMorph' : 'createUnsafeAttrMorph' ;
var morph = "dom." + morphMethod + "(element" + elementNum + ", '" + name + ( namespace ? "', '" + namespace : '' ) + "')" ;
this . morphs . push ( [ 'attrMorph' + attrMorphNum , morph ] ) ;
} ;
prototype . repairClonedNode = function ( blankChildTextNodes , isElementChecked ) {
var parent = this . getParent ( ) ,
processing = 'if (this.cachedFragment) { dom.repairClonedNode(' + parent + ',' +
array ( blankChildTextNodes ) +
( isElementChecked ? ',true' : '' ) +
'); }' ;
this . fragmentProcessing . push (
processing
) ;
} ;
prototype . shareElement = function ( elementNum ) {
var elementNodesName = "element" + elementNum ;
this . fragmentProcessing . push ( 'var ' + elementNodesName + ' = ' + this . getParent ( ) + ';' ) ;
this . parents [ this . parents . length - 1 ] = [ elementNodesName ] ;
} ;
prototype . consumeParent = function ( i ) {
var newParent = this . lastParent ( ) . slice ( ) ;
newParent . push ( i ) ;
this . parents . push ( newParent ) ;
} ;
prototype . popParent = function ( ) {
this . parents . pop ( ) ;
} ;
prototype . getParent = function ( ) {
var last = this . lastParent ( ) . slice ( ) ;
var frag = last . shift ( ) ;
if ( ! last . length ) {
return frag ;
}
return 'dom.childAt(' + frag + ', [' + last . join ( ', ' ) + '])' ;
} ;
prototype . lastParent = function ( ) {
return this . parents [ this . parents . length - 1 ] ;
} ;
} ) ;
define ( "htmlbars-compiler/hydration-opcode-compiler" ,
[ "./template-visitor" , "./utils" , "../htmlbars-util" , "../htmlbars-util/array-utils" , "../htmlbars-syntax/utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _exports _ _ ) {
"use strict" ;
var TemplateVisitor = _ _dependency1 _ _ [ "default" ] ;
var processOpcodes = _ _dependency2 _ _ . processOpcodes ;
var getAttrNamespace = _ _dependency3 _ _ . getAttrNamespace ;
var forEach = _ _dependency4 _ _ . forEach ;
var isHelper = _ _dependency5 _ _ . isHelper ;
function unwrapMustache ( mustache ) {
if ( isHelper ( mustache . sexpr ) ) {
return mustache . sexpr ;
} else {
return mustache . sexpr . path ;
}
}
function detectIsElementChecked ( element ) {
for ( var i = 0 , len = element . attributes . length ; i < len ; i ++ ) {
if ( element . attributes [ i ] . name === 'checked' ) {
return true ;
}
}
return false ;
}
function HydrationOpcodeCompiler ( ) {
this . opcodes = [ ] ;
this . paths = [ ] ;
this . templateId = 0 ;
this . currentDOMChildIndex = 0 ;
this . morphs = [ ] ;
this . morphNum = 0 ;
this . attrMorphNum = 0 ;
this . element = null ;
this . elementNum = - 1 ;
}
_ _exports _ _ [ "default" ] = HydrationOpcodeCompiler ;
HydrationOpcodeCompiler . prototype . compile = function ( ast ) {
var templateVisitor = new TemplateVisitor ( ) ;
templateVisitor . visit ( ast ) ;
processOpcodes ( this , templateVisitor . actions ) ;
return this . opcodes ;
} ;
HydrationOpcodeCompiler . prototype . accept = function ( node ) {
this [ node . type ] ( node ) ;
} ;
HydrationOpcodeCompiler . prototype . opcode = function ( type ) {
var params = [ ] . slice . call ( arguments , 1 ) ;
this . opcodes . push ( [ type , params ] ) ;
} ;
HydrationOpcodeCompiler . prototype . startProgram = function ( program , c , blankChildTextNodes ) {
this . opcodes . length = 0 ;
this . paths . length = 0 ;
this . morphs . length = 0 ;
this . templateId = 0 ;
this . currentDOMChildIndex = - 1 ;
this . morphNum = 0 ;
this . attrMorphNum = 0 ;
var blockParams = program . blockParams || [ ] ;
for ( var i = 0 ; i < blockParams . length ; i ++ ) {
this . opcode ( 'printSetHook' , blockParams [ i ] , i ) ;
}
if ( blankChildTextNodes . length > 0 ) {
this . opcode ( 'repairClonedNode' , blankChildTextNodes ) ;
}
} ;
HydrationOpcodeCompiler . prototype . endProgram = function ( /* program */ ) {
distributeMorphs ( this . morphs , this . opcodes ) ;
} ;
HydrationOpcodeCompiler . prototype . text = function ( /* string, pos, len */ ) {
++ this . currentDOMChildIndex ;
} ;
HydrationOpcodeCompiler . prototype . comment = function ( /* string, pos, len */ ) {
++ this . currentDOMChildIndex ;
} ;
HydrationOpcodeCompiler . prototype . openElement = function ( element , pos , len , isSingleRoot , mustacheCount , blankChildTextNodes ) {
distributeMorphs ( this . morphs , this . opcodes ) ;
++ this . currentDOMChildIndex ;
this . element = this . currentDOMChildIndex ;
if ( ! isSingleRoot ) {
this . opcode ( 'consumeParent' , this . currentDOMChildIndex ) ;
// If our parent reference will be used more than once, cache its reference.
if ( mustacheCount > 1 ) {
this . opcode ( 'shareElement' , ++ this . elementNum ) ;
this . element = null ; // Set element to null so we don't cache it twice
}
}
var isElementChecked = detectIsElementChecked ( element ) ;
if ( blankChildTextNodes . length > 0 || isElementChecked ) {
this . opcode ( 'repairClonedNode' ,
blankChildTextNodes ,
isElementChecked ) ;
}
this . paths . push ( this . currentDOMChildIndex ) ;
this . currentDOMChildIndex = - 1 ;
forEach ( element . attributes , this . attribute , this ) ;
forEach ( element . helpers , this . elementHelper , this ) ;
} ;
HydrationOpcodeCompiler . prototype . closeElement = function ( element , pos , len , isSingleRoot ) {
distributeMorphs ( this . morphs , this . opcodes ) ;
if ( ! isSingleRoot ) { this . opcode ( 'popParent' ) ; }
this . currentDOMChildIndex = this . paths . pop ( ) ;
} ;
HydrationOpcodeCompiler . prototype . block = function ( block , childIndex , childrenLength ) {
var sexpr = block . sexpr ;
var currentDOMChildIndex = this . currentDOMChildIndex ;
var start = ( currentDOMChildIndex < 0 ) ? null : currentDOMChildIndex ;
var end = ( childIndex === childrenLength - 1 ) ? null : currentDOMChildIndex + 1 ;
var morphNum = this . morphNum ++ ;
this . morphs . push ( [ morphNum , this . paths . slice ( ) , start , end , true ] ) ;
var templateId = this . templateId ++ ;
var inverseId = block . inverse === null ? null : this . templateId ++ ;
prepareSexpr ( this , sexpr ) ;
this . opcode ( 'printBlockHook' , morphNum , templateId , inverseId ) ;
} ;
HydrationOpcodeCompiler . prototype . component = function ( component , childIndex , childrenLength ) {
var currentDOMChildIndex = this . currentDOMChildIndex ;
var program = component . program || { } ;
var blockParams = program . blockParams || [ ] ;
var start = ( currentDOMChildIndex < 0 ? null : currentDOMChildIndex ) ,
end = ( childIndex === childrenLength - 1 ? null : currentDOMChildIndex + 1 ) ;
var morphNum = this . morphNum ++ ;
this . morphs . push ( [ morphNum , this . paths . slice ( ) , start , end , true ] ) ;
var attrs = component . attributes ;
for ( var i = attrs . length - 1 ; i >= 0 ; i -- ) {
var name = attrs [ i ] . name ;
var value = attrs [ i ] . value ;
// TODO: Introduce context specific AST nodes to avoid switching here.
if ( value . type === 'TextNode' ) {
this . opcode ( 'pushLiteral' , value . chars ) ;
} else if ( value . type === 'MustacheStatement' ) {
this . accept ( unwrapMustache ( value ) ) ;
} else if ( value . type === 'ConcatStatement' ) {
prepareParams ( this , value . parts ) ;
this . opcode ( 'pushConcatHook' ) ;
}
this . opcode ( 'pushLiteral' , name ) ;
}
this . opcode ( 'prepareObject' , attrs . length ) ;
this . opcode ( 'pushLiteral' , component . tag ) ;
this . opcode ( 'printComponentHook' , morphNum , this . templateId ++ , blockParams . length ) ;
} ;
HydrationOpcodeCompiler . prototype . attribute = function ( attr ) {
var value = attr . value ;
var escaped = true ;
var namespace = getAttrNamespace ( attr . name ) ;
// TODO: Introduce context specific AST nodes to avoid switching here.
if ( value . type === 'TextNode' ) {
return ;
} else if ( value . type === 'MustacheStatement' ) {
escaped = value . escaped ;
this . accept ( unwrapMustache ( value ) ) ;
} else if ( value . type === 'ConcatStatement' ) {
prepareParams ( this , value . parts ) ;
this . opcode ( 'pushConcatHook' ) ;
}
this . opcode ( 'pushLiteral' , attr . name ) ;
if ( this . element !== null ) {
this . opcode ( 'shareElement' , ++ this . elementNum ) ;
this . element = null ;
}
var attrMorphNum = this . attrMorphNum ++ ;
this . opcode ( 'createAttrMorph' , attrMorphNum , this . elementNum , attr . name , escaped , namespace ) ;
this . opcode ( 'printAttributeHook' , attrMorphNum , this . elementNum ) ;
} ;
HydrationOpcodeCompiler . prototype . elementHelper = function ( sexpr ) {
prepareSexpr ( this , sexpr ) ;
// If we have a helper in a node, and this element has not been cached, cache it
if ( this . element !== null ) {
this . opcode ( 'shareElement' , ++ this . elementNum ) ;
this . element = null ; // Reset element so we don't cache it more than once
}
this . opcode ( 'printElementHook' , this . elementNum ) ;
} ;
HydrationOpcodeCompiler . prototype . mustache = function ( mustache , childIndex , childrenLength ) {
var sexpr = mustache . sexpr ;
var currentDOMChildIndex = this . currentDOMChildIndex ;
var start = currentDOMChildIndex ,
end = ( childIndex === childrenLength - 1 ? - 1 : currentDOMChildIndex + 1 ) ;
var morphNum = this . morphNum ++ ;
this . morphs . push ( [ morphNum , this . paths . slice ( ) , start , end , mustache . escaped ] ) ;
if ( isHelper ( sexpr ) ) {
prepareSexpr ( this , sexpr ) ;
this . opcode ( 'printInlineHook' , morphNum ) ;
} else {
preparePath ( this , sexpr . path ) ;
this . opcode ( 'printContentHook' , morphNum ) ;
}
} ;
HydrationOpcodeCompiler . prototype . SubExpression = function ( sexpr ) {
prepareSexpr ( this , sexpr ) ;
this . opcode ( 'pushSexprHook' ) ;
} ;
HydrationOpcodeCompiler . prototype . PathExpression = function ( path ) {
this . opcode ( 'pushGetHook' , path . original ) ;
} ;
HydrationOpcodeCompiler . prototype . StringLiteral = function ( node ) {
this . opcode ( 'pushLiteral' , node . value ) ;
} ;
HydrationOpcodeCompiler . prototype . BooleanLiteral = function ( node ) {
this . opcode ( 'pushLiteral' , node . value ) ;
} ;
HydrationOpcodeCompiler . prototype . NumberLiteral = function ( node ) {
this . opcode ( 'pushLiteral' , node . value ) ;
} ;
function preparePath ( compiler , path ) {
compiler . opcode ( 'pushLiteral' , path . original ) ;
}
function prepareParams ( compiler , params ) {
for ( var i = params . length - 1 ; i >= 0 ; i -- ) {
var param = params [ i ] ;
compiler [ param . type ] ( param ) ;
}
compiler . opcode ( 'prepareArray' , params . length ) ;
}
function prepareHash ( compiler , hash ) {
var pairs = hash . pairs ;
for ( var i = pairs . length - 1 ; i >= 0 ; i -- ) {
var key = pairs [ i ] . key ;
var value = pairs [ i ] . value ;
compiler [ value . type ] ( value ) ;
compiler . opcode ( 'pushLiteral' , key ) ;
}
compiler . opcode ( 'prepareObject' , pairs . length ) ;
}
function prepareSexpr ( compiler , sexpr ) {
prepareHash ( compiler , sexpr . hash ) ;
prepareParams ( compiler , sexpr . params ) ;
preparePath ( compiler , sexpr . path ) ;
}
function distributeMorphs ( morphs , opcodes ) {
if ( morphs . length === 0 ) {
return ;
}
// Splice morphs after the most recent shareParent/consumeParent.
var o ;
for ( o = opcodes . length - 1 ; o >= 0 ; -- o ) {
var opcode = opcodes [ o ] [ 0 ] ;
if ( opcode === 'shareElement' || opcode === 'consumeParent' || opcode === 'popParent' ) {
break ;
}
}
var spliceArgs = [ o + 1 , 0 ] ;
for ( var i = 0 ; i < morphs . length ; ++ i ) {
spliceArgs . push ( [ 'createMorph' , morphs [ i ] . slice ( ) ] ) ;
}
opcodes . splice . apply ( opcodes , spliceArgs ) ;
morphs . length = 0 ;
}
} ) ;
define ( "htmlbars-compiler/template-compiler" ,
[ "./fragment-opcode-compiler" , "./fragment-javascript-compiler" , "./hydration-opcode-compiler" , "./hydration-javascript-compiler" , "./template-visitor" , "./utils" , "../htmlbars-util/quoting" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _dependency6 _ _ , _ _dependency7 _ _ , _ _exports _ _ ) {
"use strict" ;
var FragmentOpcodeCompiler = _ _dependency1 _ _ [ "default" ] ;
var FragmentJavaScriptCompiler = _ _dependency2 _ _ [ "default" ] ;
var HydrationOpcodeCompiler = _ _dependency3 _ _ [ "default" ] ;
var HydrationJavaScriptCompiler = _ _dependency4 _ _ [ "default" ] ;
var TemplateVisitor = _ _dependency5 _ _ [ "default" ] ;
var processOpcodes = _ _dependency6 _ _ . processOpcodes ;
var repeat = _ _dependency7 _ _ . repeat ;
function TemplateCompiler ( options ) {
this . options = options || { } ;
this . fragmentOpcodeCompiler = new FragmentOpcodeCompiler ( ) ;
this . fragmentCompiler = new FragmentJavaScriptCompiler ( ) ;
this . hydrationOpcodeCompiler = new HydrationOpcodeCompiler ( ) ;
this . hydrationCompiler = new HydrationJavaScriptCompiler ( ) ;
this . templates = [ ] ;
this . childTemplates = [ ] ;
}
_ _exports _ _ [ "default" ] = TemplateCompiler ;
TemplateCompiler . prototype . compile = function ( ast ) {
var templateVisitor = new TemplateVisitor ( ) ;
templateVisitor . visit ( ast ) ;
processOpcodes ( this , templateVisitor . actions ) ;
return this . templates . pop ( ) ;
} ;
TemplateCompiler . prototype . startProgram = function ( program , childTemplateCount , blankChildTextNodes ) {
this . fragmentOpcodeCompiler . startProgram ( program , childTemplateCount , blankChildTextNodes ) ;
this . hydrationOpcodeCompiler . startProgram ( program , childTemplateCount , blankChildTextNodes ) ;
this . childTemplates . length = 0 ;
while ( childTemplateCount -- ) {
this . childTemplates . push ( this . templates . pop ( ) ) ;
}
} ;
TemplateCompiler . prototype . getChildTemplateVars = function ( indent ) {
var vars = '' ;
if ( this . childTemplates ) {
for ( var i = 0 ; i < this . childTemplates . length ; i ++ ) {
vars += indent + 'var child' + i + ' = ' + this . childTemplates [ i ] + ';\n' ;
}
}
return vars ;
} ;
TemplateCompiler . prototype . getHydrationHooks = function ( indent , hooks ) {
var hookVars = [ ] ;
for ( var hook in hooks ) {
hookVars . push ( hook + ' = hooks.' + hook ) ;
}
if ( hookVars . length > 0 ) {
return indent + 'var hooks = env.hooks, ' + hookVars . join ( ', ' ) + ';\n' ;
} else {
return '' ;
}
} ;
TemplateCompiler . prototype . endProgram = function ( program , programDepth ) {
this . fragmentOpcodeCompiler . endProgram ( program ) ;
this . hydrationOpcodeCompiler . endProgram ( program ) ;
var indent = repeat ( " " , programDepth ) ;
var options = {
indent : indent + " "
} ;
// function build(dom) { return fragment; }
var fragmentProgram = this . fragmentCompiler . compile (
this . fragmentOpcodeCompiler . opcodes ,
options
) ;
// function hydrate(fragment) { return mustaches; }
var hydrationProgram = this . hydrationCompiler . compile (
this . hydrationOpcodeCompiler . opcodes ,
options
) ;
var blockParams = program . blockParams || [ ] ;
var templateSignature = 'context, env, contextualElement' ;
if ( blockParams . length > 0 ) {
templateSignature += ', blockArguments' ;
}
var template =
'(function() {\n' +
this . getChildTemplateVars ( indent + ' ' ) +
indent + ' return {\n' +
indent + ' isHTMLBars: true,\n' +
indent + ' blockParams: ' + blockParams . length + ',\n' +
indent + ' cachedFragment: null,\n' +
indent + ' hasRendered: false,\n' +
indent + ' build: ' + fragmentProgram + ',\n' +
indent + ' render: function render(' + templateSignature + ') {\n' +
indent + ' var dom = env.dom;\n' +
this . getHydrationHooks ( indent + ' ' , this . hydrationCompiler . hooks ) +
indent + ' dom.detectNamespace(contextualElement);\n' +
indent + ' var fragment;\n' +
indent + ' if (env.useFragmentCache && dom.canClone) {\n' +
indent + ' if (this.cachedFragment === null) {\n' +
indent + ' fragment = this.build(dom);\n' +
indent + ' if (this.hasRendered) {\n' +
indent + ' this.cachedFragment = fragment;\n' +
indent + ' } else {\n' +
indent + ' this.hasRendered = true;\n' +
indent + ' }\n' +
indent + ' }\n' +
indent + ' if (this.cachedFragment) {\n' +
indent + ' fragment = dom.cloneNode(this.cachedFragment, true);\n' +
indent + ' }\n' +
indent + ' } else {\n' +
indent + ' fragment = this.build(dom);\n' +
indent + ' }\n' +
hydrationProgram +
indent + ' return fragment;\n' +
indent + ' }\n' +
indent + ' };\n' +
indent + '}())' ;
this . templates . push ( template ) ;
} ;
TemplateCompiler . prototype . openElement = function ( element , i , l , r , c , b ) {
this . fragmentOpcodeCompiler . openElement ( element , i , l , r , c , b ) ;
this . hydrationOpcodeCompiler . openElement ( element , i , l , r , c , b ) ;
} ;
TemplateCompiler . prototype . closeElement = function ( element , i , l , r ) {
this . fragmentOpcodeCompiler . closeElement ( element , i , l , r ) ;
this . hydrationOpcodeCompiler . closeElement ( element , i , l , r ) ;
} ;
TemplateCompiler . prototype . component = function ( component , i , l ) {
this . fragmentOpcodeCompiler . component ( component , i , l ) ;
this . hydrationOpcodeCompiler . component ( component , i , l ) ;
} ;
TemplateCompiler . prototype . block = function ( block , i , l ) {
this . fragmentOpcodeCompiler . block ( block , i , l ) ;
this . hydrationOpcodeCompiler . block ( block , i , l ) ;
} ;
TemplateCompiler . prototype . text = function ( string , i , l , r ) {
this . fragmentOpcodeCompiler . text ( string , i , l , r ) ;
this . hydrationOpcodeCompiler . text ( string , i , l , r ) ;
} ;
TemplateCompiler . prototype . comment = function ( string , i , l , r ) {
this . fragmentOpcodeCompiler . comment ( string , i , l , r ) ;
this . hydrationOpcodeCompiler . comment ( string , i , l , r ) ;
} ;
TemplateCompiler . prototype . mustache = function ( mustache , i , l ) {
this . fragmentOpcodeCompiler . mustache ( mustache , i , l ) ;
this . hydrationOpcodeCompiler . mustache ( mustache , i , l ) ;
} ;
TemplateCompiler . prototype . setNamespace = function ( namespace ) {
this . fragmentOpcodeCompiler . setNamespace ( namespace ) ;
} ;
} ) ;
define ( "htmlbars-compiler/template-visitor" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
var push = Array . prototype . push ;
function Frame ( ) {
this . parentNode = null ;
this . children = null ;
this . childIndex = null ;
this . childCount = null ;
this . childTemplateCount = 0 ;
this . mustacheCount = 0 ;
this . actions = [ ] ;
}
/ * *
* Takes in an AST and outputs a list of actions to be consumed
* by a compiler . For example , the template
*
* foo { { bar } } < div > baz < / d i v >
*
* produces the actions
*
* [ [ 'startProgram' , [ programNode , 0 ] ] ,
* [ 'text' , [ textNode , 0 , 3 ] ] ,
* [ 'mustache' , [ mustacheNode , 1 , 3 ] ] ,
* [ 'openElement' , [ elementNode , 2 , 3 , 0 ] ] ,
* [ 'text' , [ textNode , 0 , 1 ] ] ,
* [ 'closeElement' , [ elementNode , 2 , 3 ] ,
* [ 'endProgram' , [ programNode ] ] ]
*
* This visitor walks the AST depth first and backwards . As
* a result the bottom - most child template will appear at the
* top of the actions list whereas the root template will appear
* at the bottom of the list . For example ,
*
* < div > { { # if } } foo { { else } } bar < b > < / b > { { / i f } } < / d i v >
*
* produces the actions
*
* [ [ 'startProgram' , [ programNode , 0 ] ] ,
* [ 'text' , [ textNode , 0 , 2 , 0 ] ] ,
* [ 'openElement' , [ elementNode , 1 , 2 , 0 ] ] ,
* [ 'closeElement' , [ elementNode , 1 , 2 ] ] ,
* [ 'endProgram' , [ programNode ] ] ,
* [ 'startProgram' , [ programNode , 0 ] ] ,
* [ 'text' , [ textNode , 0 , 1 ] ] ,
* [ 'endProgram' , [ programNode ] ] ,
* [ 'startProgram' , [ programNode , 2 ] ] ,
* [ 'openElement' , [ elementNode , 0 , 1 , 1 ] ] ,
* [ 'block' , [ blockNode , 0 , 1 ] ] ,
* [ 'closeElement' , [ elementNode , 0 , 1 ] ] ,
* [ 'endProgram' , [ programNode ] ] ]
*
* The state of the traversal is maintained by a stack of frames .
* Whenever a node with children is entered ( either a ProgramNode
* or an ElementNode ) a frame is pushed onto the stack . The frame
* contains information about the state of the traversal of that
* node . For example ,
*
* - index of the current child node being visited
* - the number of mustaches contained within its child nodes
* - the list of actions generated by its child nodes
* /
function TemplateVisitor ( ) {
this . frameStack = [ ] ;
this . actions = [ ] ;
this . programDepth = - 1 ;
}
// Traversal methods
TemplateVisitor . prototype . visit = function ( node ) {
this [ node . type ] ( node ) ;
} ;
TemplateVisitor . prototype . Program = function ( program ) {
this . programDepth ++ ;
var parentFrame = this . getCurrentFrame ( ) ;
var programFrame = this . pushFrame ( ) ;
programFrame . parentNode = program ;
programFrame . children = program . body ;
programFrame . childCount = program . body . length ;
programFrame . blankChildTextNodes = [ ] ;
programFrame . actions . push ( [ 'endProgram' , [ program , this . programDepth ] ] ) ;
for ( var i = program . body . length - 1 ; i >= 0 ; i -- ) {
programFrame . childIndex = i ;
this . visit ( program . body [ i ] ) ;
}
programFrame . actions . push ( [ 'startProgram' , [
program , programFrame . childTemplateCount ,
programFrame . blankChildTextNodes . reverse ( )
] ] ) ;
this . popFrame ( ) ;
this . programDepth -- ;
// Push the completed template into the global actions list
if ( parentFrame ) { parentFrame . childTemplateCount ++ ; }
push . apply ( this . actions , programFrame . actions . reverse ( ) ) ;
} ;
TemplateVisitor . prototype . ElementNode = function ( element ) {
var parentFrame = this . getCurrentFrame ( ) ;
var elementFrame = this . pushFrame ( ) ;
var parentNode = parentFrame . parentNode ;
elementFrame . parentNode = element ;
elementFrame . children = element . children ;
elementFrame . childCount = element . children . length ;
elementFrame . mustacheCount += element . helpers . length ;
elementFrame . blankChildTextNodes = [ ] ;
var actionArgs = [
element ,
parentFrame . childIndex ,
parentFrame . childCount ,
parentNode . type === 'Program' && parentFrame . childCount === 1
] ;
elementFrame . actions . push ( [ 'closeElement' , actionArgs ] ) ;
for ( var i = element . attributes . length - 1 ; i >= 0 ; i -- ) {
this . visit ( element . attributes [ i ] ) ;
}
for ( i = element . children . length - 1 ; i >= 0 ; i -- ) {
elementFrame . childIndex = i ;
this . visit ( element . children [ i ] ) ;
}
elementFrame . actions . push ( [ 'openElement' , actionArgs . concat ( [
elementFrame . mustacheCount , elementFrame . blankChildTextNodes . reverse ( ) ] ) ] ) ;
this . popFrame ( ) ;
// Propagate the element's frame state to the parent frame
if ( elementFrame . mustacheCount > 0 ) { parentFrame . mustacheCount ++ ; }
parentFrame . childTemplateCount += elementFrame . childTemplateCount ;
push . apply ( parentFrame . actions , elementFrame . actions ) ;
} ;
TemplateVisitor . prototype . AttrNode = function ( attr ) {
if ( attr . value . type !== 'TextNode' ) {
this . getCurrentFrame ( ) . mustacheCount ++ ;
}
} ;
TemplateVisitor . prototype . TextNode = function ( text ) {
var frame = this . getCurrentFrame ( ) ;
var isSingleRoot = frame . parentNode . type === 'Program' && frame . childCount === 1 ;
if ( text . chars === '' ) {
frame . blankChildTextNodes . push ( domIndexOf ( frame . children , text ) ) ;
}
frame . actions . push ( [ 'text' , [ text , frame . childIndex , frame . childCount , isSingleRoot ] ] ) ;
} ;
TemplateVisitor . prototype . BlockStatement = function ( node ) {
var frame = this . getCurrentFrame ( ) ;
frame . mustacheCount ++ ;
frame . actions . push ( [ 'block' , [ node , frame . childIndex , frame . childCount ] ] ) ;
if ( node . inverse ) { this . visit ( node . inverse ) ; }
if ( node . program ) { this . visit ( node . program ) ; }
} ;
TemplateVisitor . prototype . ComponentNode = function ( node ) {
var frame = this . getCurrentFrame ( ) ;
frame . mustacheCount ++ ;
frame . actions . push ( [ 'component' , [ node , frame . childIndex , frame . childCount ] ] ) ;
if ( node . program ) { this . visit ( node . program ) ; }
} ;
TemplateVisitor . prototype . PartialStatement = function ( node ) {
var frame = this . getCurrentFrame ( ) ;
frame . mustacheCount ++ ;
frame . actions . push ( [ 'mustache' , [ node , frame . childIndex , frame . childCount ] ] ) ;
} ;
TemplateVisitor . prototype . CommentStatement = function ( text ) {
var frame = this . getCurrentFrame ( ) ;
var isSingleRoot = frame . parentNode . type === 'Program' && frame . childCount === 1 ;
frame . actions . push ( [ 'comment' , [ text , frame . childIndex , frame . childCount , isSingleRoot ] ] ) ;
} ;
TemplateVisitor . prototype . MustacheStatement = function ( mustache ) {
var frame = this . getCurrentFrame ( ) ;
frame . mustacheCount ++ ;
frame . actions . push ( [ 'mustache' , [ mustache , frame . childIndex , frame . childCount ] ] ) ;
} ;
// Frame helpers
TemplateVisitor . prototype . getCurrentFrame = function ( ) {
return this . frameStack [ this . frameStack . length - 1 ] ;
} ;
TemplateVisitor . prototype . pushFrame = function ( ) {
var frame = new Frame ( ) ;
this . frameStack . push ( frame ) ;
return frame ;
} ;
TemplateVisitor . prototype . popFrame = function ( ) {
return this . frameStack . pop ( ) ;
} ;
_ _exports _ _ [ "default" ] = TemplateVisitor ;
// Returns the index of `domNode` in the `nodes` array, skipping
// over any nodes which do not represent DOM nodes.
function domIndexOf ( nodes , domNode ) {
var index = - 1 ;
for ( var i = 0 ; i < nodes . length ; i ++ ) {
var node = nodes [ i ] ;
if ( node . type !== 'TextNode' && node . type !== 'ElementNode' ) {
continue ;
} else {
index ++ ;
}
if ( node === domNode ) {
return index ;
}
}
return - 1 ;
}
} ) ;
define ( "htmlbars-compiler/utils" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function processOpcodes ( compiler , opcodes ) {
for ( var i = 0 , l = opcodes . length ; i < l ; i ++ ) {
var method = opcodes [ i ] [ 0 ] ;
var params = opcodes [ i ] [ 1 ] ;
if ( params ) {
compiler [ method ] . apply ( compiler , params ) ;
} else {
compiler [ method ] . call ( compiler ) ;
}
}
}
_ _exports _ _ . processOpcodes = processOpcodes ;
} ) ;
define ( "htmlbars-syntax" ,
[ "./htmlbars-syntax/walker" , "./htmlbars-syntax/builders" , "./htmlbars-syntax/parser" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _exports _ _ ) {
"use strict" ;
var Walker = _ _dependency1 _ _ [ "default" ] ;
var builders = _ _dependency2 _ _ [ "default" ] ;
var parse = _ _dependency3 _ _ . preprocess ;
_ _exports _ _ . Walker = Walker ;
_ _exports _ _ . builders = builders ;
_ _exports _ _ . parse = parse ;
} ) ;
define ( "htmlbars-syntax/builders" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
// Statements
function buildMustache ( sexpr , raw ) {
return {
type : "MustacheStatement" ,
sexpr : sexpr ,
escaped : ! raw
} ;
}
_ _exports _ _ . buildMustache = buildMustache ; function buildBlock ( sexpr , program , inverse ) {
return {
type : "BlockStatement" ,
sexpr : sexpr ,
program : program || null ,
inverse : inverse || null
} ;
}
_ _exports _ _ . buildBlock = buildBlock ; function buildPartial ( sexpr , indent ) {
return {
type : "PartialStatement" ,
sexpr : sexpr ,
indent : indent
} ;
}
_ _exports _ _ . buildPartial = buildPartial ; function buildComment ( value ) {
return {
type : "CommentStatement" ,
value : value
} ;
}
_ _exports _ _ . buildComment = buildComment ;
function buildConcat ( parts ) {
return {
type : "ConcatStatement" ,
parts : parts || [ ]
} ;
}
_ _exports _ _ . buildConcat = buildConcat ; // Nodes
function buildElement ( tag , attributes , helpers , children ) {
return {
type : "ElementNode" ,
tag : tag ,
attributes : attributes || [ ] ,
helpers : helpers || [ ] ,
children : children || [ ]
} ;
}
_ _exports _ _ . buildElement = buildElement ; function buildComponent ( tag , attributes , program ) {
return {
type : "ComponentNode" ,
tag : tag ,
attributes : attributes ,
program : program
} ;
}
_ _exports _ _ . buildComponent = buildComponent ; function buildAttr ( name , value ) {
return {
type : "AttrNode" ,
name : name ,
value : value
} ;
}
_ _exports _ _ . buildAttr = buildAttr ; function buildText ( chars ) {
return {
type : "TextNode" ,
chars : chars
} ;
}
_ _exports _ _ . buildText = buildText ; // Expressions
function buildSexpr ( path , params , hash ) {
return {
type : "SubExpression" ,
path : path ,
params : params || [ ] ,
hash : hash || buildHash ( [ ] )
} ;
}
_ _exports _ _ . buildSexpr = buildSexpr ; function buildPath ( original ) {
return {
type : "PathExpression" ,
original : original ,
parts : original . split ( '.' )
} ;
}
_ _exports _ _ . buildPath = buildPath ; function buildString ( value ) {
return {
type : "StringLiteral" ,
value : value ,
original : value
} ;
}
_ _exports _ _ . buildString = buildString ; function buildBoolean ( value ) {
return {
type : "BooleanLiteral" ,
value : value ,
original : value
} ;
}
_ _exports _ _ . buildBoolean = buildBoolean ; function buildNumber ( value ) {
return {
type : "NumberLiteral" ,
value : value ,
original : value
} ;
}
_ _exports _ _ . buildNumber = buildNumber ; // Miscellaneous
function buildHash ( pairs ) {
return {
type : "Hash" ,
pairs : pairs || [ ]
} ;
}
_ _exports _ _ . buildHash = buildHash ; function buildPair ( key , value ) {
return {
type : "HashPair" ,
key : key ,
value : value
} ;
}
_ _exports _ _ . buildPair = buildPair ; function buildProgram ( body , blockParams ) {
return {
type : "Program" ,
body : body || [ ] ,
blockParams : blockParams || [ ]
} ;
}
_ _exports _ _ . buildProgram = buildProgram ; _ _exports _ _ [ "default" ] = {
mustache : buildMustache ,
block : buildBlock ,
partial : buildPartial ,
comment : buildComment ,
element : buildElement ,
component : buildComponent ,
attr : buildAttr ,
text : buildText ,
sexpr : buildSexpr ,
path : buildPath ,
string : buildString ,
"boolean" : buildBoolean ,
number : buildNumber ,
concat : buildConcat ,
hash : buildHash ,
pair : buildPair ,
program : buildProgram
} ;
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/ast" ,
[ "../exception" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var Exception = _ _dependency1 _ _ [ "default" ] ;
var AST = {
Program : function ( statements , blockParams , strip , locInfo ) {
this . loc = locInfo ;
this . type = 'Program' ;
this . body = statements ;
this . blockParams = blockParams ;
this . strip = strip ;
} ,
MustacheStatement : function ( sexpr , escaped , strip , locInfo ) {
this . loc = locInfo ;
this . type = 'MustacheStatement' ;
this . sexpr = sexpr ;
this . escaped = escaped ;
this . strip = strip ;
} ,
BlockStatement : function ( sexpr , program , inverse , openStrip , inverseStrip , closeStrip , locInfo ) {
this . loc = locInfo ;
this . type = 'BlockStatement' ;
this . sexpr = sexpr ;
this . program = program ;
this . inverse = inverse ;
this . openStrip = openStrip ;
this . inverseStrip = inverseStrip ;
this . closeStrip = closeStrip ;
} ,
PartialStatement : function ( sexpr , strip , locInfo ) {
this . loc = locInfo ;
this . type = 'PartialStatement' ;
this . sexpr = sexpr ;
this . indent = '' ;
this . strip = strip ;
} ,
ContentStatement : function ( string , locInfo ) {
this . loc = locInfo ;
this . type = 'ContentStatement' ;
this . original = this . value = string ;
} ,
CommentStatement : function ( comment , strip , locInfo ) {
this . loc = locInfo ;
this . type = 'CommentStatement' ;
this . value = comment ;
this . strip = strip ;
} ,
SubExpression : function ( path , params , hash , locInfo ) {
this . loc = locInfo ;
this . type = 'SubExpression' ;
this . path = path ;
this . params = params || [ ] ;
this . hash = hash ;
} ,
PathExpression : function ( data , depth , parts , original , locInfo ) {
this . loc = locInfo ;
this . type = 'PathExpression' ;
this . data = data ;
this . original = original ;
this . parts = parts ;
this . depth = depth ;
} ,
StringLiteral : function ( string , locInfo ) {
this . loc = locInfo ;
this . type = 'StringLiteral' ;
this . original =
this . value = string ;
} ,
NumberLiteral : function ( number , locInfo ) {
this . loc = locInfo ;
this . type = 'NumberLiteral' ;
this . original =
this . value = Number ( number ) ;
} ,
BooleanLiteral : function ( bool , locInfo ) {
this . loc = locInfo ;
this . type = 'BooleanLiteral' ;
this . original =
this . value = bool === 'true' ;
} ,
Hash : function ( pairs , locInfo ) {
this . loc = locInfo ;
this . type = 'Hash' ;
this . pairs = pairs ;
} ,
HashPair : function ( key , value , locInfo ) {
this . loc = locInfo ;
this . type = 'HashPair' ;
this . key = key ;
this . value = value ;
}
} ;
// Must be exported as an object rather than the root of the module as the jison lexer
// most modify the object to operate properly.
_ _exports _ _ [ "default" ] = AST ;
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/base" ,
[ "./parser" , "./ast" , "./whitespace-control" , "./helpers" , "../utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _exports _ _ ) {
"use strict" ;
var parser = _ _dependency1 _ _ [ "default" ] ;
var AST = _ _dependency2 _ _ [ "default" ] ;
var WhitespaceControl = _ _dependency3 _ _ [ "default" ] ;
var Helpers = _ _dependency4 _ _ ;
var extend = _ _dependency5 _ _ . extend ;
_ _exports _ _ . parser = parser ;
var yy = { } ;
extend ( yy , Helpers , AST ) ;
function parse ( input , options ) {
// Just return if an already-compile AST was passed in.
if ( input . type === 'Program' ) { return input ; }
parser . yy = yy ;
// Altering the shared object here, but this is ok as parser is a sync operation
yy . locInfo = function ( locInfo ) {
return new yy . SourceLocation ( options && options . srcName , locInfo ) ;
} ;
var strip = new WhitespaceControl ( ) ;
return strip . accept ( parser . parse ( input ) ) ;
}
_ _exports _ _ . parse = parse ;
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/helpers" ,
[ "../exception" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var Exception = _ _dependency1 _ _ [ "default" ] ;
function SourceLocation ( source , locInfo ) {
this . source = source ;
this . start = {
line : locInfo . first _line ,
column : locInfo . first _column
} ;
this . end = {
line : locInfo . last _line ,
column : locInfo . last _column
} ;
}
_ _exports _ _ . SourceLocation = SourceLocation ; function stripFlags ( open , close ) {
return {
open : open . charAt ( 2 ) === '~' ,
close : close . charAt ( close . length - 3 ) === '~'
} ;
}
_ _exports _ _ . stripFlags = stripFlags ; function stripComment ( comment ) {
return comment . replace ( /^\{\{~?\!-?-?/ , '' )
. replace ( /-?-?~?\}\}$/ , '' ) ;
}
_ _exports _ _ . stripComment = stripComment ; function preparePath ( data , parts , locInfo ) {
/*jshint -W040 */
locInfo = this . locInfo ( locInfo ) ;
var original = data ? '@' : '' ,
dig = [ ] ,
depth = 0 ,
depthString = '' ;
for ( var i = 0 , l = parts . length ; i < l ; i ++ ) {
var part = parts [ i ] . part ;
original += ( parts [ i ] . separator || '' ) + part ;
if ( part === '..' || part === '.' || part === 'this' ) {
if ( dig . length > 0 ) {
throw new Exception ( 'Invalid path: ' + original , { loc : locInfo } ) ;
} else if ( part === '..' ) {
depth ++ ;
depthString += '../' ;
}
} else {
dig . push ( part ) ;
}
}
return new this . PathExpression ( data , depth , dig , original , locInfo ) ;
}
_ _exports _ _ . preparePath = preparePath ; function prepareMustache ( sexpr , open , strip , locInfo ) {
/*jshint -W040 */
// Must use charAt to support IE pre-10
var escapeFlag = open . charAt ( 3 ) || open . charAt ( 2 ) ,
escaped = escapeFlag !== '{' && escapeFlag !== '&' ;
return new this . MustacheStatement ( sexpr , escaped , strip , this . locInfo ( locInfo ) ) ;
}
_ _exports _ _ . prepareMustache = prepareMustache ; function prepareRawBlock ( openRawBlock , content , close , locInfo ) {
/*jshint -W040 */
if ( openRawBlock . sexpr . path . original !== close ) {
var errorNode = { loc : openRawBlock . sexpr . loc } ;
throw new Exception ( openRawBlock . sexpr . path . original + " doesn't match " + close , errorNode ) ;
}
locInfo = this . locInfo ( locInfo ) ;
var program = new this . Program ( [ content ] , null , { } , locInfo ) ;
return new this . BlockStatement (
openRawBlock . sexpr , program , undefined ,
{ } , { } , { } ,
locInfo ) ;
}
_ _exports _ _ . prepareRawBlock = prepareRawBlock ; function prepareBlock ( openBlock , program , inverseAndProgram , close , inverted , locInfo ) {
/*jshint -W040 */
// When we are chaining inverse calls, we will not have a close path
if ( close && close . path && openBlock . sexpr . path . original !== close . path . original ) {
var errorNode = { loc : openBlock . sexpr . loc } ;
throw new Exception ( openBlock . sexpr . path . original + ' doesn\'t match ' + close . path . original , errorNode ) ;
}
program . blockParams = openBlock . blockParams ;
var inverse ,
inverseStrip ;
if ( inverseAndProgram ) {
if ( inverseAndProgram . chain ) {
inverseAndProgram . program . body [ 0 ] . closeStrip = close . strip || close . openStrip ;
}
inverseStrip = inverseAndProgram . strip ;
inverse = inverseAndProgram . program ;
}
if ( inverted ) {
inverted = inverse ;
inverse = program ;
program = inverted ;
}
return new this . BlockStatement (
openBlock . sexpr , program , inverse ,
openBlock . strip , inverseStrip , close && ( close . strip || close . openStrip ) ,
this . locInfo ( locInfo ) ) ;
}
_ _exports _ _ . prepareBlock = prepareBlock ;
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/parser" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
/* jshint ignore:start */
/* istanbul ignore next */
/* Jison generated parser */
var handlebars = ( function ( ) {
var parser = { trace : function trace ( ) { } ,
yy : { } ,
symbols _ : { "error" : 2 , "root" : 3 , "program" : 4 , "EOF" : 5 , "program_repetition0" : 6 , "statement" : 7 , "mustache" : 8 , "block" : 9 , "rawBlock" : 10 , "partial" : 11 , "content" : 12 , "COMMENT" : 13 , "CONTENT" : 14 , "openRawBlock" : 15 , "END_RAW_BLOCK" : 16 , "OPEN_RAW_BLOCK" : 17 , "sexpr" : 18 , "CLOSE_RAW_BLOCK" : 19 , "openBlock" : 20 , "block_option0" : 21 , "closeBlock" : 22 , "openInverse" : 23 , "block_option1" : 24 , "OPEN_BLOCK" : 25 , "openBlock_option0" : 26 , "CLOSE" : 27 , "OPEN_INVERSE" : 28 , "openInverse_option0" : 29 , "openInverseChain" : 30 , "OPEN_INVERSE_CHAIN" : 31 , "openInverseChain_option0" : 32 , "inverseAndProgram" : 33 , "INVERSE" : 34 , "inverseChain" : 35 , "inverseChain_option0" : 36 , "OPEN_ENDBLOCK" : 37 , "path" : 38 , "OPEN" : 39 , "OPEN_UNESCAPED" : 40 , "CLOSE_UNESCAPED" : 41 , "OPEN_PARTIAL" : 42 , "helperName" : 43 , "sexpr_repetition0" : 44 , "sexpr_option0" : 45 , "dataName" : 46 , "param" : 47 , "STRING" : 48 , "NUMBER" : 49 , "BOOLEAN" : 50 , "OPEN_SEXPR" : 51 , "CLOSE_SEXPR" : 52 , "hash" : 53 , "hash_repetition_plus0" : 54 , "hashSegment" : 55 , "ID" : 56 , "EQUALS" : 57 , "blockParams" : 58 , "OPEN_BLOCK_PARAMS" : 59 , "blockParams_repetition_plus0" : 60 , "CLOSE_BLOCK_PARAMS" : 61 , "DATA" : 62 , "pathSegments" : 63 , "SEP" : 64 , "$accept" : 0 , "$end" : 1 } ,
terminals _ : { 2 : "error" , 5 : "EOF" , 13 : "COMMENT" , 14 : "CONTENT" , 16 : "END_RAW_BLOCK" , 17 : "OPEN_RAW_BLOCK" , 19 : "CLOSE_RAW_BLOCK" , 25 : "OPEN_BLOCK" , 27 : "CLOSE" , 28 : "OPEN_INVERSE" , 31 : "OPEN_INVERSE_CHAIN" , 34 : "INVERSE" , 37 : "OPEN_ENDBLOCK" , 39 : "OPEN" , 40 : "OPEN_UNESCAPED" , 41 : "CLOSE_UNESCAPED" , 42 : "OPEN_PARTIAL" , 48 : "STRING" , 49 : "NUMBER" , 50 : "BOOLEAN" , 51 : "OPEN_SEXPR" , 52 : "CLOSE_SEXPR" , 56 : "ID" , 57 : "EQUALS" , 59 : "OPEN_BLOCK_PARAMS" , 61 : "CLOSE_BLOCK_PARAMS" , 62 : "DATA" , 64 : "SEP" } ,
productions _ : [ 0 , [ 3 , 2 ] , [ 4 , 1 ] , [ 7 , 1 ] , [ 7 , 1 ] , [ 7 , 1 ] , [ 7 , 1 ] , [ 7 , 1 ] , [ 7 , 1 ] , [ 12 , 1 ] , [ 10 , 3 ] , [ 15 , 3 ] , [ 9 , 4 ] , [ 9 , 4 ] , [ 20 , 4 ] , [ 23 , 4 ] , [ 30 , 4 ] , [ 33 , 2 ] , [ 35 , 3 ] , [ 35 , 1 ] , [ 22 , 3 ] , [ 8 , 3 ] , [ 8 , 3 ] , [ 11 , 3 ] , [ 18 , 3 ] , [ 18 , 1 ] , [ 47 , 1 ] , [ 47 , 1 ] , [ 47 , 1 ] , [ 47 , 1 ] , [ 47 , 1 ] , [ 47 , 3 ] , [ 53 , 1 ] , [ 55 , 3 ] , [ 58 , 3 ] , [ 43 , 1 ] , [ 43 , 1 ] , [ 43 , 1 ] , [ 46 , 2 ] , [ 38 , 1 ] , [ 63 , 3 ] , [ 63 , 1 ] , [ 6 , 0 ] , [ 6 , 2 ] , [ 21 , 0 ] , [ 21 , 1 ] , [ 24 , 0 ] , [ 24 , 1 ] , [ 26 , 0 ] , [ 26 , 1 ] , [ 29 , 0 ] , [ 29 , 1 ] , [ 32 , 0 ] , [ 32 , 1 ] , [ 36 , 0 ] , [ 36 , 1 ] , [ 44 , 0 ] , [ 44 , 2 ] , [ 45 , 0 ] , [ 45 , 1 ] , [ 54 , 1 ] , [ 54 , 2 ] , [ 60 , 1 ] , [ 60 , 2 ] ] ,
performAction : function anonymous ( yytext , yyleng , yylineno , yy , yystate , $$ , _$ ) {
var $0 = $$ . length - 1 ;
switch ( yystate ) {
case 1 : return $$ [ $0 - 1 ] ;
break ;
case 2 : this . $ = new yy . Program ( $$ [ $0 ] , null , { } , yy . locInfo ( this . _$ ) ) ;
break ;
case 3 : this . $ = $$ [ $0 ] ;
break ;
case 4 : this . $ = $$ [ $0 ] ;
break ;
case 5 : this . $ = $$ [ $0 ] ;
break ;
case 6 : this . $ = $$ [ $0 ] ;
break ;
case 7 : this . $ = $$ [ $0 ] ;
break ;
case 8 : this . $ = new yy . CommentStatement ( yy . stripComment ( $$ [ $0 ] ) , yy . stripFlags ( $$ [ $0 ] , $$ [ $0 ] ) , yy . locInfo ( this . _$ ) ) ;
break ;
case 9 : this . $ = new yy . ContentStatement ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 10 : this . $ = yy . prepareRawBlock ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] , this . _$ ) ;
break ;
case 11 : this . $ = { sexpr : $$ [ $0 - 1 ] } ;
break ;
case 12 : this . $ = yy . prepareBlock ( $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] , false , this . _$ ) ;
break ;
case 13 : this . $ = yy . prepareBlock ( $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] , true , this . _$ ) ;
break ;
case 14 : this . $ = { sexpr : $$ [ $0 - 2 ] , blockParams : $$ [ $0 - 1 ] , strip : yy . stripFlags ( $$ [ $0 - 3 ] , $$ [ $0 ] ) } ;
break ;
case 15 : this . $ = { sexpr : $$ [ $0 - 2 ] , blockParams : $$ [ $0 - 1 ] , strip : yy . stripFlags ( $$ [ $0 - 3 ] , $$ [ $0 ] ) } ;
break ;
case 16 : this . $ = { sexpr : $$ [ $0 - 2 ] , blockParams : $$ [ $0 - 1 ] , strip : yy . stripFlags ( $$ [ $0 - 3 ] , $$ [ $0 ] ) } ;
break ;
case 17 : this . $ = { strip : yy . stripFlags ( $$ [ $0 - 1 ] , $$ [ $0 - 1 ] ) , program : $$ [ $0 ] } ;
break ;
case 18 :
var inverse = yy . prepareBlock ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] , $$ [ $0 ] , false , this . _$ ) ,
program = new yy . Program ( [ inverse ] , null , { } , yy . locInfo ( this . _$ ) ) ;
program . chained = true ;
this . $ = { strip : $$ [ $0 - 2 ] . strip , program : program , chain : true } ;
break ;
case 19 : this . $ = $$ [ $0 ] ;
break ;
case 20 : this . $ = { path : $$ [ $0 - 1 ] , strip : yy . stripFlags ( $$ [ $0 - 2 ] , $$ [ $0 ] ) } ;
break ;
case 21 : this . $ = yy . prepareMustache ( $$ [ $0 - 1 ] , $$ [ $0 - 2 ] , yy . stripFlags ( $$ [ $0 - 2 ] , $$ [ $0 ] ) , this . _$ ) ;
break ;
case 22 : this . $ = yy . prepareMustache ( $$ [ $0 - 1 ] , $$ [ $0 - 2 ] , yy . stripFlags ( $$ [ $0 - 2 ] , $$ [ $0 ] ) , this . _$ ) ;
break ;
case 23 : this . $ = new yy . PartialStatement ( $$ [ $0 - 1 ] , yy . stripFlags ( $$ [ $0 - 2 ] , $$ [ $0 ] ) , yy . locInfo ( this . _$ ) ) ;
break ;
case 24 : this . $ = new yy . SubExpression ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 25 : this . $ = new yy . SubExpression ( $$ [ $0 ] , null , null , yy . locInfo ( this . _$ ) ) ;
break ;
case 26 : this . $ = $$ [ $0 ] ;
break ;
case 27 : this . $ = new yy . StringLiteral ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 28 : this . $ = new yy . NumberLiteral ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 29 : this . $ = new yy . BooleanLiteral ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 30 : this . $ = $$ [ $0 ] ;
break ;
case 31 : this . $ = $$ [ $0 - 1 ] ;
break ;
case 32 : this . $ = new yy . Hash ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 33 : this . $ = new yy . HashPair ( $$ [ $0 - 2 ] , $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 34 : this . $ = $$ [ $0 - 1 ] ;
break ;
case 35 : this . $ = $$ [ $0 ] ;
break ;
case 36 : this . $ = new yy . StringLiteral ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) , yy . locInfo ( this . _$ ) ;
break ;
case 37 : this . $ = new yy . NumberLiteral ( $$ [ $0 ] , yy . locInfo ( this . _$ ) ) ;
break ;
case 38 : this . $ = yy . preparePath ( true , $$ [ $0 ] , this . _$ ) ;
break ;
case 39 : this . $ = yy . preparePath ( false , $$ [ $0 ] , this . _$ ) ;
break ;
case 40 : $$ [ $0 - 2 ] . push ( { part : $$ [ $0 ] , separator : $$ [ $0 - 1 ] } ) ; this . $ = $$ [ $0 - 2 ] ;
break ;
case 41 : this . $ = [ { part : $$ [ $0 ] } ] ;
break ;
case 42 : this . $ = [ ] ;
break ;
case 43 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ;
break ;
case 56 : this . $ = [ ] ;
break ;
case 57 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ;
break ;
case 60 : this . $ = [ $$ [ $0 ] ] ;
break ;
case 61 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ;
break ;
case 62 : this . $ = [ $$ [ $0 ] ] ;
break ;
case 63 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ;
break ;
}
} ,
table : [ { 3 : 1 , 4 : 2 , 5 : [ 2 , 42 ] , 6 : 3 , 13 : [ 2 , 42 ] , 14 : [ 2 , 42 ] , 17 : [ 2 , 42 ] , 25 : [ 2 , 42 ] , 28 : [ 2 , 42 ] , 39 : [ 2 , 42 ] , 40 : [ 2 , 42 ] , 42 : [ 2 , 42 ] } , { 1 : [ 3 ] } , { 5 : [ 1 , 4 ] } , { 5 : [ 2 , 2 ] , 7 : 5 , 8 : 6 , 9 : 7 , 10 : 8 , 11 : 9 , 12 : 10 , 13 : [ 1 , 11 ] , 14 : [ 1 , 18 ] , 15 : 16 , 17 : [ 1 , 21 ] , 20 : 14 , 23 : 15 , 25 : [ 1 , 19 ] , 28 : [ 1 , 20 ] , 31 : [ 2 , 2 ] , 34 : [ 2 , 2 ] , 37 : [ 2 , 2 ] , 39 : [ 1 , 12 ] , 40 : [ 1 , 13 ] , 42 : [ 1 , 17 ] } , { 1 : [ 2 , 1 ] } , { 5 : [ 2 , 43 ] , 13 : [ 2 , 43 ] , 14 : [ 2 , 43 ] , 17 : [ 2 , 43 ] , 25 : [ 2 , 43 ] , 28 : [ 2 , 43 ] , 31 : [ 2 , 43 ] , 34 : [ 2 , 43 ] , 37 : [ 2 , 43 ] , 39 : [ 2 , 43 ] , 40 : [ 2 , 43 ] , 42 : [ 2 , 43 ] } , { 5 : [ 2 , 3 ] , 13 : [ 2 , 3 ] , 14 : [ 2 , 3 ] , 17 : [ 2 , 3 ] , 25 : [ 2 , 3 ] , 28 : [ 2 , 3 ] , 31 : [ 2 , 3 ] , 34 : [ 2 , 3 ] , 37 : [ 2 , 3 ] , 39 : [ 2 , 3 ] , 40 : [ 2 , 3 ] , 42 : [ 2 , 3 ] } , { 5 : [ 2 , 4 ] , 13 : [ 2 , 4 ] , 14 : [ 2 , 4 ] , 17 : [ 2 , 4 ] , 25 : [ 2 , 4 ] , 28 : [ 2 , 4 ] , 31 : [ 2 , 4 ] , 34 : [ 2 , 4 ] , 37 : [ 2 , 4 ] , 39 : [ 2 , 4 ] , 40 : [ 2 , 4 ] , 42 : [ 2 , 4 ] } , { 5 : [ 2 , 5 ] , 13 : [ 2 , 5 ] , 14 : [ 2 , 5 ] , 17 : [ 2 , 5 ] , 25 : [ 2 , 5 ] , 28 : [ 2 , 5 ] , 31 : [ 2 , 5 ] , 34 : [ 2 , 5 ] , 37 : [ 2 , 5 ] , 39 : [ 2 , 5 ] , 40 : [ 2 , 5 ] , 42 : [ 2 , 5 ] } , { 5 : [ 2 , 6 ] , 13 : [ 2 , 6 ] , 14 : [ 2 , 6 ] , 17 : [ 2 , 6 ] , 25 : [ 2 , 6 ] , 28 : [ 2 , 6 ] , 31 : [ 2 , 6 ] , 34 : [ 2 , 6 ] , 37 : [ 2 , 6 ] , 39 : [ 2 , 6 ] , 40 : [ 2 , 6 ] , 42 : [ 2 , 6 ] } , { 5 : [ 2 , 7 ] , 13 : [ 2 , 7 ] , 14 : [ 2 , 7 ] , 17 : [ 2 , 7 ] , 25 : [ 2 , 7 ] , 28 : [ 2 , 7 ] , 31 : [ 2 , 7 ] , 34 : [ 2 , 7 ] , 37 : [ 2 , 7 ] , 39 : [ 2 , 7 ] , 40 : [ 2 , 7 ] , 42 : [ 2 , 7 ] } , { 5 : [ 2 , 8 ] , 13 : [ 2 , 8 ] , 14 : [ 2 , 8 ] , 17 : [ 2 , 8 ] , 25 : [ 2 , 8 ] , 28 : [ 2 , 8 ] , 31 : [ 2 , 8 ] , 34 : [ 2 , 8 ] , 37 : [ 2 , 8 ] , 39 : [ 2 , 8 ] , 40 : [ 2 , 8 ] , 42 : [ 2 , 8 ] } , { 18 : 22 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 18 : 31 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 4 : 32 , 6 : 3 , 13 : [ 2 , 42 ] , 14 : [ 2 , 42 ] , 17 : [ 2 , 42 ] , 25 : [ 2 , 42 ] , 28 : [ 2 , 42 ] , 31 : [ 2 , 42 ] , 34 : [ 2 , 42 ] , 37 : [ 2 , 42 ] , 39 : [ 2 , 42 ] , 40 : [ 2 , 42 ] , 42 : [ 2 , 42 ] } , { 4 : 33 , 6 : 3 , 13 : [ 2 , 42 ] , 14 : [ 2 , 42 ] , 17 : [ 2 , 42 ] , 25 : [ 2 , 42 ] , 28 : [ 2 , 42 ] , 34 : [ 2 , 42 ] , 37 : [ 2 , 42 ] , 39 : [ 2 , 42 ] , 40 : [ 2 , 42 ] , 42 : [ 2 , 42 ] } , { 12 : 34 , 14 : [ 1 , 18 ] } , { 18 : 35 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 5 : [ 2 , 9 ] , 13 : [ 2 , 9 ] , 14 : [ 2 , 9 ] , 16 : [ 2 , 9 ] , 17 : [ 2 , 9 ] , 25 : [ 2 , 9 ] , 28 : [ 2 , 9 ] , 31 : [ 2 , 9 ] , 34 : [ 2 , 9 ] , 37 : [ 2 , 9 ] , 39 : [ 2 , 9 ] , 40 : [ 2 , 9 ] , 42 : [ 2 , 9 ] } , { 18 : 36 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 18 : 37 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 18 : 38 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 27 : [ 1 , 39 ] } , { 19 : [ 2 , 56 ] , 27 : [ 2 , 56 ] , 41 : [ 2 , 56 ] , 44 : 40 , 48 : [ 2 , 56 ] , 49 : [ 2 , 56 ] , 50 : [ 2 , 56 ] , 51 : [ 2 , 56 ] , 52 : [ 2 , 56 ] , 56 : [ 2 , 56 ] , 59 : [ 2 , 56 ] , 62 : [ 2 , 56 ] } , { 19 : [ 2 , 25 ] , 27 : [ 2 , 25 ] , 41 : [ 2 , 25 ] , 52 : [ 2 , 25 ] , 59 : [ 2 , 25 ] } , { 19 : [ 2 , 35 ] , 27 : [ 2 , 35 ] , 41 : [ 2 , 35 ] , 48 : [ 2 , 35 ] , 49 : [ 2 , 35 ] , 50 : [ 2 , 35 ] , 51 : [ 2 , 35 ] , 52 : [ 2 , 35 ] , 56 : [ 2 , 35 ] , 59 : [ 2 , 35 ] , 62 : [ 2 , 35 ] } , { 19 : [ 2 , 36 ] , 27 : [ 2 , 36 ] , 41 : [ 2 , 36 ] , 48 : [ 2 , 36 ] , 49 : [ 2 , 36 ] , 50 : [ 2 , 36 ] , 51 : [ 2 , 36 ] , 52 : [ 2 , 36 ] , 56 : [ 2 , 36 ] , 59 : [ 2 , 36 ] , 62 : [ 2 , 36 ] } , { 19 : [ 2 , 37 ] , 27 : [ 2 , 37 ] , 41 : [ 2 , 37 ] , 48 : [ 2 , 37 ] , 49 : [ 2 , 37 ] , 50 : [ 2 , 37 ] , 51 : [ 2 , 37 ] , 52 : [ 2 , 37 ] , 56 : [ 2 , 37 ] , 59 : [ 2 , 37 ] , 62 : [ 2 , 37 ] } , { 56 : [ 1 , 30 ] , 63 : 41 } , { 19 : [ 2 , 39 ] , 27 : [ 2 , 39 ] , 41 : [ 2 , 39 ] , 48 : [ 2 , 39 ] , 49 : [ 2 , 39 ] , 50 : [ 2 , 39 ] , 51 : [ 2 , 39 ] , 52 : [ 2 , 39 ] , 56 : [ 2 , 39 ] , 59 : [ 2 , 39 ] , 62 : [ 2 , 39 ] , 64 : [ 1 , 42 ] } , { 19 : [ 2 , 41 ] , 27 : [ 2 , 41 ] , 41 : [ 2 , 41 ] , 48 : [ 2 , 41 ] , 49 : [ 2 , 41 ] , 50 : [ 2 , 41 ] , 51 : [ 2 , 41 ] , 52 : [ 2 , 41 ] , 56 : [ 2 , 41 ] , 59 : [ 2 , 41 ] , 62 : [ 2 , 41 ] , 64 : [ 2 , 41 ] } , { 41 : [ 1 , 43 ] } , { 21 : 44 , 30 : 46 , 31 : [ 1 , 48 ] , 33 : 47 , 34 : [ 1 , 49 ] , 35 : 45 , 37 : [ 2 , 44 ] } , { 24 : 50 , 33 : 51 , 34 : [ 1 , 49 ] , 37 : [ 2 , 46 ] } , { 16 : [ 1 , 52 ] } , { 27 : [ 1 , 53 ] } , { 26 : 54 , 27 : [ 2 , 48 ] , 58 : 55 , 59 : [ 1 , 56 ] } , { 27 : [ 2 , 50 ] , 29 : 57 , 58 : 58 , 59 : [ 1 , 56 ] } , { 19 : [ 1 , 59 ] } , { 5 : [ 2 , 21 ] , 13 : [ 2 , 21 ] , 14 : [ 2 , 21 ] , 17 : [ 2 , 21 ] , 25 : [ 2 , 21 ] , 28 : [ 2 , 21 ] , 31 : [ 2 , 21 ] , 34 : [ 2 , 21 ] , 37 : [ 2 , 21 ] , 39 : [ 2 , 21 ] , 40 : [ 2 , 21 ] , 42 : [ 2 , 21 ] } , { 19 : [ 2 , 58 ] , 27 : [ 2 , 58 ] , 38 : 63 , 41 : [ 2 , 58 ] , 45 : 60 , 46 : 67 , 47 : 61 , 48 : [ 1 , 64 ] , 49 : [ 1 , 65 ] , 50 : [ 1 , 66 ] , 51 : [ 1 , 68 ] , 52 : [ 2 , 58 ] , 53 : 62 , 54 : 69 , 55 : 70 , 56 : [ 1 , 71 ] , 59 : [ 2 , 58 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 19 : [ 2 , 38 ] , 27 : [ 2 , 38 ] , 41 : [ 2 , 38 ] , 48 : [ 2 , 38 ] , 49 : [ 2 , 38 ] , 50 : [ 2 , 38 ] , 51 : [ 2 , 38 ] , 52 : [ 2 , 38 ] , 56 : [ 2 , 38 ] , 59 : [ 2 , 38 ] , 62 : [ 2 , 38 ] , 64 : [ 1 , 42 ] } , { 56 : [ 1 , 72 ] } , { 5 : [ 2 , 22 ] , 13 : [ 2 , 22 ] , 14 : [ 2 , 22 ] , 17 : [ 2 , 22 ] , 25 : [ 2 , 22 ] , 28 : [ 2 , 22 ] , 31 : [ 2 , 22 ] , 34 : [ 2 , 22 ] , 37 : [ 2 , 22 ] , 39 : [ 2 , 22 ] , 40 : [ 2 , 22 ] , 42 : [ 2 , 22 ] } , { 22 : 73 , 37 : [ 1 , 74 ] } , { 37 : [ 2 , 45 ] } , { 4 : 75 , 6 : 3 , 13 : [ 2 , 42 ] , 14 : [ 2 , 42 ] , 17 : [ 2 , 42 ] , 25 : [ 2 , 42 ] , 28 : [ 2 , 42 ] , 31 : [ 2 , 42 ] , 34 : [ 2 , 42 ] , 37 : [ 2 , 42 ] , 39 : [ 2 , 42 ] , 40 : [ 2 , 42 ] , 42 : [ 2 , 42 ] } , { 37 : [ 2 , 19 ] } , { 18 : 76 , 38 : 25 , 43 : 23 , 46 : 24 , 48 : [ 1 , 26 ] , 49 : [ 1 , 27 ] , 56 : [ 1 , 30 ] , 62 : [ 1 , 28 ] , 63 : 29 } , { 4 : 77 , 6 : 3 , 13 : [ 2 , 42 ] , 14 : [ 2 , 42 ] , 17 : [ 2 , 42 ] , 25 : [ 2 , 42 ] , 28 : [ 2 , 42 ] , 37 : [ 2 , 42 ] , 39 : [ 2 , 42 ] , 40 : [ 2 , 42 ] , 42 : [ 2 , 42 ] } , { 22 : 78 , 37 : [ 1 , 74 ] } , { 37 : [ 2 , 47 ] } , { 5 : [ 2 , 10 ] , 13 : [ 2 , 10 ] , 14 : [ 2 , 10 ] , 17 : [ 2 , 10 ] , 25 : [ 2 , 10 ] , 28 : [ 2 , 10 ] , 31 : [ 2 , 10 ] , 34 : [ 2 , 10 ] , 37 : [ 2 , 10 ] , 39 : [ 2 , 10 ] , 40 : [ 2 , 10 ] , 42 : [ 2 , 10 ] } , { 5 : [ 2 , 23 ] , 13 : [ 2 , 23 ] , 14 : [ 2 , 23 ] , 17 : [ 2 , 23 ] , 25 : [ 2 , 23 ] , 28 : [ 2 , 23 ] , 31 : [ 2 , 23 ] , 34 : [ 2 , 23 ] , 37 : [ 2 , 23 ] , 39 : [ 2 , 23 ] , 40 : [ 2 , 23 ] , 42 : [ 2 , 23 ] } , { 27 : [ 1 , 79 ] } , { 27 : [ 2 , 49 ] } , { 56 : [ 1 , 81 ] , 60 : 80 } , { 27 : [ 1 , 82 ] } , { 27 : [ 2 , 51 ] } , { 14 : [ 2 , 11 ] } , { 19 : [ 2
defaultActions : { 4 : [ 2 , 1 ] , 45 : [ 2 , 45 ] , 47 : [ 2 , 19 ] , 51 : [ 2 , 47 ] , 55 : [ 2 , 49 ] , 58 : [ 2 , 51 ] , 59 : [ 2 , 11 ] , 77 : [ 2 , 17 ] , 88 : [ 2 , 18 ] , 89 : [ 2 , 55 ] , 91 : [ 2 , 53 ] , 92 : [ 2 , 34 ] } ,
parseError : function parseError ( str , hash ) {
throw new Error ( str ) ;
} ,
parse : function parse ( input ) {
var self = this , stack = [ 0 ] , vstack = [ null ] , lstack = [ ] , table = this . table , yytext = "" , yylineno = 0 , yyleng = 0 , recovering = 0 , TERROR = 2 , EOF = 1 ;
this . lexer . setInput ( input ) ;
this . lexer . yy = this . yy ;
this . yy . lexer = this . lexer ;
this . yy . parser = this ;
if ( typeof this . lexer . yylloc == "undefined" )
this . lexer . yylloc = { } ;
var yyloc = this . lexer . yylloc ;
lstack . push ( yyloc ) ;
var ranges = this . lexer . options && this . lexer . options . ranges ;
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 ;
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 ) {
state = stack [ stack . length - 1 ] ;
if ( this . defaultActions [ state ] ) {
action = this . defaultActions [ state ] ;
} else {
if ( symbol === null || typeof symbol == "undefined" ) {
symbol = lex ( ) ;
}
action = table [ state ] && table [ state ] [ symbol ] ;
}
if ( typeof action === "undefined" || ! action . length || ! action [ 0 ] ) {
var errStr = "" ;
if ( ! recovering ) {
expected = [ ] ;
for ( p in table [ state ] )
if ( this . terminals _ [ p ] && p > 2 ) {
expected . push ( "'" + this . terminals _ [ p ] + "'" ) ;
}
if ( this . lexer . showPosition ) {
errStr = "Parse error on line " + ( yylineno + 1 ) + ":\n" + this . lexer . showPosition ( ) + "\nExpecting " + expected . join ( ", " ) + ", got '" + ( this . terminals _ [ symbol ] || symbol ) + "'" ;
} else {
errStr = "Parse error on line " + ( yylineno + 1 ) + ": Unexpected " + ( symbol == 1 ? "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 } ) ;
}
}
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 :
stack . push ( symbol ) ;
vstack . push ( this . lexer . yytext ) ;
lstack . push ( this . lexer . yylloc ) ;
stack . push ( action [ 1 ] ) ;
symbol = null ;
if ( ! preErrorSymbol ) {
yyleng = this . lexer . yyleng ;
yytext = this . lexer . yytext ;
yylineno = this . lexer . yylineno ;
yyloc = this . lexer . yylloc ;
if ( recovering > 0 )
recovering -- ;
} else {
symbol = preErrorSymbol ;
preErrorSymbol = null ;
}
break ;
case 2 :
len = this . productions _ [ action [ 1 ] ] [ 1 ] ;
yyval . $ = vstack [ vstack . length - len ] ;
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 } ;
if ( ranges ) {
yyval . _$ . range = [ lstack [ lstack . length - ( len || 1 ) ] . range [ 0 ] , lstack [ lstack . length - 1 ] . range [ 1 ] ] ;
}
r = this . performAction . call ( yyval , yytext , yyleng , yylineno , this . yy , action [ 1 ] , vstack , lstack ) ;
if ( typeof r !== "undefined" ) {
return r ;
}
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 ] ) ;
vstack . push ( yyval . $ ) ;
lstack . push ( yyval . _$ ) ;
newState = table [ stack [ stack . length - 2 ] ] [ stack [ stack . length - 1 ] ] ;
stack . push ( newState ) ;
break ;
case 3 :
return true ;
}
}
return true ;
}
} ;
/* Jison generated lexer */
var lexer = ( function ( ) {
var lexer = ( { EOF : 1 ,
parseError : function parseError ( str , hash ) {
if ( this . yy . parser ) {
this . yy . parser . parseError ( str , hash ) ;
} else {
throw new Error ( str ) ;
}
} ,
setInput : function ( input ) {
this . _input = input ;
this . _more = this . _less = this . done = false ;
this . yylineno = this . yyleng = 0 ;
this . yytext = this . matched = this . match = '' ;
this . conditionStack = [ 'INITIAL' ] ;
this . yylloc = { first _line : 1 , first _column : 0 , last _line : 1 , last _column : 0 } ;
if ( this . options . ranges ) this . yylloc . range = [ 0 , 0 ] ;
this . offset = 0 ;
return this ;
} ,
input : function ( ) {
var ch = this . _input [ 0 ] ;
this . yytext += ch ;
this . yyleng ++ ;
this . offset ++ ;
this . match += ch ;
this . matched += ch ;
var lines = ch . match ( /(?:\r\n?|\n).*/g ) ;
if ( lines ) {
this . yylineno ++ ;
this . yylloc . last _line ++ ;
} else {
this . yylloc . last _column ++ ;
}
if ( this . options . ranges ) this . yylloc . range [ 1 ] ++ ;
this . _input = this . _input . slice ( 1 ) ;
return ch ;
} ,
unput : function ( ch ) {
var len = ch . length ;
var lines = ch . split ( /(?:\r\n?|\n)/g ) ;
this . _input = ch + this . _input ;
this . yytext = this . yytext . substr ( 0 , this . yytext . length - len - 1 ) ;
//this.yyleng -= len;
this . offset -= len ;
var oldLines = this . match . split ( /(?:\r\n?|\n)/g ) ;
this . match = this . match . substr ( 0 , this . match . length - 1 ) ;
this . matched = this . matched . substr ( 0 , this . matched . length - 1 ) ;
if ( lines . length - 1 ) this . yylineno -= lines . length - 1 ;
var r = this . yylloc . range ;
this . yylloc = { first _line : this . yylloc . first _line ,
last _line : this . yylineno + 1 ,
first _column : this . yylloc . first _column ,
last _column : lines ?
( lines . length === oldLines . length ? this . yylloc . first _column : 0 ) + oldLines [ oldLines . length - lines . length ] . length - lines [ 0 ] . length :
this . yylloc . first _column - len
} ;
if ( this . options . ranges ) {
this . yylloc . range = [ r [ 0 ] , r [ 0 ] + this . yyleng - len ] ;
}
return this ;
} ,
more : function ( ) {
this . _more = true ;
return this ;
} ,
less : function ( n ) {
this . unput ( this . match . slice ( n ) ) ;
} ,
pastInput : function ( ) {
var past = this . matched . substr ( 0 , this . matched . length - this . match . length ) ;
return ( past . length > 20 ? '...' : '' ) + past . substr ( - 20 ) . replace ( /\n/g , "" ) ;
} ,
upcomingInput : function ( ) {
var next = this . match ;
if ( next . length < 20 ) {
next += this . _input . substr ( 0 , 20 - next . length ) ;
}
return ( next . substr ( 0 , 20 ) + ( next . length > 20 ? '...' : '' ) ) . replace ( /\n/g , "" ) ;
} ,
showPosition : function ( ) {
var pre = this . pastInput ( ) ;
var c = new Array ( pre . length + 1 ) . join ( "-" ) ;
return pre + this . upcomingInput ( ) + "\n" + c + "^" ;
} ,
next : function ( ) {
if ( this . done ) {
return this . EOF ;
}
if ( ! this . _input ) this . done = true ;
var token ,
match ,
tempMatch ,
index ,
col ,
lines ;
if ( ! this . _more ) {
this . yytext = '' ;
this . match = '' ;
}
var rules = this . _currentRules ( ) ;
for ( var i = 0 ; i < rules . length ; i ++ ) {
tempMatch = this . _input . match ( this . rules [ rules [ i ] ] ) ;
if ( tempMatch && ( ! match || tempMatch [ 0 ] . length > match [ 0 ] . length ) ) {
match = tempMatch ;
index = i ;
if ( ! this . options . flex ) break ;
}
}
if ( match ) {
lines = match [ 0 ] . match ( /(?:\r\n?|\n).*/g ) ;
if ( lines ) this . yylineno += lines . length ;
this . yylloc = { first _line : this . yylloc . last _line ,
last _line : this . yylineno + 1 ,
first _column : this . yylloc . last _column ,
last _column : lines ? lines [ lines . length - 1 ] . length - lines [ lines . length - 1 ] . match ( /\r?\n?/ ) [ 0 ] . length : this . yylloc . last _column + match [ 0 ] . length } ;
this . yytext += match [ 0 ] ;
this . match += match [ 0 ] ;
this . matches = match ;
this . yyleng = this . yytext . length ;
if ( this . options . ranges ) {
this . yylloc . range = [ this . offset , this . offset += this . yyleng ] ;
}
this . _more = false ;
this . _input = this . _input . slice ( match [ 0 ] . length ) ;
this . matched += match [ 0 ] ;
token = this . performAction . call ( this , this . yy , this , rules [ index ] , this . conditionStack [ this . conditionStack . length - 1 ] ) ;
if ( this . done && this . _input ) this . done = false ;
if ( token ) return token ;
else return ;
}
if ( this . _input === "" ) {
return this . EOF ;
} else {
return this . parseError ( 'Lexical error on line ' + ( this . yylineno + 1 ) + '. Unrecognized text.\n' + this . showPosition ( ) ,
{ text : "" , token : null , line : this . yylineno } ) ;
}
} ,
lex : function lex ( ) {
var r = this . next ( ) ;
if ( typeof r !== 'undefined' ) {
return r ;
} else {
return this . lex ( ) ;
}
} ,
begin : function begin ( condition ) {
this . conditionStack . push ( condition ) ;
} ,
popState : function popState ( ) {
return this . conditionStack . pop ( ) ;
} ,
_currentRules : function _currentRules ( ) {
return this . conditions [ this . conditionStack [ this . conditionStack . length - 1 ] ] . rules ;
} ,
topState : function ( ) {
return this . conditionStack [ this . conditionStack . length - 2 ] ;
} ,
pushState : function begin ( condition ) {
this . begin ( condition ) ;
} } ) ;
lexer . options = { } ;
lexer . performAction = function anonymous ( yy , yy _ , $avoiding _name _collisions , YY _START ) {
function strip ( start , end ) {
return yy _ . yytext = yy _ . yytext . substr ( start , yy _ . yyleng - end ) ;
}
var YYSTATE = YY _START
switch ( $avoiding _name _collisions ) {
case 0 :
if ( yy _ . yytext . slice ( - 2 ) === "\\\\" ) {
strip ( 0 , 1 ) ;
this . begin ( "mu" ) ;
} else if ( yy _ . yytext . slice ( - 1 ) === "\\" ) {
strip ( 0 , 1 ) ;
this . begin ( "emu" ) ;
} else {
this . begin ( "mu" ) ;
}
if ( yy _ . yytext ) return 14 ;
break ;
case 1 : return 14 ;
break ;
case 2 :
this . popState ( ) ;
return 14 ;
break ;
case 3 :
yy _ . yytext = yy _ . yytext . substr ( 5 , yy _ . yyleng - 9 ) ;
this . popState ( ) ;
return 16 ;
break ;
case 4 : return 14 ;
break ;
case 5 :
this . popState ( ) ;
return 13 ;
break ;
case 6 : return 51 ;
break ;
case 7 : return 52 ;
break ;
case 8 : return 17 ;
break ;
case 9 :
this . popState ( ) ;
this . begin ( 'raw' ) ;
return 19 ;
break ;
case 10 : return 42 ;
break ;
case 11 : return 25 ;
break ;
case 12 : return 37 ;
break ;
case 13 : this . popState ( ) ; return 34 ;
break ;
case 14 : this . popState ( ) ; return 34 ;
break ;
case 15 : return 28 ;
break ;
case 16 : return 31 ;
break ;
case 17 : return 40 ;
break ;
case 18 : return 39 ;
break ;
case 19 :
this . unput ( yy _ . yytext ) ;
this . popState ( ) ;
this . begin ( 'com' ) ;
break ;
case 20 :
this . popState ( ) ;
return 13 ;
break ;
case 21 : return 39 ;
break ;
case 22 : return 57 ;
break ;
case 23 : return 56 ;
break ;
case 24 : return 56 ;
break ;
case 25 : return 64 ;
break ;
case 26 : // ignore whitespace
break ;
case 27 : this . popState ( ) ; return 41 ;
break ;
case 28 : this . popState ( ) ; return 27 ;
break ;
case 29 : yy _ . yytext = strip ( 1 , 2 ) . replace ( /\\"/g , '"' ) ; return 48 ;
break ;
case 30 : yy _ . yytext = strip ( 1 , 2 ) . replace ( /\\'/g , "'" ) ; return 48 ;
break ;
case 31 : return 62 ;
break ;
case 32 : return 50 ;
break ;
case 33 : return 50 ;
break ;
case 34 : return 49 ;
break ;
case 35 : return 59 ;
break ;
case 36 : return 61 ;
break ;
case 37 : return 56 ;
break ;
case 38 : yy _ . yytext = strip ( 1 , 2 ) ; return 56 ;
break ;
case 39 : return 'INVALID' ;
break ;
case 40 : return 5 ;
break ;
}
} ;
lexer . rules = [ /^(?:[^\x00]*?(?=(\{\{)))/ , /^(?:[^\x00]+)/ , /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/ , /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/ , /^(?:[^\x00]*?(?=(\{\{\{\{\/)))/ , /^(?:[\s\S]*?--(~)?\}\})/ , /^(?:\()/ , /^(?:\))/ , /^(?:\{\{\{\{)/ , /^(?:\}\}\}\})/ , /^(?:\{\{(~)?>)/ , /^(?:\{\{(~)?#)/ , /^(?:\{\{(~)?\/)/ , /^(?:\{\{(~)?\^\s*(~)?\}\})/ , /^(?:\{\{(~)?\s*else\s*(~)?\}\})/ , /^(?:\{\{(~)?\^)/ , /^(?:\{\{(~)?\s*else\b)/ , /^(?:\{\{(~)?\{)/ , /^(?:\{\{(~)?&)/ , /^(?:\{\{(~)?!--)/ , /^(?:\{\{(~)?![\s\S]*?\}\})/ , /^(?:\{\{(~)?)/ , /^(?:=)/ , /^(?:\.\.)/ , /^(?:\.(?=([=~}\s\/.)|])))/ , /^(?:[\/.])/ , /^(?:\s+)/ , /^(?:\}(~)?\}\})/ , /^(?:(~)?\}\})/ , /^(?:"(\\["]|[^"])*")/ , /^(?:'(\\[']|[^'])*')/ , /^(?:@)/ , /^(?:true(?=([~}\s)])))/ , /^(?:false(?=([~}\s)])))/ , /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/ , /^(?:as\s+\|)/ , /^(?:\|)/ , /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/ , /^(?:\[[^\]]*\])/ , /^(?:.)/ , /^(?:$)/ ] ;
lexer . conditions = { "mu" : { "rules" : [ 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ] , "inclusive" : false } , "emu" : { "rules" : [ 2 ] , "inclusive" : false } , "com" : { "rules" : [ 5 ] , "inclusive" : false } , "raw" : { "rules" : [ 3 , 4 ] , "inclusive" : false } , "INITIAL" : { "rules" : [ 0 , 1 , 40 ] , "inclusive" : true } } ;
return lexer ; } ) ( )
parser . lexer = lexer ;
function Parser ( ) { this . yy = { } ; } Parser . prototype = parser ; parser . Parser = Parser ;
return new Parser ;
} ) ( ) ; _ _exports _ _ [ "default" ] = handlebars ;
/* jshint ignore:end */
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/visitor" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function Visitor ( ) { }
Visitor . prototype = {
constructor : Visitor ,
accept : function ( object ) {
return object && this [ object . type ] ( object ) ;
} ,
Program : function ( program ) {
var body = program . body ,
i , l ;
for ( i = 0 , l = body . length ; i < l ; i ++ ) {
this . accept ( body [ i ] ) ;
}
} ,
MustacheStatement : function ( mustache ) {
this . accept ( mustache . sexpr ) ;
} ,
BlockStatement : function ( block ) {
this . accept ( block . sexpr ) ;
this . accept ( block . program ) ;
this . accept ( block . inverse ) ;
} ,
PartialStatement : function ( partial ) {
this . accept ( partial . partialName ) ;
this . accept ( partial . context ) ;
this . accept ( partial . hash ) ;
} ,
ContentStatement : function ( content ) { } ,
CommentStatement : function ( comment ) { } ,
SubExpression : function ( sexpr ) {
var params = sexpr . params , paramStrings = [ ] , hash ;
this . accept ( sexpr . path ) ;
for ( var i = 0 , l = params . length ; i < l ; i ++ ) {
this . accept ( params [ i ] ) ;
}
this . accept ( sexpr . hash ) ;
} ,
PathExpression : function ( path ) { } ,
StringLiteral : function ( string ) { } ,
NumberLiteral : function ( number ) { } ,
BooleanLiteral : function ( bool ) { } ,
Hash : function ( hash ) {
var pairs = hash . pairs ;
for ( var i = 0 , l = pairs . length ; i < l ; i ++ ) {
this . accept ( pairs [ i ] ) ;
}
} ,
HashPair : function ( pair ) {
this . accept ( pair . value ) ;
}
} ;
_ _exports _ _ [ "default" ] = Visitor ;
} ) ;
define ( "htmlbars-syntax/handlebars/compiler/whitespace-control" ,
[ "./visitor" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var Visitor = _ _dependency1 _ _ [ "default" ] ;
function WhitespaceControl ( ) {
}
WhitespaceControl . prototype = new Visitor ( ) ;
WhitespaceControl . prototype . Program = function ( program ) {
var isRoot = ! this . isRootSeen ;
this . isRootSeen = true ;
var body = program . body ;
for ( var i = 0 , l = body . length ; i < l ; i ++ ) {
var current = body [ i ] ,
strip = this . accept ( current ) ;
if ( ! strip ) {
continue ;
}
var _isPrevWhitespace = isPrevWhitespace ( body , i , isRoot ) ,
_isNextWhitespace = isNextWhitespace ( body , i , isRoot ) ,
openStandalone = strip . openStandalone && _isPrevWhitespace ,
closeStandalone = strip . closeStandalone && _isNextWhitespace ,
inlineStandalone = strip . inlineStandalone && _isPrevWhitespace && _isNextWhitespace ;
if ( strip . close ) {
omitRight ( body , i , true ) ;
}
if ( strip . open ) {
omitLeft ( body , i , true ) ;
}
if ( inlineStandalone ) {
omitRight ( body , i ) ;
if ( omitLeft ( body , i ) ) {
// If we are on a standalone node, save the indent info for partials
if ( current . type === 'PartialStatement' ) {
// Pull out the whitespace from the final line
current . indent = ( /([ \t]+$)/ ) . exec ( body [ i - 1 ] . original ) [ 1 ] ;
}
}
}
if ( openStandalone ) {
omitRight ( ( current . program || current . inverse ) . body ) ;
// Strip out the previous content node if it's whitespace only
omitLeft ( body , i ) ;
}
if ( closeStandalone ) {
// Always strip the next node
omitRight ( body , i ) ;
omitLeft ( ( current . inverse || current . program ) . body ) ;
}
}
return program ;
} ;
WhitespaceControl . prototype . BlockStatement = function ( block ) {
this . accept ( block . program ) ;
this . accept ( block . inverse ) ;
// Find the inverse program that is involed with whitespace stripping.
var program = block . program || block . inverse ,
inverse = block . program && block . inverse ,
firstInverse = inverse ,
lastInverse = inverse ;
if ( inverse && inverse . chained ) {
firstInverse = inverse . body [ 0 ] . program ;
// Walk the inverse chain to find the last inverse that is actually in the chain.
while ( lastInverse . chained ) {
lastInverse = lastInverse . body [ lastInverse . body . length - 1 ] . program ;
}
}
var strip = {
open : block . openStrip . open ,
close : block . closeStrip . close ,
// Determine the standalone candiacy. Basically flag our content as being possibly standalone
// so our parent can determine if we actually are standalone
openStandalone : isNextWhitespace ( program . body ) ,
closeStandalone : isPrevWhitespace ( ( firstInverse || program ) . body )
} ;
if ( block . openStrip . close ) {
omitRight ( program . body , null , true ) ;
}
if ( inverse ) {
var inverseStrip = block . inverseStrip ;
if ( inverseStrip . open ) {
omitLeft ( program . body , null , true ) ;
}
if ( inverseStrip . close ) {
omitRight ( firstInverse . body , null , true ) ;
}
if ( block . closeStrip . open ) {
omitLeft ( lastInverse . body , null , true ) ;
}
// Find standalone else statments
if ( isPrevWhitespace ( program . body )
&& isNextWhitespace ( firstInverse . body ) ) {
omitLeft ( program . body ) ;
omitRight ( firstInverse . body ) ;
}
} else {
if ( block . closeStrip . open ) {
omitLeft ( program . body , null , true ) ;
}
}
return strip ;
} ;
WhitespaceControl . prototype . MustacheStatement = function ( mustache ) {
return mustache . strip ;
} ;
WhitespaceControl . prototype . PartialStatement =
WhitespaceControl . prototype . CommentStatement = function ( node ) {
var strip = node . strip || { } ;
return {
inlineStandalone : true ,
open : strip . open ,
close : strip . close
} ;
} ;
function isPrevWhitespace ( body , i , isRoot ) {
if ( i === undefined ) {
i = body . length ;
}
// Nodes that end with newlines are considered whitespace (but are special
// cased for strip operations)
var prev = body [ i - 1 ] ,
sibling = body [ i - 2 ] ;
if ( ! prev ) {
return isRoot ;
}
if ( prev . type === 'ContentStatement' ) {
return ( sibling || ! isRoot ? ( /\r?\n\s*?$/ ) : ( /(^|\r?\n)\s*?$/ ) ) . test ( prev . original ) ;
}
}
function isNextWhitespace ( body , i , isRoot ) {
if ( i === undefined ) {
i = - 1 ;
}
var next = body [ i + 1 ] ,
sibling = body [ i + 2 ] ;
if ( ! next ) {
return isRoot ;
}
if ( next . type === 'ContentStatement' ) {
return ( sibling || ! isRoot ? ( /^\s*?\r?\n/ ) : ( /^\s*?(\r?\n|$)/ ) ) . test ( next . original ) ;
}
}
// Marks the node to the right of the position as omitted.
// I.e. {{foo}}' ' will mark the ' ' node as omitted.
//
// If i is undefined, then the first child will be marked as such.
//
// If mulitple is truthy then all whitespace will be stripped out until non-whitespace
// content is met.
function omitRight ( body , i , multiple ) {
var current = body [ i == null ? 0 : i + 1 ] ;
if ( ! current || current . type !== 'ContentStatement' || ( ! multiple && current . rightStripped ) ) {
return ;
}
var original = current . value ;
current . value = current . value . replace ( multiple ? ( /^\s+/ ) : ( /^[ \t]*\r?\n?/ ) , '' ) ;
current . rightStripped = current . value !== original ;
}
// Marks the node to the left of the position as omitted.
// I.e. ' '{{foo}} will mark the ' ' node as omitted.
//
// If i is undefined then the last child will be marked as such.
//
// If mulitple is truthy then all whitespace will be stripped out until non-whitespace
// content is met.
function omitLeft ( body , i , multiple ) {
var current = body [ i == null ? body . length - 1 : i - 1 ] ;
if ( ! current || current . type !== 'ContentStatement' || ( ! multiple && current . leftStripped ) ) {
return ;
}
// We omit the last node if it's whitespace only and not preceeded by a non-content node.
var original = current . value ;
current . value = current . value . replace ( multiple ? ( /\s+$/ ) : ( /[ \t]+$/ ) , '' ) ;
current . leftStripped = current . value !== original ;
return current . leftStripped ;
}
_ _exports _ _ [ "default" ] = WhitespaceControl ;
} ) ;
define ( "htmlbars-syntax/handlebars/exception" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
var errorProps = [ 'description' , 'fileName' , 'lineNumber' , 'message' , 'name' , 'number' , 'stack' ] ;
function Exception ( message , node ) {
var loc = node && node . loc ,
line ,
column ;
if ( loc ) {
line = loc . start . line ;
column = loc . start . column ;
message += ' - ' + line + ':' + column ;
}
var tmp = Error . prototype . constructor . call ( this , message ) ;
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
for ( var idx = 0 ; idx < errorProps . length ; idx ++ ) {
this [ errorProps [ idx ] ] = tmp [ errorProps [ idx ] ] ;
}
if ( loc ) {
this . lineNumber = line ;
this . column = column ;
}
}
Exception . prototype = new Error ( ) ;
_ _exports _ _ [ "default" ] = Exception ;
} ) ;
define ( "htmlbars-syntax/handlebars/safe-string" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
// Build out our basic SafeString type
function SafeString ( string ) {
this . string = string ;
}
SafeString . prototype . toString = SafeString . prototype . toHTML = function ( ) {
return "" + this . string ;
} ;
_ _exports _ _ [ "default" ] = SafeString ;
} ) ;
define ( "htmlbars-syntax/handlebars/utils" ,
[ "./safe-string" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
/*jshint -W004 */
var SafeString = _ _dependency1 _ _ [ "default" ] ;
var escape = {
"&" : "&" ,
"<" : "<" ,
">" : ">" ,
'"' : """ ,
"'" : "'" ,
"`" : "`"
} ;
var badChars = /[&<>"'`]/g ;
var possible = /[&<>"'`]/ ;
function escapeChar ( chr ) {
return escape [ chr ] ;
}
function extend ( obj /* , ...source */ ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
for ( var key in arguments [ i ] ) {
if ( Object . prototype . hasOwnProperty . call ( arguments [ i ] , key ) ) {
obj [ key ] = arguments [ i ] [ key ] ;
}
}
}
return obj ;
}
_ _exports _ _ . extend = extend ; var toString = Object . prototype . toString ;
_ _exports _ _ . toString = toString ;
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var isFunction = function ( value ) {
return typeof value === 'function' ;
} ;
// fallback for older versions of Chrome and Safari
/* istanbul ignore next */
if ( isFunction ( /x/ ) ) {
isFunction = function ( value ) {
return typeof value === 'function' && toString . call ( value ) === '[object Function]' ;
} ;
}
var isFunction ;
_ _exports _ _ . isFunction = isFunction ;
/* istanbul ignore next */
var isArray = Array . isArray || function ( value ) {
return ( value && typeof value === 'object' ) ? toString . call ( value ) === '[object Array]' : false ;
} ;
_ _exports _ _ . isArray = isArray ;
function escapeExpression ( string ) {
// don't escape SafeStrings, since they're already safe
if ( string && string . toHTML ) {
return string . toHTML ( ) ;
} else if ( string == null ) {
return "" ;
} else if ( ! string ) {
return string + '' ;
}
// Force a string conversion as this will be done by the append regardless and
// the regex test will do this transparently behind the scenes, causing issues if
// an object's to string has escaped characters in it.
string = "" + string ;
if ( ! possible . test ( string ) ) { return string ; }
return string . replace ( badChars , escapeChar ) ;
}
_ _exports _ _ . escapeExpression = escapeExpression ; function isEmpty ( value ) {
if ( ! value && value !== 0 ) {
return true ;
} else if ( isArray ( value ) && value . length === 0 ) {
return true ;
} else {
return false ;
}
}
_ _exports _ _ . isEmpty = isEmpty ; function appendContextPath ( contextPath , id ) {
return ( contextPath ? contextPath + '.' : '' ) + id ;
}
_ _exports _ _ . appendContextPath = appendContextPath ;
} ) ;
define ( "htmlbars-syntax/node-handlers" ,
[ "./builders" , "../htmlbars-util/array-utils" , "./utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _exports _ _ ) {
"use strict" ;
var buildProgram = _ _dependency1 _ _ . buildProgram ;
var buildBlock = _ _dependency1 _ _ . buildBlock ;
var buildHash = _ _dependency1 _ _ . buildHash ;
var forEach = _ _dependency2 _ _ . forEach ;
var appendChild = _ _dependency3 _ _ . appendChild ;
var postprocessProgram = _ _dependency3 _ _ . postprocessProgram ;
var nodeHandlers = {
Program : function ( program ) {
var body = [ ] ;
var node = buildProgram ( body , program . blockParams ) ;
var i , l = program . body . length ;
this . elementStack . push ( node ) ;
if ( l === 0 ) { return this . elementStack . pop ( ) ; }
for ( i = 0 ; i < l ; i ++ ) {
this . acceptNode ( program . body [ i ] ) ;
}
this . acceptToken ( this . tokenizer . tokenizeEOF ( ) ) ;
postprocessProgram ( node ) ;
// Ensure that that the element stack is balanced properly.
var poppedNode = this . elementStack . pop ( ) ;
if ( poppedNode !== node ) {
throw new Error ( "Unclosed element `" + poppedNode . tag + "` (on line " + poppedNode . loc . start . line + ")." ) ;
}
return node ;
} ,
BlockStatement : function ( block ) {
delete block . inverseStrip ;
delete block . openString ;
delete block . closeStrip ;
if ( this . tokenizer . state === 'comment' ) {
this . tokenizer . addChar ( '{{' + this . sourceForMustache ( block ) + '}}' ) ;
return ;
}
switchToHandlebars ( this ) ;
this . acceptToken ( block ) ;
var sexpr = this . acceptNode ( block . sexpr ) ;
var program = block . program ? this . acceptNode ( block . program ) : null ;
var inverse = block . inverse ? this . acceptNode ( block . inverse ) : null ;
var node = buildBlock ( sexpr , program , inverse ) ;
var parentProgram = this . currentElement ( ) ;
appendChild ( parentProgram , node ) ;
} ,
MustacheStatement : function ( mustache ) {
delete mustache . strip ;
if ( this . tokenizer . state === 'comment' ) {
this . tokenizer . addChar ( '{{' + this . sourceForMustache ( mustache ) + '}}' ) ;
return ;
}
this . acceptNode ( mustache . sexpr ) ;
switchToHandlebars ( this ) ;
this . acceptToken ( mustache ) ;
return mustache ;
} ,
ContentStatement : function ( content ) {
var changeLines = 0 ;
if ( content . rightStripped ) {
changeLines = leadingNewlineDifference ( content . original , content . value ) ;
}
this . tokenizer . line = this . tokenizer . line + changeLines ;
var tokens = this . tokenizer . tokenizePart ( content . value ) ;
return forEach ( tokens , this . acceptToken , this ) ;
} ,
CommentStatement : function ( comment ) {
return comment ;
} ,
PartialStatement : function ( partial ) {
appendChild ( this . currentElement ( ) , partial ) ;
return partial ;
} ,
SubExpression : function ( sexpr ) {
delete sexpr . isHelper ;
this . acceptNode ( sexpr . path ) ;
if ( sexpr . params ) {
for ( var i = 0 ; i < sexpr . params . length ; i ++ ) {
this . acceptNode ( sexpr . params [ i ] ) ;
}
} else {
sexpr . params = [ ] ;
}
if ( sexpr . hash ) {
this . acceptNode ( sexpr . hash ) ;
} else {
sexpr . hash = buildHash ( ) ;
}
return sexpr ;
} ,
PathExpression : function ( path ) {
delete path . data ;
delete path . depth ;
return path ;
} ,
Hash : function ( hash ) {
for ( var i = 0 ; i < hash . pairs . length ; i ++ ) {
this . acceptNode ( hash . pairs [ i ] . value ) ;
}
return hash ;
} ,
StringLiteral : function ( ) { } ,
BooleanLiteral : function ( ) { } ,
NumberLiteral : function ( ) { }
} ;
function switchToHandlebars ( processor ) {
var token = processor . tokenizer . token ;
if ( token && token . type === 'Chars' ) {
processor . acceptToken ( token ) ;
processor . tokenizer . token = null ;
}
}
function leadingNewlineDifference ( original , value ) {
if ( value === '' ) {
// if it is empty, just return the count of newlines
// in original
return original . split ( "\n" ) . length - 1 ;
}
// otherwise, return the number of newlines prior to
// `value`
var difference = original . split ( value ) [ 0 ] ;
var lines = difference . split ( /\n/ ) ;
return lines . length - 1 ;
}
_ _exports _ _ [ "default" ] = nodeHandlers ;
} ) ;
define ( "htmlbars-syntax/parser" ,
[ "./handlebars/compiler/base" , "./tokenizer" , "../simple-html-tokenizer/entity-parser" , "../simple-html-tokenizer/char-refs/full" , "./node-handlers" , "./token-handlers" , "../htmlbars-syntax" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _dependency6 _ _ , _ _dependency7 _ _ , _ _exports _ _ ) {
"use strict" ;
var parse = _ _dependency1 _ _ . parse ;
var Tokenizer = _ _dependency2 _ _ . Tokenizer ;
var EntityParser = _ _dependency3 _ _ [ "default" ] ;
var fullCharRefs = _ _dependency4 _ _ [ "default" ] ;
var nodeHandlers = _ _dependency5 _ _ [ "default" ] ;
var tokenHandlers = _ _dependency6 _ _ [ "default" ] ;
// this should be:
// `import * from "../htmlbars-syntax";
//
// But this version of the transpiler does not support it properly
var syntax = _ _dependency7 _ _ ;
var splitLines ;
// IE8 throws away blank pieces when splitting strings with a regex
// So we split using a string instead as appropriate
if ( "foo\n\nbar" . split ( /\n/ ) . length === 2 ) {
splitLines = function ( str ) {
var clean = str . replace ( /\r\n?/g , '\n' ) ;
return clean . split ( '\n' ) ;
} ;
} else {
splitLines = function ( str ) {
return str . split ( /(?:\r\n?|\n)/g ) ;
} ;
}
function preprocess ( html , options ) {
var ast = ( typeof html === 'object' ) ? html : parse ( html ) ;
var combined = new HTMLProcessor ( html , options ) . acceptNode ( ast ) ;
if ( options && options . plugins && options . plugins . ast ) {
for ( var i = 0 , l = options . plugins . ast . length ; i < l ; i ++ ) {
var plugin = new options . plugins . ast [ i ] ( ) ;
plugin . syntax = syntax ;
combined = plugin . transform ( combined ) ;
}
}
return combined ;
}
_ _exports _ _ . preprocess = preprocess ; function HTMLProcessor ( source , options ) {
this . options = options || { } ;
this . elementStack = [ ] ;
this . tokenizer = new Tokenizer ( '' , new EntityParser ( fullCharRefs ) ) ;
this . nodeHandlers = nodeHandlers ;
this . tokenHandlers = tokenHandlers ;
if ( typeof source === 'string' ) {
this . source = splitLines ( source ) ;
}
}
HTMLProcessor . prototype . acceptNode = function ( node ) {
return this . nodeHandlers [ node . type ] . call ( this , node ) ;
} ;
HTMLProcessor . prototype . acceptToken = function ( token ) {
if ( token ) {
return this . tokenHandlers [ token . type ] . call ( this , token ) ;
}
} ;
HTMLProcessor . prototype . currentElement = function ( ) {
return this . elementStack [ this . elementStack . length - 1 ] ;
} ;
HTMLProcessor . prototype . sourceForMustache = function ( mustache ) {
var firstLine = mustache . loc . start . line - 1 ;
var lastLine = mustache . loc . end . line - 1 ;
var currentLine = firstLine - 1 ;
var firstColumn = mustache . loc . start . column + 2 ;
var lastColumn = mustache . loc . end . column - 2 ;
var string = [ ] ;
var line ;
if ( ! this . source ) {
return '{{' + mustache . path . id . original + '}}' ;
}
while ( currentLine < lastLine ) {
currentLine ++ ;
line = this . source [ currentLine ] ;
if ( currentLine === firstLine ) {
if ( firstLine === lastLine ) {
string . push ( line . slice ( firstColumn , lastColumn ) ) ;
} else {
string . push ( line . slice ( firstColumn ) ) ;
}
} else if ( currentLine === lastLine ) {
string . push ( line . slice ( 0 , lastColumn ) ) ;
} else {
string . push ( line ) ;
}
}
return string . join ( '\n' ) ;
} ;
} ) ;
define ( "htmlbars-syntax/token-handlers" ,
[ "../htmlbars-util/array-utils" , "./builders" , "./utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _exports _ _ ) {
"use strict" ;
var forEach = _ _dependency1 _ _ . forEach ;
var buildProgram = _ _dependency2 _ _ . buildProgram ;
var buildComponent = _ _dependency2 _ _ . buildComponent ;
var buildElement = _ _dependency2 _ _ . buildElement ;
var buildComment = _ _dependency2 _ _ . buildComment ;
var buildText = _ _dependency2 _ _ . buildText ;
var appendChild = _ _dependency3 _ _ . appendChild ;
var parseComponentBlockParams = _ _dependency3 _ _ . parseComponentBlockParams ;
var postprocessProgram = _ _dependency3 _ _ . postprocessProgram ;
// The HTML elements in this list are speced by
// http://www.w3.org/TR/html-markup/syntax.html#syntax-elements,
// and will be forced to close regardless of if they have a
// self-closing /> at the end.
var voidTagNames = "area base br col command embed hr img input keygen link meta param source track wbr" ;
var voidMap = { } ;
forEach ( voidTagNames . split ( " " ) , function ( tagName ) {
voidMap [ tagName ] = true ;
} ) ;
// Except for `mustache`, all tokens are only allowed outside of
// a start or end tag.
var tokenHandlers = {
Comment : function ( token ) {
var current = this . currentElement ( ) ;
var comment = buildComment ( token . chars ) ;
appendChild ( current , comment ) ;
} ,
Chars : function ( token ) {
var current = this . currentElement ( ) ;
var text = buildText ( token . chars ) ;
appendChild ( current , text ) ;
} ,
StartTag : function ( tag ) {
var element = buildElement ( tag . tagName , tag . attributes , tag . helpers || [ ] , [ ] ) ;
element . loc = {
start : { line : tag . firstLine , column : tag . firstColumn } ,
end : { line : null , column : null }
} ;
this . elementStack . push ( element ) ;
if ( voidMap . hasOwnProperty ( tag . tagName ) || tag . selfClosing ) {
tokenHandlers . EndTag . call ( this , tag ) ;
}
} ,
BlockStatement : function ( /*block*/ ) {
if ( this . tokenizer . state === 'comment' ) {
return ;
} else if ( this . tokenizer . state !== 'data' ) {
throw new Error ( "A block may only be used inside an HTML element or another block." ) ;
}
} ,
MustacheStatement : function ( mustache ) {
var tokenizer = this . tokenizer ;
switch ( tokenizer . state ) {
// Tag helpers
case "tagName" :
tokenizer . addTagHelper ( mustache . sexpr ) ;
tokenizer . state = "beforeAttributeName" ;
return ;
case "beforeAttributeName" :
tokenizer . addTagHelper ( mustache . sexpr ) ;
return ;
case "attributeName" :
case "afterAttributeName" :
tokenizer . finalizeAttributeValue ( ) ;
tokenizer . addTagHelper ( mustache . sexpr ) ;
tokenizer . state = "beforeAttributeName" ;
return ;
case "afterAttributeValueQuoted" :
tokenizer . addTagHelper ( mustache . sexpr ) ;
tokenizer . state = "beforeAttributeName" ;
return ;
// Attribute values
case "beforeAttributeValue" :
tokenizer . markAttributeQuoted ( false ) ;
tokenizer . addToAttributeValue ( mustache ) ;
tokenizer . state = 'attributeValueUnquoted' ;
return ;
case "attributeValueDoubleQuoted" :
case "attributeValueSingleQuoted" :
case "attributeValueUnquoted" :
tokenizer . addToAttributeValue ( mustache ) ;
return ;
// TODO: Only append child when the tokenizer state makes
// sense to do so, otherwise throw an error.
default :
appendChild ( this . currentElement ( ) , mustache ) ;
}
} ,
EndTag : function ( tag ) {
var element = this . elementStack . pop ( ) ;
var parent = this . currentElement ( ) ;
var disableComponentGeneration = this . options . disableComponentGeneration === true ;
validateEndTag ( tag , element ) ;
if ( disableComponentGeneration || element . tag . indexOf ( "-" ) === - 1 ) {
appendChild ( parent , element ) ;
} else {
var program = buildProgram ( element . children ) ;
parseComponentBlockParams ( element , program ) ;
postprocessProgram ( program ) ;
var component = buildComponent ( element . tag , element . attributes , program ) ;
appendChild ( parent , component ) ;
}
}
} ;
function validateEndTag ( tag , element ) {
var error ;
if ( voidMap [ tag . tagName ] && element . tag === undefined ) {
// For void elements, we check element.tag is undefined because endTag is called by the startTag token handler in
// the normal case, so checking only voidMap[tag.tagName] would lead to an error being thrown on the opening tag.
error = "Invalid end tag " + formatEndTagInfo ( tag ) + " (void elements cannot have end tags)." ;
} else if ( element . tag === undefined ) {
error = "Closing tag " + formatEndTagInfo ( tag ) + " without an open tag." ;
} else if ( element . tag !== tag . tagName ) {
error = "Closing tag " + formatEndTagInfo ( tag ) + " did not match last open tag `" + element . tag + "` (on line " +
element . loc . start . line + ")." ;
}
if ( error ) { throw new Error ( error ) ; }
}
function formatEndTagInfo ( tag ) {
return "`" + tag . tagName + "` (on line " + tag . lastLine + ")" ;
}
_ _exports _ _ [ "default" ] = tokenHandlers ;
} ) ;
define ( "htmlbars-syntax/tokenizer" ,
[ "../simple-html-tokenizer" , "./utils" , "../htmlbars-util/array-utils" , "./builders" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _exports _ _ ) {
"use strict" ;
var Tokenizer = _ _dependency1 _ _ . Tokenizer ;
var isHelper = _ _dependency2 _ _ . isHelper ;
var map = _ _dependency3 _ _ . map ;
var builders = _ _dependency4 _ _ [ "default" ] ;
Tokenizer . prototype . createAttribute = function ( char ) {
if ( this . token . type === 'EndTag' ) {
throw new Error ( 'Invalid end tag: closing tag must not have attributes, in ' + formatTokenInfo ( this ) + '.' ) ;
}
this . currentAttribute = builders . attr ( char . toLowerCase ( ) , [ ] , null ) ;
this . token . attributes . push ( this . currentAttribute ) ;
this . state = 'attributeName' ;
} ;
Tokenizer . prototype . markAttributeQuoted = function ( value ) {
this . currentAttribute . quoted = value ;
} ;
Tokenizer . prototype . addToAttributeName = function ( char ) {
this . currentAttribute . name += char ;
} ;
Tokenizer . prototype . addToAttributeValue = function ( char ) {
var value = this . currentAttribute . value ;
if ( ! this . currentAttribute . quoted && char === '/' ) {
throw new Error ( "A space is required between an unquoted attribute value and `/`, in " + formatTokenInfo ( this ) +
'.' ) ;
}
if ( ! this . currentAttribute . quoted && value . length > 0 &&
( char . type === 'MustacheStatement' || value [ 0 ] . type === 'MustacheStatement' ) ) {
throw new Error ( "Unquoted attribute value must be a single string or mustache (on line " + this . line + ")" ) ;
}
if ( typeof char === 'object' ) {
if ( char . type === 'MustacheStatement' ) {
value . push ( char ) ;
} else {
throw new Error ( "Unsupported node in attribute value: " + char . type ) ;
}
} else {
if ( value . length > 0 && value [ value . length - 1 ] . type === 'TextNode' ) {
value [ value . length - 1 ] . chars += char ;
} else {
value . push ( builders . text ( char ) ) ;
}
}
} ;
Tokenizer . prototype . finalizeAttributeValue = function ( ) {
if ( this . currentAttribute ) {
this . currentAttribute . value = prepareAttributeValue ( this . currentAttribute ) ;
delete this . currentAttribute . quoted ;
delete this . currentAttribute ;
}
} ;
Tokenizer . prototype . addTagHelper = function ( helper ) {
var helpers = this . token . helpers = this . token . helpers || [ ] ;
helpers . push ( helper ) ;
} ;
function prepareAttributeValue ( attr ) {
var parts = attr . value ;
var length = parts . length ;
if ( length === 0 ) {
return builders . text ( '' ) ;
} else if ( length === 1 && parts [ 0 ] . type === "TextNode" ) {
return parts [ 0 ] ;
} else if ( ! attr . quoted ) {
return parts [ 0 ] ;
} else {
return builders . concat ( map ( parts , prepareConcatPart ) ) ;
}
}
function prepareConcatPart ( node ) {
switch ( node . type ) {
case 'TextNode' : return builders . string ( node . chars ) ;
case 'MustacheStatement' : return unwrapMustache ( node ) ;
default :
throw new Error ( "Unsupported node in quoted attribute value: " + node . type ) ;
}
}
function formatTokenInfo ( tokenizer ) {
return '`' + tokenizer . token . tagName + '` (on line ' + tokenizer . line + ')' ;
}
function unwrapMustache ( mustache ) {
if ( isHelper ( mustache . sexpr ) ) {
return mustache . sexpr ;
} else {
return mustache . sexpr . path ;
}
}
_ _exports _ _ . unwrapMustache = unwrapMustache ; _ _exports _ _ . Tokenizer = Tokenizer ;
} ) ;
define ( "htmlbars-syntax/utils" ,
[ "./builders" , "../htmlbars-util/array-utils" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
var buildText = _ _dependency1 _ _ . buildText ;
var indexOfArray = _ _dependency2 _ _ . indexOfArray ;
// Regex to validate the identifier for block parameters.
// Based on the ID validation regex in Handlebars.
var ID _INVERSE _PATTERN = /[!"#%-,\.\/;->@\[-\^`\{-~]/ ;
// Checks the component's attributes to see if it uses block params.
// If it does, registers the block params with the program and
// removes the corresponding attributes from the element.
function parseComponentBlockParams ( element , program ) {
var l = element . attributes . length ;
var attrNames = [ ] ;
for ( var i = 0 ; i < l ; i ++ ) {
attrNames . push ( element . attributes [ i ] . name ) ;
}
var asIndex = indexOfArray ( attrNames , 'as' ) ;
if ( asIndex !== - 1 && l > asIndex && attrNames [ asIndex + 1 ] . charAt ( 0 ) === '|' ) {
// Some basic validation, since we're doing the parsing ourselves
var paramsString = attrNames . slice ( asIndex ) . join ( ' ' ) ;
if ( paramsString . charAt ( paramsString . length - 1 ) !== '|' || paramsString . match ( /\|/g ) . length !== 2 ) {
throw new Error ( 'Invalid block parameters syntax: \'' + paramsString + '\'' ) ;
}
var params = [ ] ;
for ( i = asIndex + 1 ; i < l ; i ++ ) {
var param = attrNames [ i ] . replace ( /\|/g , '' ) ;
if ( param !== '' ) {
if ( ID _INVERSE _PATTERN . test ( param ) ) {
throw new Error ( 'Invalid identifier for block parameters: \'' + param + '\' in \'' + paramsString + '\'' ) ;
}
params . push ( param ) ;
}
}
if ( params . length === 0 ) {
throw new Error ( 'Cannot use zero block parameters: \'' + paramsString + '\'' ) ;
}
element . attributes = element . attributes . slice ( 0 , asIndex ) ;
program . blockParams = params ;
}
}
_ _exports _ _ . parseComponentBlockParams = parseComponentBlockParams ; // Adds an empty text node at the beginning and end of a program.
// The empty text nodes *between* nodes are handled elsewhere.
function postprocessProgram ( program ) {
var body = program . body ;
if ( body . length === 0 ) {
return ;
}
if ( usesMorph ( body [ 0 ] ) ) {
body . unshift ( buildText ( '' ) ) ;
}
if ( usesMorph ( body [ body . length - 1 ] ) ) {
body . push ( buildText ( '' ) ) ;
}
}
_ _exports _ _ . postprocessProgram = postprocessProgram ; function childrenFor ( node ) {
if ( node . type === 'Program' ) {
return node . body ;
}
if ( node . type === 'ElementNode' ) {
return node . children ;
}
}
_ _exports _ _ . childrenFor = childrenFor ; function usesMorph ( node ) {
return node . type === 'MustacheStatement' ||
node . type === 'BlockStatement' ||
node . type === 'ComponentNode' ;
}
_ _exports _ _ . usesMorph = usesMorph ; function appendChild ( parent , node ) {
var children = childrenFor ( parent ) ;
var len = children . length , last ;
if ( len > 0 ) {
last = children [ len - 1 ] ;
if ( usesMorph ( last ) && usesMorph ( node ) ) {
children . push ( buildText ( '' ) ) ;
}
}
children . push ( node ) ;
}
_ _exports _ _ . appendChild = appendChild ; function isHelper ( sexpr ) {
return ( sexpr . params && sexpr . params . length > 0 ) ||
( sexpr . hash && sexpr . hash . pairs . length > 0 ) ;
}
_ _exports _ _ . isHelper = isHelper ;
} ) ;
define ( "htmlbars-syntax/walker" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function Walker ( order ) {
this . order = order ;
this . stack = [ ] ;
}
_ _exports _ _ [ "default" ] = Walker ;
Walker . prototype . visit = function ( node , callback ) {
if ( ! node ) {
return ;
}
this . stack . push ( node ) ;
if ( this . order === 'post' ) {
this . children ( node , callback ) ;
callback ( node , this ) ;
} else {
callback ( node , this ) ;
this . children ( node , callback ) ;
}
this . stack . pop ( ) ;
} ;
var visitors = {
Program : function ( walker , node , callback ) {
for ( var i = 0 ; i < node . body . length ; i ++ ) {
walker . visit ( node . body [ i ] , callback ) ;
}
} ,
ElementNode : function ( walker , node , callback ) {
for ( var i = 0 ; i < node . children . length ; i ++ ) {
walker . visit ( node . children [ i ] , callback ) ;
}
} ,
BlockStatement : function ( walker , node , callback ) {
walker . visit ( node . program , callback ) ;
walker . visit ( node . inverse , callback ) ;
} ,
ComponentNode : function ( walker , node , callback ) {
walker . visit ( node . program , callback ) ;
}
} ;
Walker . prototype . children = function ( node , callback ) {
var visitor = visitors [ node . type ] ;
if ( visitor ) {
visitor ( this , node , callback ) ;
}
} ;
} ) ;
define ( "htmlbars-test-helpers" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function equalInnerHTML ( fragment , html ) {
var actualHTML = normalizeInnerHTML ( fragment . innerHTML ) ;
QUnit . push ( actualHTML === html , actualHTML , html ) ;
}
_ _exports _ _ . equalInnerHTML = equalInnerHTML ; function equalHTML ( node , html ) {
var fragment ;
if ( ! node . nodeType && node . length ) {
fragment = document . createDocumentFragment ( ) ;
while ( node [ 0 ] ) {
fragment . appendChild ( node [ 0 ] ) ;
}
} else {
fragment = node ;
}
var div = document . createElement ( "div" ) ;
div . appendChild ( fragment . cloneNode ( true ) ) ;
equalInnerHTML ( div , html ) ;
}
_ _exports _ _ . equalHTML = equalHTML ; // detect weird IE8 html strings
var ie8InnerHTMLTestElement = document . createElement ( 'div' ) ;
ie8InnerHTMLTestElement . setAttribute ( 'id' , 'womp' ) ;
var ie8InnerHTML = ( ie8InnerHTMLTestElement . outerHTML . indexOf ( 'id=womp' ) > - 1 ) ;
// detect side-effects of cloning svg elements in IE9-11
var ieSVGInnerHTML = ( function ( ) {
if ( ! document . createElementNS ) {
return false ;
}
var div = document . createElement ( 'div' ) ;
var node = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'svg' ) ;
div . appendChild ( node ) ;
var clone = div . cloneNode ( true ) ;
return clone . innerHTML === '<svg xmlns="http://www.w3.org/2000/svg" />' ;
} ) ( ) ;
function normalizeInnerHTML ( actualHTML ) {
if ( ie8InnerHTML ) {
// drop newlines in IE8
actualHTML = actualHTML . replace ( /\r\n/gm , '' ) ;
// downcase ALLCAPS tags in IE8
actualHTML = actualHTML . replace ( /<\/?[A-Z\-]+/gi , function ( tag ) {
return tag . toLowerCase ( ) ;
} ) ;
// quote ids in IE8
actualHTML = actualHTML . replace ( /id=([^ >]+)/gi , function ( match , id ) {
return 'id="' + id + '"' ;
} ) ;
// IE8 adds ':' to some tags
// <keygen> becomes <:keygen>
actualHTML = actualHTML . replace ( /<(\/?):([^ >]+)/gi , function ( match , slash , tag ) {
return '<' + slash + tag ;
} ) ;
// Normalize the style attribute
actualHTML = actualHTML . replace ( /style="(.+?)"/gi , function ( match , val ) {
return 'style="' + val . toLowerCase ( ) + ';"' ;
} ) ;
}
if ( ieSVGInnerHTML ) {
// Replace `<svg xmlns="http://www.w3.org/2000/svg" height="50%" />` with `<svg height="50%"></svg>`, etc.
// drop namespace attribute
actualHTML = actualHTML . replace ( / xmlns="[^"]+"/ , '' ) ;
// replace self-closing elements
actualHTML = actualHTML . replace ( /<([^ >]+) [^\/>]*\/>/gi , function ( tag , tagName ) {
return tag . slice ( 0 , tag . length - 3 ) + '></' + tagName + '>' ;
} ) ;
}
return actualHTML ;
}
_ _exports _ _ . normalizeInnerHTML = normalizeInnerHTML ; // detect weird IE8 checked element string
var checkedInput = document . createElement ( 'input' ) ;
checkedInput . setAttribute ( 'checked' , 'checked' ) ;
var checkedInputString = checkedInput . outerHTML ;
function isCheckedInputHTML ( element ) {
equal ( element . outerHTML , checkedInputString ) ;
}
_ _exports _ _ . isCheckedInputHTML = isCheckedInputHTML ; // check which property has the node's text content
var textProperty = document . createElement ( 'div' ) . textContent === undefined ? 'innerText' : 'textContent' ;
function getTextContent ( el ) {
// textNode
if ( el . nodeType === 3 ) {
return el . nodeValue ;
} else {
return el [ textProperty ] ;
}
}
_ _exports _ _ . getTextContent = getTextContent ; // IE8 does not have Object.create, so use a polyfill if needed.
// Polyfill based on Mozilla's (MDN)
function createObject ( obj ) {
if ( typeof Object . create === 'function' ) {
return Object . create ( obj ) ;
} else {
var Temp = function ( ) { } ;
Temp . prototype = obj ;
return new Temp ( ) ;
}
}
_ _exports _ _ . createObject = createObject ;
} ) ;
define ( "htmlbars-util" ,
[ "./htmlbars-util/safe-string" , "./htmlbars-util/handlebars/utils" , "./htmlbars-util/namespaces" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _exports _ _ ) {
"use strict" ;
var SafeString = _ _dependency1 _ _ [ "default" ] ;
var escapeExpression = _ _dependency2 _ _ . escapeExpression ;
var getAttrNamespace = _ _dependency3 _ _ . getAttrNamespace ;
_ _exports _ _ . SafeString = SafeString ;
_ _exports _ _ . escapeExpression = escapeExpression ;
_ _exports _ _ . getAttrNamespace = getAttrNamespace ;
} ) ;
define ( "htmlbars-util/array-utils" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function forEach ( array , callback , binding ) {
var i , l ;
if ( binding === undefined ) {
for ( i = 0 , l = array . length ; i < l ; i ++ ) {
callback ( array [ i ] , i , array ) ;
}
} else {
for ( i = 0 , l = array . length ; i < l ; i ++ ) {
callback . call ( binding , array [ i ] , i , array ) ;
}
}
}
_ _exports _ _ . forEach = forEach ; function map ( array , callback ) {
var output = [ ] ;
var i , l ;
for ( i = 0 , l = array . length ; i < l ; i ++ ) {
output . push ( callback ( array [ i ] , i , array ) ) ;
}
return output ;
}
_ _exports _ _ . map = map ; var getIdx ;
if ( Array . prototype . indexOf ) {
getIdx = function ( array , obj , from ) {
return array . indexOf ( obj , from ) ;
} ;
} else {
getIdx = function ( array , obj , from ) {
if ( from === undefined || from === null ) {
from = 0 ;
} else if ( from < 0 ) {
from = Math . max ( 0 , array . length + from ) ;
}
for ( var i = from , l = array . length ; i < l ; i ++ ) {
if ( array [ i ] === obj ) {
return i ;
}
}
return - 1 ;
} ;
}
var indexOfArray = getIdx ;
_ _exports _ _ . indexOfArray = indexOfArray ;
} ) ;
define ( "htmlbars-util/handlebars/safe-string" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
// Build out our basic SafeString type
function SafeString ( string ) {
this . string = string ;
}
SafeString . prototype . toString = SafeString . prototype . toHTML = function ( ) {
return "" + this . string ;
} ;
_ _exports _ _ [ "default" ] = SafeString ;
} ) ;
define ( "htmlbars-util/handlebars/utils" ,
[ "./safe-string" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
/*jshint -W004 */
var SafeString = _ _dependency1 _ _ [ "default" ] ;
var escape = {
"&" : "&" ,
"<" : "<" ,
">" : ">" ,
'"' : """ ,
"'" : "'" ,
"`" : "`"
} ;
var badChars = /[&<>"'`]/g ;
var possible = /[&<>"'`]/ ;
function escapeChar ( chr ) {
return escape [ chr ] ;
}
function extend ( obj /* , ...source */ ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
for ( var key in arguments [ i ] ) {
if ( Object . prototype . hasOwnProperty . call ( arguments [ i ] , key ) ) {
obj [ key ] = arguments [ i ] [ key ] ;
}
}
}
return obj ;
}
_ _exports _ _ . extend = extend ; var toString = Object . prototype . toString ;
_ _exports _ _ . toString = toString ;
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var isFunction = function ( value ) {
return typeof value === 'function' ;
} ;
// fallback for older versions of Chrome and Safari
/* istanbul ignore next */
if ( isFunction ( /x/ ) ) {
isFunction = function ( value ) {
return typeof value === 'function' && toString . call ( value ) === '[object Function]' ;
} ;
}
var isFunction ;
_ _exports _ _ . isFunction = isFunction ;
/* istanbul ignore next */
var isArray = Array . isArray || function ( value ) {
return ( value && typeof value === 'object' ) ? toString . call ( value ) === '[object Array]' : false ;
} ;
_ _exports _ _ . isArray = isArray ;
function escapeExpression ( string ) {
// don't escape SafeStrings, since they're already safe
if ( string && string . toHTML ) {
return string . toHTML ( ) ;
} else if ( string == null ) {
return "" ;
} else if ( ! string ) {
return string + '' ;
}
// Force a string conversion as this will be done by the append regardless and
// the regex test will do this transparently behind the scenes, causing issues if
// an object's to string has escaped characters in it.
string = "" + string ;
if ( ! possible . test ( string ) ) { return string ; }
return string . replace ( badChars , escapeChar ) ;
}
_ _exports _ _ . escapeExpression = escapeExpression ; function isEmpty ( value ) {
if ( ! value && value !== 0 ) {
return true ;
} else if ( isArray ( value ) && value . length === 0 ) {
return true ;
} else {
return false ;
}
}
_ _exports _ _ . isEmpty = isEmpty ; function appendContextPath ( contextPath , id ) {
return ( contextPath ? contextPath + '.' : '' ) + id ;
}
_ _exports _ _ . appendContextPath = appendContextPath ;
} ) ;
define ( "htmlbars-util/namespaces" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
// ref http://dev.w3.org/html5/spec-LC/namespaces.html
var defaultNamespaces = {
html : 'http://www.w3.org/1999/xhtml' ,
mathml : 'http://www.w3.org/1998/Math/MathML' ,
svg : 'http://www.w3.org/2000/svg' ,
xlink : 'http://www.w3.org/1999/xlink' ,
xml : 'http://www.w3.org/XML/1998/namespace'
} ;
function getAttrNamespace ( attrName ) {
var namespace ;
var colonIndex = attrName . indexOf ( ':' ) ;
if ( colonIndex !== - 1 ) {
var prefix = attrName . slice ( 0 , colonIndex ) ;
namespace = defaultNamespaces [ prefix ] ;
}
return namespace || null ;
}
_ _exports _ _ . getAttrNamespace = getAttrNamespace ;
} ) ;
define ( "htmlbars-util/object-utils" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function merge ( options , defaults ) {
for ( var prop in defaults ) {
if ( options . hasOwnProperty ( prop ) ) { continue ; }
options [ prop ] = defaults [ prop ] ;
}
return options ;
}
_ _exports _ _ . merge = merge ;
} ) ;
define ( "htmlbars-util/quoting" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function escapeString ( str ) {
str = str . replace ( /\\/g , "\\\\" ) ;
str = str . replace ( /"/g , '\\"' ) ;
str = str . replace ( /\n/g , "\\n" ) ;
return str ;
}
_ _exports _ _ . escapeString = escapeString ;
function string ( str ) {
return '"' + escapeString ( str ) + '"' ;
}
_ _exports _ _ . string = string ;
function array ( a ) {
return "[" + a + "]" ;
}
_ _exports _ _ . array = array ;
function hash ( pairs ) {
return "{" + pairs . join ( ", " ) + "}" ;
}
_ _exports _ _ . hash = hash ; function repeat ( chars , times ) {
var str = "" ;
while ( times -- ) {
str += chars ;
}
return str ;
}
_ _exports _ _ . repeat = repeat ;
} ) ;
define ( "htmlbars-util/safe-string" ,
[ "./handlebars/safe-string" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var SafeString = _ _dependency1 _ _ [ "default" ] ;
_ _exports _ _ [ "default" ] = SafeString ;
} ) ;
define ( "simple-html-tokenizer" ,
[ "./simple-html-tokenizer/tokenizer" , "./simple-html-tokenizer/tokenize" , "./simple-html-tokenizer/generator" , "./simple-html-tokenizer/generate" , "./simple-html-tokenizer/tokens" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _dependency4 _ _ , _ _dependency5 _ _ , _ _exports _ _ ) {
"use strict" ;
/*jshint boss:true*/
var Tokenizer = _ _dependency1 _ _ [ "default" ] ;
var tokenize = _ _dependency2 _ _ [ "default" ] ;
var Generator = _ _dependency3 _ _ [ "default" ] ;
var generate = _ _dependency4 _ _ [ "default" ] ;
var StartTag = _ _dependency5 _ _ . StartTag ;
var EndTag = _ _dependency5 _ _ . EndTag ;
var Chars = _ _dependency5 _ _ . Chars ;
var Comment = _ _dependency5 _ _ . Comment ;
_ _exports _ _ . Tokenizer = Tokenizer ;
_ _exports _ _ . tokenize = tokenize ;
_ _exports _ _ . Generator = Generator ;
_ _exports _ _ . generate = generate ;
_ _exports _ _ . StartTag = StartTag ;
_ _exports _ _ . EndTag = EndTag ;
_ _exports _ _ . Chars = Chars ;
_ _exports _ _ . Comment = Comment ;
} ) ;
define ( "simple-html-tokenizer/char-refs/full" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
_ _exports _ _ [ "default" ] = {
AElig : [ 198 ] ,
AMP : [ 38 ] ,
Aacute : [ 193 ] ,
Abreve : [ 258 ] ,
Acirc : [ 194 ] ,
Acy : [ 1040 ] ,
Afr : [ 120068 ] ,
Agrave : [ 192 ] ,
Alpha : [ 913 ] ,
Amacr : [ 256 ] ,
And : [ 10835 ] ,
Aogon : [ 260 ] ,
Aopf : [ 120120 ] ,
ApplyFunction : [ 8289 ] ,
Aring : [ 197 ] ,
Ascr : [ 119964 ] ,
Assign : [ 8788 ] ,
Atilde : [ 195 ] ,
Auml : [ 196 ] ,
Backslash : [ 8726 ] ,
Barv : [ 10983 ] ,
Barwed : [ 8966 ] ,
Bcy : [ 1041 ] ,
Because : [ 8757 ] ,
Bernoullis : [ 8492 ] ,
Beta : [ 914 ] ,
Bfr : [ 120069 ] ,
Bopf : [ 120121 ] ,
Breve : [ 728 ] ,
Bscr : [ 8492 ] ,
Bumpeq : [ 8782 ] ,
CHcy : [ 1063 ] ,
COPY : [ 169 ] ,
Cacute : [ 262 ] ,
Cap : [ 8914 ] ,
CapitalDifferentialD : [ 8517 ] ,
Cayleys : [ 8493 ] ,
Ccaron : [ 268 ] ,
Ccedil : [ 199 ] ,
Ccirc : [ 264 ] ,
Cconint : [ 8752 ] ,
Cdot : [ 266 ] ,
Cedilla : [ 184 ] ,
CenterDot : [ 183 ] ,
Cfr : [ 8493 ] ,
Chi : [ 935 ] ,
CircleDot : [ 8857 ] ,
CircleMinus : [ 8854 ] ,
CirclePlus : [ 8853 ] ,
CircleTimes : [ 8855 ] ,
ClockwiseContourIntegral : [ 8754 ] ,
CloseCurlyDoubleQuote : [ 8221 ] ,
CloseCurlyQuote : [ 8217 ] ,
Colon : [ 8759 ] ,
Colone : [ 10868 ] ,
Congruent : [ 8801 ] ,
Conint : [ 8751 ] ,
ContourIntegral : [ 8750 ] ,
Copf : [ 8450 ] ,
Coproduct : [ 8720 ] ,
CounterClockwiseContourIntegral : [ 8755 ] ,
Cross : [ 10799 ] ,
Cscr : [ 119966 ] ,
Cup : [ 8915 ] ,
CupCap : [ 8781 ] ,
DD : [ 8517 ] ,
DDotrahd : [ 10513 ] ,
DJcy : [ 1026 ] ,
DScy : [ 1029 ] ,
DZcy : [ 1039 ] ,
Dagger : [ 8225 ] ,
Darr : [ 8609 ] ,
Dashv : [ 10980 ] ,
Dcaron : [ 270 ] ,
Dcy : [ 1044 ] ,
Del : [ 8711 ] ,
Delta : [ 916 ] ,
Dfr : [ 120071 ] ,
DiacriticalAcute : [ 180 ] ,
DiacriticalDot : [ 729 ] ,
DiacriticalDoubleAcute : [ 733 ] ,
DiacriticalGrave : [ 96 ] ,
DiacriticalTilde : [ 732 ] ,
Diamond : [ 8900 ] ,
DifferentialD : [ 8518 ] ,
Dopf : [ 120123 ] ,
Dot : [ 168 ] ,
DotDot : [ 8412 ] ,
DotEqual : [ 8784 ] ,
DoubleContourIntegral : [ 8751 ] ,
DoubleDot : [ 168 ] ,
DoubleDownArrow : [ 8659 ] ,
DoubleLeftArrow : [ 8656 ] ,
DoubleLeftRightArrow : [ 8660 ] ,
DoubleLeftTee : [ 10980 ] ,
DoubleLongLeftArrow : [ 10232 ] ,
DoubleLongLeftRightArrow : [ 10234 ] ,
DoubleLongRightArrow : [ 10233 ] ,
DoubleRightArrow : [ 8658 ] ,
DoubleRightTee : [ 8872 ] ,
DoubleUpArrow : [ 8657 ] ,
DoubleUpDownArrow : [ 8661 ] ,
DoubleVerticalBar : [ 8741 ] ,
DownArrow : [ 8595 ] ,
DownArrowBar : [ 10515 ] ,
DownArrowUpArrow : [ 8693 ] ,
DownBreve : [ 785 ] ,
DownLeftRightVector : [ 10576 ] ,
DownLeftTeeVector : [ 10590 ] ,
DownLeftVector : [ 8637 ] ,
DownLeftVectorBar : [ 10582 ] ,
DownRightTeeVector : [ 10591 ] ,
DownRightVector : [ 8641 ] ,
DownRightVectorBar : [ 10583 ] ,
DownTee : [ 8868 ] ,
DownTeeArrow : [ 8615 ] ,
Downarrow : [ 8659 ] ,
Dscr : [ 119967 ] ,
Dstrok : [ 272 ] ,
ENG : [ 330 ] ,
ETH : [ 208 ] ,
Eacute : [ 201 ] ,
Ecaron : [ 282 ] ,
Ecirc : [ 202 ] ,
Ecy : [ 1069 ] ,
Edot : [ 278 ] ,
Efr : [ 120072 ] ,
Egrave : [ 200 ] ,
Element : [ 8712 ] ,
Emacr : [ 274 ] ,
EmptySmallSquare : [ 9723 ] ,
EmptyVerySmallSquare : [ 9643 ] ,
Eogon : [ 280 ] ,
Eopf : [ 120124 ] ,
Epsilon : [ 917 ] ,
Equal : [ 10869 ] ,
EqualTilde : [ 8770 ] ,
Equilibrium : [ 8652 ] ,
Escr : [ 8496 ] ,
Esim : [ 10867 ] ,
Eta : [ 919 ] ,
Euml : [ 203 ] ,
Exists : [ 8707 ] ,
ExponentialE : [ 8519 ] ,
Fcy : [ 1060 ] ,
Ffr : [ 120073 ] ,
FilledSmallSquare : [ 9724 ] ,
FilledVerySmallSquare : [ 9642 ] ,
Fopf : [ 120125 ] ,
ForAll : [ 8704 ] ,
Fouriertrf : [ 8497 ] ,
Fscr : [ 8497 ] ,
GJcy : [ 1027 ] ,
GT : [ 62 ] ,
Gamma : [ 915 ] ,
Gammad : [ 988 ] ,
Gbreve : [ 286 ] ,
Gcedil : [ 290 ] ,
Gcirc : [ 284 ] ,
Gcy : [ 1043 ] ,
Gdot : [ 288 ] ,
Gfr : [ 120074 ] ,
Gg : [ 8921 ] ,
Gopf : [ 120126 ] ,
GreaterEqual : [ 8805 ] ,
GreaterEqualLess : [ 8923 ] ,
GreaterFullEqual : [ 8807 ] ,
GreaterGreater : [ 10914 ] ,
GreaterLess : [ 8823 ] ,
GreaterSlantEqual : [ 10878 ] ,
GreaterTilde : [ 8819 ] ,
Gscr : [ 119970 ] ,
Gt : [ 8811 ] ,
HARDcy : [ 1066 ] ,
Hacek : [ 711 ] ,
Hat : [ 94 ] ,
Hcirc : [ 292 ] ,
Hfr : [ 8460 ] ,
HilbertSpace : [ 8459 ] ,
Hopf : [ 8461 ] ,
HorizontalLine : [ 9472 ] ,
Hscr : [ 8459 ] ,
Hstrok : [ 294 ] ,
HumpDownHump : [ 8782 ] ,
HumpEqual : [ 8783 ] ,
IEcy : [ 1045 ] ,
IJlig : [ 306 ] ,
IOcy : [ 1025 ] ,
Iacute : [ 205 ] ,
Icirc : [ 206 ] ,
Icy : [ 1048 ] ,
Idot : [ 304 ] ,
Ifr : [ 8465 ] ,
Igrave : [ 204 ] ,
Im : [ 8465 ] ,
Imacr : [ 298 ] ,
ImaginaryI : [ 8520 ] ,
Implies : [ 8658 ] ,
Int : [ 8748 ] ,
Integral : [ 8747 ] ,
Intersection : [ 8898 ] ,
InvisibleComma : [ 8291 ] ,
InvisibleTimes : [ 8290 ] ,
Iogon : [ 302 ] ,
Iopf : [ 120128 ] ,
Iota : [ 921 ] ,
Iscr : [ 8464 ] ,
Itilde : [ 296 ] ,
Iukcy : [ 1030 ] ,
Iuml : [ 207 ] ,
Jcirc : [ 308 ] ,
Jcy : [ 1049 ] ,
Jfr : [ 120077 ] ,
Jopf : [ 120129 ] ,
Jscr : [ 119973 ] ,
Jsercy : [ 1032 ] ,
Jukcy : [ 1028 ] ,
KHcy : [ 1061 ] ,
KJcy : [ 1036 ] ,
Kappa : [ 922 ] ,
Kcedil : [ 310 ] ,
Kcy : [ 1050 ] ,
Kfr : [ 120078 ] ,
Kopf : [ 120130 ] ,
Kscr : [ 119974 ] ,
LJcy : [ 1033 ] ,
LT : [ 60 ] ,
Lacute : [ 313 ] ,
Lambda : [ 923 ] ,
Lang : [ 10218 ] ,
Laplacetrf : [ 8466 ] ,
Larr : [ 8606 ] ,
Lcaron : [ 317 ] ,
Lcedil : [ 315 ] ,
Lcy : [ 1051 ] ,
LeftAngleBracket : [ 10216 ] ,
LeftArrow : [ 8592 ] ,
LeftArrowBar : [ 8676 ] ,
LeftArrowRightArrow : [ 8646 ] ,
LeftCeiling : [ 8968 ] ,
LeftDoubleBracket : [ 10214 ] ,
LeftDownTeeVector : [ 10593 ] ,
LeftDownVector : [ 8643 ] ,
LeftDownVectorBar : [ 10585 ] ,
LeftFloor : [ 8970 ] ,
LeftRightArrow : [ 8596 ] ,
LeftRightVector : [ 10574 ] ,
LeftTee : [ 8867 ] ,
LeftTeeArrow : [ 8612 ] ,
LeftTeeVector : [ 10586 ] ,
LeftTriangle : [ 8882 ] ,
LeftTriangleBar : [ 10703 ] ,
LeftTriangleEqual : [ 8884 ] ,
LeftUpDownVector : [ 10577 ] ,
LeftUpTeeVector : [ 10592 ] ,
LeftUpVector : [ 8639 ] ,
LeftUpVectorBar : [ 10584 ] ,
LeftVector : [ 8636 ] ,
LeftVectorBar : [ 10578 ] ,
Leftarrow : [ 8656 ] ,
Leftrightarrow : [ 8660 ] ,
LessEqualGreater : [ 8922 ] ,
LessFullEqual : [ 8806 ] ,
LessGreater : [ 8822 ] ,
LessLess : [ 10913 ] ,
LessSlantEqual : [ 10877 ] ,
LessTilde : [ 8818 ] ,
Lfr : [ 120079 ] ,
Ll : [ 8920 ] ,
Lleftarrow : [ 8666 ] ,
Lmidot : [ 319 ] ,
LongLeftArrow : [ 10229 ] ,
LongLeftRightArrow : [ 10231 ] ,
LongRightArrow : [ 10230 ] ,
Longleftarrow : [ 10232 ] ,
Longleftrightarrow : [ 10234 ] ,
Longrightarrow : [ 10233 ] ,
Lopf : [ 120131 ] ,
LowerLeftArrow : [ 8601 ] ,
LowerRightArrow : [ 8600 ] ,
Lscr : [ 8466 ] ,
Lsh : [ 8624 ] ,
Lstrok : [ 321 ] ,
Lt : [ 8810 ] ,
Map : [ 10501 ] ,
Mcy : [ 1052 ] ,
MediumSpace : [ 8287 ] ,
Mellintrf : [ 8499 ] ,
Mfr : [ 120080 ] ,
MinusPlus : [ 8723 ] ,
Mopf : [ 120132 ] ,
Mscr : [ 8499 ] ,
Mu : [ 924 ] ,
NJcy : [ 1034 ] ,
Nacute : [ 323 ] ,
Ncaron : [ 327 ] ,
Ncedil : [ 325 ] ,
Ncy : [ 1053 ] ,
NegativeMediumSpace : [ 8203 ] ,
NegativeThickSpace : [ 8203 ] ,
NegativeThinSpace : [ 8203 ] ,
NegativeVeryThinSpace : [ 8203 ] ,
NestedGreaterGreater : [ 8811 ] ,
NestedLessLess : [ 8810 ] ,
NewLine : [ 10 ] ,
Nfr : [ 120081 ] ,
NoBreak : [ 8288 ] ,
NonBreakingSpace : [ 160 ] ,
Nopf : [ 8469 ] ,
Not : [ 10988 ] ,
NotCongruent : [ 8802 ] ,
NotCupCap : [ 8813 ] ,
NotDoubleVerticalBar : [ 8742 ] ,
NotElement : [ 8713 ] ,
NotEqual : [ 8800 ] ,
NotEqualTilde : [ 8770 , 824 ] ,
NotExists : [ 8708 ] ,
NotGreater : [ 8815 ] ,
NotGreaterEqual : [ 8817 ] ,
NotGreaterFullEqual : [ 8807 , 824 ] ,
NotGreaterGreater : [ 8811 , 824 ] ,
NotGreaterLess : [ 8825 ] ,
NotGreaterSlantEqual : [ 10878 , 824 ] ,
NotGreaterTilde : [ 8821 ] ,
NotHumpDownHump : [ 8782 , 824 ] ,
NotHumpEqual : [ 8783 , 824 ] ,
NotLeftTriangle : [ 8938 ] ,
NotLeftTriangleBar : [ 10703 , 824 ] ,
NotLeftTriangleEqual : [ 8940 ] ,
NotLess : [ 8814 ] ,
NotLessEqual : [ 8816 ] ,
NotLessGreater : [ 8824 ] ,
NotLessLess : [ 8810 , 824 ] ,
NotLessSlantEqual : [ 10877 , 824 ] ,
NotLessTilde : [ 8820 ] ,
NotNestedGreaterGreater : [ 10914 , 824 ] ,
NotNestedLessLess : [ 10913 , 824 ] ,
NotPrecedes : [ 8832 ] ,
NotPrecedesEqual : [ 10927 , 824 ] ,
NotPrecedesSlantEqual : [ 8928 ] ,
NotReverseElement : [ 8716 ] ,
NotRightTriangle : [ 8939 ] ,
NotRightTriangleBar : [ 10704 , 824 ] ,
NotRightTriangleEqual : [ 8941 ] ,
NotSquareSubset : [ 8847 , 824 ] ,
NotSquareSubsetEqual : [ 8930 ] ,
NotSquareSuperset : [ 8848 , 824 ] ,
NotSquareSupersetEqual : [ 8931 ] ,
NotSubset : [ 8834 , 8402 ] ,
NotSubsetEqual : [ 8840 ] ,
NotSucceeds : [ 8833 ] ,
NotSucceedsEqual : [ 10928 , 824 ] ,
NotSucceedsSlantEqual : [ 8929 ] ,
NotSucceedsTilde : [ 8831 , 824 ] ,
NotSuperset : [ 8835 , 8402 ] ,
NotSupersetEqual : [ 8841 ] ,
NotTilde : [ 8769 ] ,
NotTildeEqual : [ 8772 ] ,
NotTildeFullEqual : [ 8775 ] ,
NotTildeTilde : [ 8777 ] ,
NotVerticalBar : [ 8740 ] ,
Nscr : [ 119977 ] ,
Ntilde : [ 209 ] ,
Nu : [ 925 ] ,
OElig : [ 338 ] ,
Oacute : [ 211 ] ,
Ocirc : [ 212 ] ,
Ocy : [ 1054 ] ,
Odblac : [ 336 ] ,
Ofr : [ 120082 ] ,
Ograve : [ 210 ] ,
Omacr : [ 332 ] ,
Omega : [ 937 ] ,
Omicron : [ 927 ] ,
Oopf : [ 120134 ] ,
OpenCurlyDoubleQuote : [ 8220 ] ,
OpenCurlyQuote : [ 8216 ] ,
Or : [ 10836 ] ,
Oscr : [ 119978 ] ,
Oslash : [ 216 ] ,
Otilde : [ 213 ] ,
Otimes : [ 10807 ] ,
Ouml : [ 214 ] ,
OverBar : [ 8254 ] ,
OverBrace : [ 9182 ] ,
OverBracket : [ 9140 ] ,
OverParenthesis : [ 9180 ] ,
PartialD : [ 8706 ] ,
Pcy : [ 1055 ] ,
Pfr : [ 120083 ] ,
Phi : [ 934 ] ,
Pi : [ 928 ] ,
PlusMinus : [ 177 ] ,
Poincareplane : [ 8460 ] ,
Popf : [ 8473 ] ,
Pr : [ 10939 ] ,
Precedes : [ 8826 ] ,
PrecedesEqual : [ 10927 ] ,
PrecedesSlantEqual : [ 8828 ] ,
PrecedesTilde : [ 8830 ] ,
Prime : [ 8243 ] ,
Product : [ 8719 ] ,
Proportion : [ 8759 ] ,
Proportional : [ 8733 ] ,
Pscr : [ 119979 ] ,
Psi : [ 936 ] ,
QUOT : [ 34 ] ,
Qfr : [ 120084 ] ,
Qopf : [ 8474 ] ,
Qscr : [ 119980 ] ,
RBarr : [ 10512 ] ,
REG : [ 174 ] ,
Racute : [ 340 ] ,
Rang : [ 10219 ] ,
Rarr : [ 8608 ] ,
Rarrtl : [ 10518 ] ,
Rcaron : [ 344 ] ,
Rcedil : [ 342 ] ,
Rcy : [ 1056 ] ,
Re : [ 8476 ] ,
ReverseElement : [ 8715 ] ,
ReverseEquilibrium : [ 8651 ] ,
ReverseUpEquilibrium : [ 10607 ] ,
Rfr : [ 8476 ] ,
Rho : [ 929 ] ,
RightAngleBracket : [ 10217 ] ,
RightArrow : [ 8594 ] ,
RightArrowBar : [ 8677 ] ,
RightArrowLeftArrow : [ 8644 ] ,
RightCeiling : [ 8969 ] ,
RightDoubleBracket : [ 10215 ] ,
RightDownTeeVector : [ 10589 ] ,
RightDownVector : [ 8642 ] ,
RightDownVectorBar : [ 10581 ] ,
RightFloor : [ 8971 ] ,
RightTee : [ 8866 ] ,
RightTeeArrow : [ 8614 ] ,
RightTeeVector : [ 10587 ] ,
RightTriangle : [ 8883 ] ,
RightTriangleBar : [ 10704 ] ,
RightTriangleEqual : [ 8885 ] ,
RightUpDownVector : [ 10575 ] ,
RightUpTeeVector : [ 10588 ] ,
RightUpVector : [ 8638 ] ,
RightUpVectorBar : [ 10580 ] ,
RightVector : [ 8640 ] ,
RightVectorBar : [ 10579 ] ,
Rightarrow : [ 8658 ] ,
Ropf : [ 8477 ] ,
RoundImplies : [ 10608 ] ,
Rrightarrow : [ 8667 ] ,
Rscr : [ 8475 ] ,
Rsh : [ 8625 ] ,
RuleDelayed : [ 10740 ] ,
SHCHcy : [ 1065 ] ,
SHcy : [ 1064 ] ,
SOFTcy : [ 1068 ] ,
Sacute : [ 346 ] ,
Sc : [ 10940 ] ,
Scaron : [ 352 ] ,
Scedil : [ 350 ] ,
Scirc : [ 348 ] ,
Scy : [ 1057 ] ,
Sfr : [ 120086 ] ,
ShortDownArrow : [ 8595 ] ,
ShortLeftArrow : [ 8592 ] ,
ShortRightArrow : [ 8594 ] ,
ShortUpArrow : [ 8593 ] ,
Sigma : [ 931 ] ,
SmallCircle : [ 8728 ] ,
Sopf : [ 120138 ] ,
Sqrt : [ 8730 ] ,
Square : [ 9633 ] ,
SquareIntersection : [ 8851 ] ,
SquareSubset : [ 8847 ] ,
SquareSubsetEqual : [ 8849 ] ,
SquareSuperset : [ 8848 ] ,
SquareSupersetEqual : [ 8850 ] ,
SquareUnion : [ 8852 ] ,
Sscr : [ 119982 ] ,
Star : [ 8902 ] ,
Sub : [ 8912 ] ,
Subset : [ 8912 ] ,
SubsetEqual : [ 8838 ] ,
Succeeds : [ 8827 ] ,
SucceedsEqual : [ 10928 ] ,
SucceedsSlantEqual : [ 8829 ] ,
SucceedsTilde : [ 8831 ] ,
SuchThat : [ 8715 ] ,
Sum : [ 8721 ] ,
Sup : [ 8913 ] ,
Superset : [ 8835 ] ,
SupersetEqual : [ 8839 ] ,
Supset : [ 8913 ] ,
THORN : [ 222 ] ,
TRADE : [ 8482 ] ,
TSHcy : [ 1035 ] ,
TScy : [ 1062 ] ,
Tab : [ 9 ] ,
Tau : [ 932 ] ,
Tcaron : [ 356 ] ,
Tcedil : [ 354 ] ,
Tcy : [ 1058 ] ,
Tfr : [ 120087 ] ,
Therefore : [ 8756 ] ,
Theta : [ 920 ] ,
ThickSpace : [ 8287 , 8202 ] ,
ThinSpace : [ 8201 ] ,
Tilde : [ 8764 ] ,
TildeEqual : [ 8771 ] ,
TildeFullEqual : [ 8773 ] ,
TildeTilde : [ 8776 ] ,
Topf : [ 120139 ] ,
TripleDot : [ 8411 ] ,
Tscr : [ 119983 ] ,
Tstrok : [ 358 ] ,
Uacute : [ 218 ] ,
Uarr : [ 8607 ] ,
Uarrocir : [ 10569 ] ,
Ubrcy : [ 1038 ] ,
Ubreve : [ 364 ] ,
Ucirc : [ 219 ] ,
Ucy : [ 1059 ] ,
Udblac : [ 368 ] ,
Ufr : [ 120088 ] ,
Ugrave : [ 217 ] ,
Umacr : [ 362 ] ,
UnderBar : [ 95 ] ,
UnderBrace : [ 9183 ] ,
UnderBracket : [ 9141 ] ,
UnderParenthesis : [ 9181 ] ,
Union : [ 8899 ] ,
UnionPlus : [ 8846 ] ,
Uogon : [ 370 ] ,
Uopf : [ 120140 ] ,
UpArrow : [ 8593 ] ,
UpArrowBar : [ 10514 ] ,
UpArrowDownArrow : [ 8645 ] ,
UpDownArrow : [ 8597 ] ,
UpEquilibrium : [ 10606 ] ,
UpTee : [ 8869 ] ,
UpTeeArrow : [ 8613 ] ,
Uparrow : [ 8657 ] ,
Updownarrow : [ 8661 ] ,
UpperLeftArrow : [ 8598 ] ,
UpperRightArrow : [ 8599 ] ,
Upsi : [ 978 ] ,
Upsilon : [ 933 ] ,
Uring : [ 366 ] ,
Uscr : [ 119984 ] ,
Utilde : [ 360 ] ,
Uuml : [ 220 ] ,
VDash : [ 8875 ] ,
Vbar : [ 10987 ] ,
Vcy : [ 1042 ] ,
Vdash : [ 8873 ] ,
Vdashl : [ 10982 ] ,
Vee : [ 8897 ] ,
Verbar : [ 8214 ] ,
Vert : [ 8214 ] ,
VerticalBar : [ 8739 ] ,
VerticalLine : [ 124 ] ,
VerticalSeparator : [ 10072 ] ,
VerticalTilde : [ 8768 ] ,
VeryThinSpace : [ 8202 ] ,
Vfr : [ 120089 ] ,
Vopf : [ 120141 ] ,
Vscr : [ 119985 ] ,
Vvdash : [ 8874 ] ,
Wcirc : [ 372 ] ,
Wedge : [ 8896 ] ,
Wfr : [ 120090 ] ,
Wopf : [ 120142 ] ,
Wscr : [ 119986 ] ,
Xfr : [ 120091 ] ,
Xi : [ 926 ] ,
Xopf : [ 120143 ] ,
Xscr : [ 119987 ] ,
YAcy : [ 1071 ] ,
YIcy : [ 1031 ] ,
YUcy : [ 1070 ] ,
Yacute : [ 221 ] ,
Ycirc : [ 374 ] ,
Ycy : [ 1067 ] ,
Yfr : [ 120092 ] ,
Yopf : [ 120144 ] ,
Yscr : [ 119988 ] ,
Yuml : [ 376 ] ,
ZHcy : [ 1046 ] ,
Zacute : [ 377 ] ,
Zcaron : [ 381 ] ,
Zcy : [ 1047 ] ,
Zdot : [ 379 ] ,
ZeroWidthSpace : [ 8203 ] ,
Zeta : [ 918 ] ,
Zfr : [ 8488 ] ,
Zopf : [ 8484 ] ,
Zscr : [ 119989 ] ,
aacute : [ 225 ] ,
abreve : [ 259 ] ,
ac : [ 8766 ] ,
acE : [ 8766 , 819 ] ,
acd : [ 8767 ] ,
acirc : [ 226 ] ,
acute : [ 180 ] ,
acy : [ 1072 ] ,
aelig : [ 230 ] ,
af : [ 8289 ] ,
afr : [ 120094 ] ,
agrave : [ 224 ] ,
alefsym : [ 8501 ] ,
aleph : [ 8501 ] ,
alpha : [ 945 ] ,
amacr : [ 257 ] ,
amalg : [ 10815 ] ,
amp : [ 38 ] ,
and : [ 8743 ] ,
andand : [ 10837 ] ,
andd : [ 10844 ] ,
andslope : [ 10840 ] ,
andv : [ 10842 ] ,
ang : [ 8736 ] ,
ange : [ 10660 ] ,
angle : [ 8736 ] ,
angmsd : [ 8737 ] ,
angmsdaa : [ 10664 ] ,
angmsdab : [ 10665 ] ,
angmsdac : [ 10666 ] ,
angmsdad : [ 10667 ] ,
angmsdae : [ 10668 ] ,
angmsdaf : [ 10669 ] ,
angmsdag : [ 10670 ] ,
angmsdah : [ 10671 ] ,
angrt : [ 8735 ] ,
angrtvb : [ 8894 ] ,
angrtvbd : [ 10653 ] ,
angsph : [ 8738 ] ,
angst : [ 197 ] ,
angzarr : [ 9084 ] ,
aogon : [ 261 ] ,
aopf : [ 120146 ] ,
ap : [ 8776 ] ,
apE : [ 10864 ] ,
apacir : [ 10863 ] ,
ape : [ 8778 ] ,
apid : [ 8779 ] ,
apos : [ 39 ] ,
approx : [ 8776 ] ,
approxeq : [ 8778 ] ,
aring : [ 229 ] ,
ascr : [ 119990 ] ,
ast : [ 42 ] ,
asymp : [ 8776 ] ,
asympeq : [ 8781 ] ,
atilde : [ 227 ] ,
auml : [ 228 ] ,
awconint : [ 8755 ] ,
awint : [ 10769 ] ,
bNot : [ 10989 ] ,
backcong : [ 8780 ] ,
backepsilon : [ 1014 ] ,
backprime : [ 8245 ] ,
backsim : [ 8765 ] ,
backsimeq : [ 8909 ] ,
barvee : [ 8893 ] ,
barwed : [ 8965 ] ,
barwedge : [ 8965 ] ,
bbrk : [ 9141 ] ,
bbrktbrk : [ 9142 ] ,
bcong : [ 8780 ] ,
bcy : [ 1073 ] ,
bdquo : [ 8222 ] ,
becaus : [ 8757 ] ,
because : [ 8757 ] ,
bemptyv : [ 10672 ] ,
bepsi : [ 1014 ] ,
bernou : [ 8492 ] ,
beta : [ 946 ] ,
beth : [ 8502 ] ,
between : [ 8812 ] ,
bfr : [ 120095 ] ,
bigcap : [ 8898 ] ,
bigcirc : [ 9711 ] ,
bigcup : [ 8899 ] ,
bigodot : [ 10752 ] ,
bigoplus : [ 10753 ] ,
bigotimes : [ 10754 ] ,
bigsqcup : [ 10758 ] ,
bigstar : [ 9733 ] ,
bigtriangledown : [ 9661 ] ,
bigtriangleup : [ 9651 ] ,
biguplus : [ 10756 ] ,
bigvee : [ 8897 ] ,
bigwedge : [ 8896 ] ,
bkarow : [ 10509 ] ,
blacklozenge : [ 10731 ] ,
blacksquare : [ 9642 ] ,
blacktriangle : [ 9652 ] ,
blacktriangledown : [ 9662 ] ,
blacktriangleleft : [ 9666 ] ,
blacktriangleright : [ 9656 ] ,
blank : [ 9251 ] ,
blk12 : [ 9618 ] ,
blk14 : [ 9617 ] ,
blk34 : [ 9619 ] ,
block : [ 9608 ] ,
bne : [ 61 , 8421 ] ,
bnequiv : [ 8801 , 8421 ] ,
bnot : [ 8976 ] ,
bopf : [ 120147 ] ,
bot : [ 8869 ] ,
bottom : [ 8869 ] ,
bowtie : [ 8904 ] ,
boxDL : [ 9559 ] ,
boxDR : [ 9556 ] ,
boxDl : [ 9558 ] ,
boxDr : [ 9555 ] ,
boxH : [ 9552 ] ,
boxHD : [ 9574 ] ,
boxHU : [ 9577 ] ,
boxHd : [ 9572 ] ,
boxHu : [ 9575 ] ,
boxUL : [ 9565 ] ,
boxUR : [ 9562 ] ,
boxUl : [ 9564 ] ,
boxUr : [ 9561 ] ,
boxV : [ 9553 ] ,
boxVH : [ 9580 ] ,
boxVL : [ 9571 ] ,
boxVR : [ 9568 ] ,
boxVh : [ 9579 ] ,
boxVl : [ 9570 ] ,
boxVr : [ 9567 ] ,
boxbox : [ 10697 ] ,
boxdL : [ 9557 ] ,
boxdR : [ 9554 ] ,
boxdl : [ 9488 ] ,
boxdr : [ 9484 ] ,
boxh : [ 9472 ] ,
boxhD : [ 9573 ] ,
boxhU : [ 9576 ] ,
boxhd : [ 9516 ] ,
boxhu : [ 9524 ] ,
boxminus : [ 8863 ] ,
boxplus : [ 8862 ] ,
boxtimes : [ 8864 ] ,
boxuL : [ 9563 ] ,
boxuR : [ 9560 ] ,
boxul : [ 9496 ] ,
boxur : [ 9492 ] ,
boxv : [ 9474 ] ,
boxvH : [ 9578 ] ,
boxvL : [ 9569 ] ,
boxvR : [ 9566 ] ,
boxvh : [ 9532 ] ,
boxvl : [ 9508 ] ,
boxvr : [ 9500 ] ,
bprime : [ 8245 ] ,
breve : [ 728 ] ,
brvbar : [ 166 ] ,
bscr : [ 119991 ] ,
bsemi : [ 8271 ] ,
bsim : [ 8765 ] ,
bsime : [ 8909 ] ,
bsol : [ 92 ] ,
bsolb : [ 10693 ] ,
bsolhsub : [ 10184 ] ,
bull : [ 8226 ] ,
bullet : [ 8226 ] ,
bump : [ 8782 ] ,
bumpE : [ 10926 ] ,
bumpe : [ 8783 ] ,
bumpeq : [ 8783 ] ,
cacute : [ 263 ] ,
cap : [ 8745 ] ,
capand : [ 10820 ] ,
capbrcup : [ 10825 ] ,
capcap : [ 10827 ] ,
capcup : [ 10823 ] ,
capdot : [ 10816 ] ,
caps : [ 8745 , 65024 ] ,
caret : [ 8257 ] ,
caron : [ 711 ] ,
ccaps : [ 10829 ] ,
ccaron : [ 269 ] ,
ccedil : [ 231 ] ,
ccirc : [ 265 ] ,
ccups : [ 10828 ] ,
ccupssm : [ 10832 ] ,
cdot : [ 267 ] ,
cedil : [ 184 ] ,
cemptyv : [ 10674 ] ,
cent : [ 162 ] ,
centerdot : [ 183 ] ,
cfr : [ 120096 ] ,
chcy : [ 1095 ] ,
check : [ 10003 ] ,
checkmark : [ 10003 ] ,
chi : [ 967 ] ,
cir : [ 9675 ] ,
cirE : [ 10691 ] ,
circ : [ 710 ] ,
circeq : [ 8791 ] ,
circlearrowleft : [ 8634 ] ,
circlearrowright : [ 8635 ] ,
circledR : [ 174 ] ,
circledS : [ 9416 ] ,
circledast : [ 8859 ] ,
circledcirc : [ 8858 ] ,
circleddash : [ 8861 ] ,
cire : [ 8791 ] ,
cirfnint : [ 10768 ] ,
cirmid : [ 10991 ] ,
cirscir : [ 10690 ] ,
clubs : [ 9827 ] ,
clubsuit : [ 9827 ] ,
colon : [ 58 ] ,
colone : [ 8788 ] ,
coloneq : [ 8788 ] ,
comma : [ 44 ] ,
commat : [ 64 ] ,
comp : [ 8705 ] ,
compfn : [ 8728 ] ,
complement : [ 8705 ] ,
complexes : [ 8450 ] ,
cong : [ 8773 ] ,
congdot : [ 10861 ] ,
conint : [ 8750 ] ,
copf : [ 120148 ] ,
coprod : [ 8720 ] ,
copy : [ 169 ] ,
copysr : [ 8471 ] ,
crarr : [ 8629 ] ,
cross : [ 10007 ] ,
cscr : [ 119992 ] ,
csub : [ 10959 ] ,
csube : [ 10961 ] ,
csup : [ 10960 ] ,
csupe : [ 10962 ] ,
ctdot : [ 8943 ] ,
cudarrl : [ 10552 ] ,
cudarrr : [ 10549 ] ,
cuepr : [ 8926 ] ,
cuesc : [ 8927 ] ,
cularr : [ 8630 ] ,
cularrp : [ 10557 ] ,
cup : [ 8746 ] ,
cupbrcap : [ 10824 ] ,
cupcap : [ 10822 ] ,
cupcup : [ 10826 ] ,
cupdot : [ 8845 ] ,
cupor : [ 10821 ] ,
cups : [ 8746 , 65024 ] ,
curarr : [ 8631 ] ,
curarrm : [ 10556 ] ,
curlyeqprec : [ 8926 ] ,
curlyeqsucc : [ 8927 ] ,
curlyvee : [ 8910 ] ,
curlywedge : [ 8911 ] ,
curren : [ 164 ] ,
curvearrowleft : [ 8630 ] ,
curvearrowright : [ 8631 ] ,
cuvee : [ 8910 ] ,
cuwed : [ 8911 ] ,
cwconint : [ 8754 ] ,
cwint : [ 8753 ] ,
cylcty : [ 9005 ] ,
dArr : [ 8659 ] ,
dHar : [ 10597 ] ,
dagger : [ 8224 ] ,
daleth : [ 8504 ] ,
darr : [ 8595 ] ,
dash : [ 8208 ] ,
dashv : [ 8867 ] ,
dbkarow : [ 10511 ] ,
dblac : [ 733 ] ,
dcaron : [ 271 ] ,
dcy : [ 1076 ] ,
dd : [ 8518 ] ,
ddagger : [ 8225 ] ,
ddarr : [ 8650 ] ,
ddotseq : [ 10871 ] ,
deg : [ 176 ] ,
delta : [ 948 ] ,
demptyv : [ 10673 ] ,
dfisht : [ 10623 ] ,
dfr : [ 120097 ] ,
dharl : [ 8643 ] ,
dharr : [ 8642 ] ,
diam : [ 8900 ] ,
diamond : [ 8900 ] ,
diamondsuit : [ 9830 ] ,
diams : [ 9830 ] ,
die : [ 168 ] ,
digamma : [ 989 ] ,
disin : [ 8946 ] ,
div : [ 247 ] ,
divide : [ 247 ] ,
divideontimes : [ 8903 ] ,
divonx : [ 8903 ] ,
djcy : [ 1106 ] ,
dlcorn : [ 8990 ] ,
dlcrop : [ 8973 ] ,
dollar : [ 36 ] ,
dopf : [ 120149 ] ,
dot : [ 729 ] ,
doteq : [ 8784 ] ,
doteqdot : [ 8785 ] ,
dotminus : [ 8760 ] ,
dotplus : [ 8724 ] ,
dotsquare : [ 8865 ] ,
doublebarwedge : [ 8966 ] ,
downarrow : [ 8595 ] ,
downdownarrows : [ 8650 ] ,
downharpoonleft : [ 8643 ] ,
downharpoonright : [ 8642 ] ,
drbkarow : [ 10512 ] ,
drcorn : [ 8991 ] ,
drcrop : [ 8972 ] ,
dscr : [ 119993 ] ,
dscy : [ 1109 ] ,
dsol : [ 10742 ] ,
dstrok : [ 273 ] ,
dtdot : [ 8945 ] ,
dtri : [ 9663 ] ,
dtrif : [ 9662 ] ,
duarr : [ 8693 ] ,
duhar : [ 10607 ] ,
dwangle : [ 10662 ] ,
dzcy : [ 1119 ] ,
dzigrarr : [ 10239 ] ,
eDDot : [ 10871 ] ,
eDot : [ 8785 ] ,
eacute : [ 233 ] ,
easter : [ 10862 ] ,
ecaron : [ 283 ] ,
ecir : [ 8790 ] ,
ecirc : [ 234 ] ,
ecolon : [ 8789 ] ,
ecy : [ 1101 ] ,
edot : [ 279 ] ,
ee : [ 8519 ] ,
efDot : [ 8786 ] ,
efr : [ 120098 ] ,
eg : [ 10906 ] ,
egrave : [ 232 ] ,
egs : [ 10902 ] ,
egsdot : [ 10904 ] ,
el : [ 10905 ] ,
elinters : [ 9191 ] ,
ell : [ 8467 ] ,
els : [ 10901 ] ,
elsdot : [ 10903 ] ,
emacr : [ 275 ] ,
empty : [ 8709 ] ,
emptyset : [ 8709 ] ,
emptyv : [ 8709 ] ,
emsp : [ 8195 ] ,
emsp13 : [ 8196 ] ,
emsp14 : [ 8197 ] ,
eng : [ 331 ] ,
ensp : [ 8194 ] ,
eogon : [ 281 ] ,
eopf : [ 120150 ] ,
epar : [ 8917 ] ,
eparsl : [ 10723 ] ,
eplus : [ 10865 ] ,
epsi : [ 949 ] ,
epsilon : [ 949 ] ,
epsiv : [ 1013 ] ,
eqcirc : [ 8790 ] ,
eqcolon : [ 8789 ] ,
eqsim : [ 8770 ] ,
eqslantgtr : [ 10902 ] ,
eqslantless : [ 10901 ] ,
equals : [ 61 ] ,
equest : [ 8799 ] ,
equiv : [ 8801 ] ,
equivDD : [ 10872 ] ,
eqvparsl : [ 10725 ] ,
erDot : [ 8787 ] ,
erarr : [ 10609 ] ,
escr : [ 8495 ] ,
esdot : [ 8784 ] ,
esim : [ 8770 ] ,
eta : [ 951 ] ,
eth : [ 240 ] ,
euml : [ 235 ] ,
euro : [ 8364 ] ,
excl : [ 33 ] ,
exist : [ 8707 ] ,
expectation : [ 8496 ] ,
exponentiale : [ 8519 ] ,
fallingdotseq : [ 8786 ] ,
fcy : [ 1092 ] ,
female : [ 9792 ] ,
ffilig : [ 64259 ] ,
fflig : [ 64256 ] ,
ffllig : [ 64260 ] ,
ffr : [ 120099 ] ,
filig : [ 64257 ] ,
fjlig : [ 102 , 106 ] ,
flat : [ 9837 ] ,
fllig : [ 64258 ] ,
fltns : [ 9649 ] ,
fnof : [ 402 ] ,
fopf : [ 120151 ] ,
forall : [ 8704 ] ,
fork : [ 8916 ] ,
forkv : [ 10969 ] ,
fpartint : [ 10765 ] ,
frac12 : [ 189 ] ,
frac13 : [ 8531 ] ,
frac14 : [ 188 ] ,
frac15 : [ 8533 ] ,
frac16 : [ 8537 ] ,
frac18 : [ 8539 ] ,
frac23 : [ 8532 ] ,
frac25 : [ 8534 ] ,
frac34 : [ 190 ] ,
frac35 : [ 8535 ] ,
frac38 : [ 8540 ] ,
frac45 : [ 8536 ] ,
frac56 : [ 8538 ] ,
frac58 : [ 8541 ] ,
frac78 : [ 8542 ] ,
frasl : [ 8260 ] ,
frown : [ 8994 ] ,
fscr : [ 119995 ] ,
gE : [ 8807 ] ,
gEl : [ 10892 ] ,
gacute : [ 501 ] ,
gamma : [ 947 ] ,
gammad : [ 989 ] ,
gap : [ 10886 ] ,
gbreve : [ 287 ] ,
gcirc : [ 285 ] ,
gcy : [ 1075 ] ,
gdot : [ 289 ] ,
ge : [ 8805 ] ,
gel : [ 8923 ] ,
geq : [ 8805 ] ,
geqq : [ 8807 ] ,
geqslant : [ 10878 ] ,
ges : [ 10878 ] ,
gescc : [ 10921 ] ,
gesdot : [ 10880 ] ,
gesdoto : [ 10882 ] ,
gesdotol : [ 10884 ] ,
gesl : [ 8923 , 65024 ] ,
gesles : [ 10900 ] ,
gfr : [ 120100 ] ,
gg : [ 8811 ] ,
ggg : [ 8921 ] ,
gimel : [ 8503 ] ,
gjcy : [ 1107 ] ,
gl : [ 8823 ] ,
glE : [ 10898 ] ,
gla : [ 10917 ] ,
glj : [ 10916 ] ,
gnE : [ 8809 ] ,
gnap : [ 10890 ] ,
gnapprox : [ 10890 ] ,
gne : [ 10888 ] ,
gneq : [ 10888 ] ,
gneqq : [ 8809 ] ,
gnsim : [ 8935 ] ,
gopf : [ 120152 ] ,
grave : [ 96 ] ,
gscr : [ 8458 ] ,
gsim : [ 8819 ] ,
gsime : [ 10894 ] ,
gsiml : [ 10896 ] ,
gt : [ 62 ] ,
gtcc : [ 10919 ] ,
gtcir : [ 10874 ] ,
gtdot : [ 8919 ] ,
gtlPar : [ 10645 ] ,
gtquest : [ 10876 ] ,
gtrapprox : [ 10886 ] ,
gtrarr : [ 10616 ] ,
gtrdot : [ 8919 ] ,
gtreqless : [ 8923 ] ,
gtreqqless : [ 10892 ] ,
gtrless : [ 8823 ] ,
gtrsim : [ 8819 ] ,
gvertneqq : [ 8809 , 65024 ] ,
gvnE : [ 8809 , 65024 ] ,
hArr : [ 8660 ] ,
hairsp : [ 8202 ] ,
half : [ 189 ] ,
hamilt : [ 8459 ] ,
hardcy : [ 1098 ] ,
harr : [ 8596 ] ,
harrcir : [ 10568 ] ,
harrw : [ 8621 ] ,
hbar : [ 8463 ] ,
hcirc : [ 293 ] ,
hearts : [ 9829 ] ,
heartsuit : [ 9829 ] ,
hellip : [ 8230 ] ,
hercon : [ 8889 ] ,
hfr : [ 120101 ] ,
hksearow : [ 10533 ] ,
hkswarow : [ 10534 ] ,
hoarr : [ 8703 ] ,
homtht : [ 8763 ] ,
hookleftarrow : [ 8617 ] ,
hookrightarrow : [ 8618 ] ,
hopf : [ 120153 ] ,
horbar : [ 8213 ] ,
hscr : [ 119997 ] ,
hslash : [ 8463 ] ,
hstrok : [ 295 ] ,
hybull : [ 8259 ] ,
hyphen : [ 8208 ] ,
iacute : [ 237 ] ,
ic : [ 8291 ] ,
icirc : [ 238 ] ,
icy : [ 1080 ] ,
iecy : [ 1077 ] ,
iexcl : [ 161 ] ,
iff : [ 8660 ] ,
ifr : [ 120102 ] ,
igrave : [ 236 ] ,
ii : [ 8520 ] ,
iiiint : [ 10764 ] ,
iiint : [ 8749 ] ,
iinfin : [ 10716 ] ,
iiota : [ 8489 ] ,
ijlig : [ 307 ] ,
imacr : [ 299 ] ,
image : [ 8465 ] ,
imagline : [ 8464 ] ,
imagpart : [ 8465 ] ,
imath : [ 305 ] ,
imof : [ 8887 ] ,
imped : [ 437 ] ,
"in" : [ 8712 ] ,
incare : [ 8453 ] ,
infin : [ 8734 ] ,
infintie : [ 10717 ] ,
inodot : [ 305 ] ,
"int" : [ 8747 ] ,
intcal : [ 8890 ] ,
integers : [ 8484 ] ,
intercal : [ 8890 ] ,
intlarhk : [ 10775 ] ,
intprod : [ 10812 ] ,
iocy : [ 1105 ] ,
iogon : [ 303 ] ,
iopf : [ 120154 ] ,
iota : [ 953 ] ,
iprod : [ 10812 ] ,
iquest : [ 191 ] ,
iscr : [ 119998 ] ,
isin : [ 8712 ] ,
isinE : [ 8953 ] ,
isindot : [ 8949 ] ,
isins : [ 8948 ] ,
isinsv : [ 8947 ] ,
isinv : [ 8712 ] ,
it : [ 8290 ] ,
itilde : [ 297 ] ,
iukcy : [ 1110 ] ,
iuml : [ 239 ] ,
jcirc : [ 309 ] ,
jcy : [ 1081 ] ,
jfr : [ 120103 ] ,
jmath : [ 567 ] ,
jopf : [ 120155 ] ,
jscr : [ 119999 ] ,
jsercy : [ 1112 ] ,
jukcy : [ 1108 ] ,
kappa : [ 954 ] ,
kappav : [ 1008 ] ,
kcedil : [ 311 ] ,
kcy : [ 1082 ] ,
kfr : [ 120104 ] ,
kgreen : [ 312 ] ,
khcy : [ 1093 ] ,
kjcy : [ 1116 ] ,
kopf : [ 120156 ] ,
kscr : [ 120000 ] ,
lAarr : [ 8666 ] ,
lArr : [ 8656 ] ,
lAtail : [ 10523 ] ,
lBarr : [ 10510 ] ,
lE : [ 8806 ] ,
lEg : [ 10891 ] ,
lHar : [ 10594 ] ,
lacute : [ 314 ] ,
laemptyv : [ 10676 ] ,
lagran : [ 8466 ] ,
lambda : [ 955 ] ,
lang : [ 10216 ] ,
langd : [ 10641 ] ,
langle : [ 10216 ] ,
lap : [ 10885 ] ,
laquo : [ 171 ] ,
larr : [ 8592 ] ,
larrb : [ 8676 ] ,
larrbfs : [ 10527 ] ,
larrfs : [ 10525 ] ,
larrhk : [ 8617 ] ,
larrlp : [ 8619 ] ,
larrpl : [ 10553 ] ,
larrsim : [ 10611 ] ,
larrtl : [ 8610 ] ,
lat : [ 10923 ] ,
latail : [ 10521 ] ,
late : [ 10925 ] ,
lates : [ 10925 , 65024 ] ,
lbarr : [ 10508 ] ,
lbbrk : [ 10098 ] ,
lbrace : [ 123 ] ,
lbrack : [ 91 ] ,
lbrke : [ 10635 ] ,
lbrksld : [ 10639 ] ,
lbrkslu : [ 10637 ] ,
lcaron : [ 318 ] ,
lcedil : [ 316 ] ,
lceil : [ 8968 ] ,
lcub : [ 123 ] ,
lcy : [ 1083 ] ,
ldca : [ 10550 ] ,
ldquo : [ 8220 ] ,
ldquor : [ 8222 ] ,
ldrdhar : [ 10599 ] ,
ldrushar : [ 10571 ] ,
ldsh : [ 8626 ] ,
le : [ 8804 ] ,
leftarrow : [ 8592 ] ,
leftarrowtail : [ 8610 ] ,
leftharpoondown : [ 8637 ] ,
leftharpoonup : [ 8636 ] ,
leftleftarrows : [ 8647 ] ,
leftrightarrow : [ 8596 ] ,
leftrightarrows : [ 8646 ] ,
leftrightharpoons : [ 8651 ] ,
leftrightsquigarrow : [ 8621 ] ,
leftthreetimes : [ 8907 ] ,
leg : [ 8922 ] ,
leq : [ 8804 ] ,
leqq : [ 8806 ] ,
leqslant : [ 10877 ] ,
les : [ 10877 ] ,
lescc : [ 10920 ] ,
lesdot : [ 10879 ] ,
lesdoto : [ 10881 ] ,
lesdotor : [ 10883 ] ,
lesg : [ 8922 , 65024 ] ,
lesges : [ 10899 ] ,
lessapprox : [ 10885 ] ,
lessdot : [ 8918 ] ,
lesseqgtr : [ 8922 ] ,
lesseqqgtr : [ 10891 ] ,
lessgtr : [ 8822 ] ,
lesssim : [ 8818 ] ,
lfisht : [ 10620 ] ,
lfloor : [ 8970 ] ,
lfr : [ 120105 ] ,
lg : [ 8822 ] ,
lgE : [ 10897 ] ,
lhard : [ 8637 ] ,
lharu : [ 8636 ] ,
lharul : [ 10602 ] ,
lhblk : [ 9604 ] ,
ljcy : [ 1113 ] ,
ll : [ 8810 ] ,
llarr : [ 8647 ] ,
llcorner : [ 8990 ] ,
llhard : [ 10603 ] ,
lltri : [ 9722 ] ,
lmidot : [ 320 ] ,
lmoust : [ 9136 ] ,
lmoustache : [ 9136 ] ,
lnE : [ 8808 ] ,
lnap : [ 10889 ] ,
lnapprox : [ 10889 ] ,
lne : [ 10887 ] ,
lneq : [ 10887 ] ,
lneqq : [ 8808 ] ,
lnsim : [ 8934 ] ,
loang : [ 10220 ] ,
loarr : [ 8701 ] ,
lobrk : [ 10214 ] ,
longleftarrow : [ 10229 ] ,
longleftrightarrow : [ 10231 ] ,
longmapsto : [ 10236 ] ,
longrightarrow : [ 10230 ] ,
looparrowleft : [ 8619 ] ,
looparrowright : [ 8620 ] ,
lopar : [ 10629 ] ,
lopf : [ 120157 ] ,
loplus : [ 10797 ] ,
lotimes : [ 10804 ] ,
lowast : [ 8727 ] ,
lowbar : [ 95 ] ,
loz : [ 9674 ] ,
lozenge : [ 9674 ] ,
lozf : [ 10731 ] ,
lpar : [ 40 ] ,
lparlt : [ 10643 ] ,
lrarr : [ 8646 ] ,
lrcorner : [ 8991 ] ,
lrhar : [ 8651 ] ,
lrhard : [ 10605 ] ,
lrm : [ 8206 ] ,
lrtri : [ 8895 ] ,
lsaquo : [ 8249 ] ,
lscr : [ 120001 ] ,
lsh : [ 8624 ] ,
lsim : [ 8818 ] ,
lsime : [ 10893 ] ,
lsimg : [ 10895 ] ,
lsqb : [ 91 ] ,
lsquo : [ 8216 ] ,
lsquor : [ 8218 ] ,
lstrok : [ 322 ] ,
lt : [ 60 ] ,
ltcc : [ 10918 ] ,
ltcir : [ 10873 ] ,
ltdot : [ 8918 ] ,
lthree : [ 8907 ] ,
ltimes : [ 8905 ] ,
ltlarr : [ 10614 ] ,
ltquest : [ 10875 ] ,
ltrPar : [ 10646 ] ,
ltri : [ 9667 ] ,
ltrie : [ 8884 ] ,
ltrif : [ 9666 ] ,
lurdshar : [ 10570 ] ,
luruhar : [ 10598 ] ,
lvertneqq : [ 8808 , 65024 ] ,
lvnE : [ 8808 , 65024 ] ,
mDDot : [ 8762 ] ,
macr : [ 175 ] ,
male : [ 9794 ] ,
malt : [ 10016 ] ,
maltese : [ 10016 ] ,
map : [ 8614 ] ,
mapsto : [ 8614 ] ,
mapstodown : [ 8615 ] ,
mapstoleft : [ 8612 ] ,
mapstoup : [ 8613 ] ,
marker : [ 9646 ] ,
mcomma : [ 10793 ] ,
mcy : [ 1084 ] ,
mdash : [ 8212 ] ,
measuredangle : [ 8737 ] ,
mfr : [ 120106 ] ,
mho : [ 8487 ] ,
micro : [ 181 ] ,
mid : [ 8739 ] ,
midast : [ 42 ] ,
midcir : [ 10992 ] ,
middot : [ 183 ] ,
minus : [ 8722 ] ,
minusb : [ 8863 ] ,
minusd : [ 8760 ] ,
minusdu : [ 10794 ] ,
mlcp : [ 10971 ] ,
mldr : [ 8230 ] ,
mnplus : [ 8723 ] ,
models : [ 8871 ] ,
mopf : [ 120158 ] ,
mp : [ 8723 ] ,
mscr : [ 120002 ] ,
mstpos : [ 8766 ] ,
mu : [ 956 ] ,
multimap : [ 8888 ] ,
mumap : [ 8888 ] ,
nGg : [ 8921 , 824 ] ,
nGt : [ 8811 , 8402 ] ,
nGtv : [ 8811 , 824 ] ,
nLeftarrow : [ 8653 ] ,
nLeftrightarrow : [ 8654 ] ,
nLl : [ 8920 , 824 ] ,
nLt : [ 8810 , 8402 ] ,
nLtv : [ 8810 , 824 ] ,
nRightarrow : [ 8655 ] ,
nVDash : [ 8879 ] ,
nVdash : [ 8878 ] ,
nabla : [ 8711 ] ,
nacute : [ 324 ] ,
nang : [ 8736 , 8402 ] ,
nap : [ 8777 ] ,
napE : [ 10864 , 824 ] ,
napid : [ 8779 , 824 ] ,
napos : [ 329 ] ,
napprox : [ 8777 ] ,
natur : [ 9838 ] ,
natural : [ 9838 ] ,
naturals : [ 8469 ] ,
nbsp : [ 160 ] ,
nbump : [ 8782 , 824 ] ,
nbumpe : [ 8783 , 824 ] ,
ncap : [ 10819 ] ,
ncaron : [ 328 ] ,
ncedil : [ 326 ] ,
ncong : [ 8775 ] ,
ncongdot : [ 10861 , 824 ] ,
ncup : [ 10818 ] ,
ncy : [ 1085 ] ,
ndash : [ 8211 ] ,
ne : [ 8800 ] ,
neArr : [ 8663 ] ,
nearhk : [ 10532 ] ,
nearr : [ 8599 ] ,
nearrow : [ 8599 ] ,
nedot : [ 8784 , 824 ] ,
nequiv : [ 8802 ] ,
nesear : [ 10536 ] ,
nesim : [ 8770 , 824 ] ,
nexist : [ 8708 ] ,
nexists : [ 8708 ] ,
nfr : [ 120107 ] ,
ngE : [ 8807 , 824 ] ,
nge : [ 8817 ] ,
ngeq : [ 8817 ] ,
ngeqq : [ 8807 , 824 ] ,
ngeqslant : [ 10878 , 824 ] ,
nges : [ 10878 , 824 ] ,
ngsim : [ 8821 ] ,
ngt : [ 8815 ] ,
ngtr : [ 8815 ] ,
nhArr : [ 8654 ] ,
nharr : [ 8622 ] ,
nhpar : [ 10994 ] ,
ni : [ 8715 ] ,
nis : [ 8956 ] ,
nisd : [ 8954 ] ,
niv : [ 8715 ] ,
njcy : [ 1114 ] ,
nlArr : [ 8653 ] ,
nlE : [ 8806 , 824 ] ,
nlarr : [ 8602 ] ,
nldr : [ 8229 ] ,
nle : [ 8816 ] ,
nleftarrow : [ 8602 ] ,
nleftrightarrow : [ 8622 ] ,
nleq : [ 8816 ] ,
nleqq : [ 8806 , 824 ] ,
nleqslant : [ 10877 , 824 ] ,
nles : [ 10877 , 824 ] ,
nless : [ 8814 ] ,
nlsim : [ 8820 ] ,
nlt : [ 8814 ] ,
nltri : [ 8938 ] ,
nltrie : [ 8940 ] ,
nmid : [ 8740 ] ,
nopf : [ 120159 ] ,
not : [ 172 ] ,
notin : [ 8713 ] ,
notinE : [ 8953 , 824 ] ,
notindot : [ 8949 , 824 ] ,
notinva : [ 8713 ] ,
notinvb : [ 8951 ] ,
notinvc : [ 8950 ] ,
notni : [ 8716 ] ,
notniva : [ 8716 ] ,
notnivb : [ 8958 ] ,
notnivc : [ 8957 ] ,
npar : [ 8742 ] ,
nparallel : [ 8742 ] ,
nparsl : [ 11005 , 8421 ] ,
npart : [ 8706 , 824 ] ,
npolint : [ 10772 ] ,
npr : [ 8832 ] ,
nprcue : [ 8928 ] ,
npre : [ 10927 , 824 ] ,
nprec : [ 8832 ] ,
npreceq : [ 10927 , 824 ] ,
nrArr : [ 8655 ] ,
nrarr : [ 8603 ] ,
nrarrc : [ 10547 , 824 ] ,
nrarrw : [ 8605 , 824 ] ,
nrightarrow : [ 8603 ] ,
nrtri : [ 8939 ] ,
nrtrie : [ 8941 ] ,
nsc : [ 8833 ] ,
nsccue : [ 8929 ] ,
nsce : [ 10928 , 824 ] ,
nscr : [ 120003 ] ,
nshortmid : [ 8740 ] ,
nshortparallel : [ 8742 ] ,
nsim : [ 8769 ] ,
nsime : [ 8772 ] ,
nsimeq : [ 8772 ] ,
nsmid : [ 8740 ] ,
nspar : [ 8742 ] ,
nsqsube : [ 8930 ] ,
nsqsupe : [ 8931 ] ,
nsub : [ 8836 ] ,
nsubE : [ 10949 , 824 ] ,
nsube : [ 8840 ] ,
nsubset : [ 8834 , 8402 ] ,
nsubseteq : [ 8840 ] ,
nsubseteqq : [ 10949 , 824 ] ,
nsucc : [ 8833 ] ,
nsucceq : [ 10928 , 824 ] ,
nsup : [ 8837 ] ,
nsupE : [ 10950 , 824 ] ,
nsupe : [ 8841 ] ,
nsupset : [ 8835 , 8402 ] ,
nsupseteq : [ 8841 ] ,
nsupseteqq : [ 10950 , 824 ] ,
ntgl : [ 8825 ] ,
ntilde : [ 241 ] ,
ntlg : [ 8824 ] ,
ntriangleleft : [ 8938 ] ,
ntrianglelefteq : [ 8940 ] ,
ntriangleright : [ 8939 ] ,
ntrianglerighteq : [ 8941 ] ,
nu : [ 957 ] ,
num : [ 35 ] ,
numero : [ 8470 ] ,
numsp : [ 8199 ] ,
nvDash : [ 8877 ] ,
nvHarr : [ 10500 ] ,
nvap : [ 8781 , 8402 ] ,
nvdash : [ 8876 ] ,
nvge : [ 8805 , 8402 ] ,
nvgt : [ 62 , 8402 ] ,
nvinfin : [ 10718 ] ,
nvlArr : [ 10498 ] ,
nvle : [ 8804 , 8402 ] ,
nvlt : [ 60 , 8402 ] ,
nvltrie : [ 8884 , 8402 ] ,
nvrArr : [ 10499 ] ,
nvrtrie : [ 8885 , 8402 ] ,
nvsim : [ 8764 , 8402 ] ,
nwArr : [ 8662 ] ,
nwarhk : [ 10531 ] ,
nwarr : [ 8598 ] ,
nwarrow : [ 8598 ] ,
nwnear : [ 10535 ] ,
oS : [ 9416 ] ,
oacute : [ 243 ] ,
oast : [ 8859 ] ,
ocir : [ 8858 ] ,
ocirc : [ 244 ] ,
ocy : [ 1086 ] ,
odash : [ 8861 ] ,
odblac : [ 337 ] ,
odiv : [ 10808 ] ,
odot : [ 8857 ] ,
odsold : [ 10684 ] ,
oelig : [ 339 ] ,
ofcir : [ 10687 ] ,
ofr : [ 120108 ] ,
ogon : [ 731 ] ,
ograve : [ 242 ] ,
ogt : [ 10689 ] ,
ohbar : [ 10677 ] ,
ohm : [ 937 ] ,
oint : [ 8750 ] ,
olarr : [ 8634 ] ,
olcir : [ 10686 ] ,
olcross : [ 10683 ] ,
oline : [ 8254 ] ,
olt : [ 10688 ] ,
omacr : [ 333 ] ,
omega : [ 969 ] ,
omicron : [ 959 ] ,
omid : [ 10678 ] ,
ominus : [ 8854 ] ,
oopf : [ 120160 ] ,
opar : [ 10679 ] ,
operp : [ 10681 ] ,
oplus : [ 8853 ] ,
or : [ 8744 ] ,
orarr : [ 8635 ] ,
ord : [ 10845 ] ,
order : [ 8500 ] ,
orderof : [ 8500 ] ,
ordf : [ 170 ] ,
ordm : [ 186 ] ,
origof : [ 8886 ] ,
oror : [ 10838 ] ,
orslope : [ 10839 ] ,
orv : [ 10843 ] ,
oscr : [ 8500 ] ,
oslash : [ 248 ] ,
osol : [ 8856 ] ,
otilde : [ 245 ] ,
otimes : [ 8855 ] ,
otimesas : [ 10806 ] ,
ouml : [ 246 ] ,
ovbar : [ 9021 ] ,
par : [ 8741 ] ,
para : [ 182 ] ,
parallel : [ 8741 ] ,
parsim : [ 10995 ] ,
parsl : [ 11005 ] ,
part : [ 8706 ] ,
pcy : [ 1087 ] ,
percnt : [ 37 ] ,
period : [ 46 ] ,
permil : [ 8240 ] ,
perp : [ 8869 ] ,
pertenk : [ 8241 ] ,
pfr : [ 120109 ] ,
phi : [ 966 ] ,
phiv : [ 981 ] ,
phmmat : [ 8499 ] ,
phone : [ 9742 ] ,
pi : [ 960 ] ,
pitchfork : [ 8916 ] ,
piv : [ 982 ] ,
planck : [ 8463 ] ,
planckh : [ 8462 ] ,
plankv : [ 8463 ] ,
plus : [ 43 ] ,
plusacir : [ 10787 ] ,
plusb : [ 8862 ] ,
pluscir : [ 10786 ] ,
plusdo : [ 8724 ] ,
plusdu : [ 10789 ] ,
pluse : [ 10866 ] ,
plusmn : [ 177 ] ,
plussim : [ 10790 ] ,
plustwo : [ 10791 ] ,
pm : [ 177 ] ,
pointint : [ 10773 ] ,
popf : [ 120161 ] ,
pound : [ 163 ] ,
pr : [ 8826 ] ,
prE : [ 10931 ] ,
prap : [ 10935 ] ,
prcue : [ 8828 ] ,
pre : [ 10927 ] ,
prec : [ 8826 ] ,
precapprox : [ 10935 ] ,
preccurlyeq : [ 8828 ] ,
preceq : [ 10927 ] ,
precnapprox : [ 10937 ] ,
precneqq : [ 10933 ] ,
precnsim : [ 8936 ] ,
precsim : [ 8830 ] ,
prime : [ 8242 ] ,
primes : [ 8473 ] ,
prnE : [ 10933 ] ,
prnap : [ 10937 ] ,
prnsim : [ 8936 ] ,
prod : [ 8719 ] ,
profalar : [ 9006 ] ,
profline : [ 8978 ] ,
profsurf : [ 8979 ] ,
prop : [ 8733 ] ,
propto : [ 8733 ] ,
prsim : [ 8830 ] ,
prurel : [ 8880 ] ,
pscr : [ 120005 ] ,
psi : [ 968 ] ,
puncsp : [ 8200 ] ,
qfr : [ 120110 ] ,
qint : [ 10764 ] ,
qopf : [ 120162 ] ,
qprime : [ 8279 ] ,
qscr : [ 120006 ] ,
quaternions : [ 8461 ] ,
quatint : [ 10774 ] ,
quest : [ 63 ] ,
questeq : [ 8799 ] ,
quot : [ 34 ] ,
rAarr : [ 8667 ] ,
rArr : [ 8658 ] ,
rAtail : [ 10524 ] ,
rBarr : [ 10511 ] ,
rHar : [ 10596 ] ,
race : [ 8765 , 817 ] ,
racute : [ 341 ] ,
radic : [ 8730 ] ,
raemptyv : [ 10675 ] ,
rang : [ 10217 ] ,
rangd : [ 10642 ] ,
range : [ 10661 ] ,
rangle : [ 10217 ] ,
raquo : [ 187 ] ,
rarr : [ 8594 ] ,
rarrap : [ 10613 ] ,
rarrb : [ 8677 ] ,
rarrbfs : [ 10528 ] ,
rarrc : [ 10547 ] ,
rarrfs : [ 10526 ] ,
rarrhk : [ 8618 ] ,
rarrlp : [ 8620 ] ,
rarrpl : [ 10565 ] ,
rarrsim : [ 10612 ] ,
rarrtl : [ 8611 ] ,
rarrw : [ 8605 ] ,
ratail : [ 10522 ] ,
ratio : [ 8758 ] ,
rationals : [ 8474 ] ,
rbarr : [ 10509 ] ,
rbbrk : [ 10099 ] ,
rbrace : [ 125 ] ,
rbrack : [ 93 ] ,
rbrke : [ 10636 ] ,
rbrksld : [ 10638 ] ,
rbrkslu : [ 10640 ] ,
rcaron : [ 345 ] ,
rcedil : [ 343 ] ,
rceil : [ 8969 ] ,
rcub : [ 125 ] ,
rcy : [ 1088 ] ,
rdca : [ 10551 ] ,
rdldhar : [ 10601 ] ,
rdquo : [ 8221 ] ,
rdquor : [ 8221 ] ,
rdsh : [ 8627 ] ,
real : [ 8476 ] ,
realine : [ 8475 ] ,
realpart : [ 8476 ] ,
reals : [ 8477 ] ,
rect : [ 9645 ] ,
reg : [ 174 ] ,
rfisht : [ 10621 ] ,
rfloor : [ 8971 ] ,
rfr : [ 120111 ] ,
rhard : [ 8641 ] ,
rharu : [ 8640 ] ,
rharul : [ 10604 ] ,
rho : [ 961 ] ,
rhov : [ 1009 ] ,
rightarrow : [ 8594 ] ,
rightarrowtail : [ 8611 ] ,
rightharpoondown : [ 8641 ] ,
rightharpoonup : [ 8640 ] ,
rightleftarrows : [ 8644 ] ,
rightleftharpoons : [ 8652 ] ,
rightrightarrows : [ 8649 ] ,
rightsquigarrow : [ 8605 ] ,
rightthreetimes : [ 8908 ] ,
ring : [ 730 ] ,
risingdotseq : [ 8787 ] ,
rlarr : [ 8644 ] ,
rlhar : [ 8652 ] ,
rlm : [ 8207 ] ,
rmoust : [ 9137 ] ,
rmoustache : [ 9137 ] ,
rnmid : [ 10990 ] ,
roang : [ 10221 ] ,
roarr : [ 8702 ] ,
robrk : [ 10215 ] ,
ropar : [ 10630 ] ,
ropf : [ 120163 ] ,
roplus : [ 10798 ] ,
rotimes : [ 10805 ] ,
rpar : [ 41 ] ,
rpargt : [ 10644 ] ,
rppolint : [ 10770 ] ,
rrarr : [ 8649 ] ,
rsaquo : [ 8250 ] ,
rscr : [ 120007 ] ,
rsh : [ 8625 ] ,
rsqb : [ 93 ] ,
rsquo : [ 8217 ] ,
rsquor : [ 8217 ] ,
rthree : [ 8908 ] ,
rtimes : [ 8906 ] ,
rtri : [ 9657 ] ,
rtrie : [ 8885 ] ,
rtrif : [ 9656 ] ,
rtriltri : [ 10702 ] ,
ruluhar : [ 10600 ] ,
rx : [ 8478 ] ,
sacute : [ 347 ] ,
sbquo : [ 8218 ] ,
sc : [ 8827 ] ,
scE : [ 10932 ] ,
scap : [ 10936 ] ,
scaron : [ 353 ] ,
sccue : [ 8829 ] ,
sce : [ 10928 ] ,
scedil : [ 351 ] ,
scirc : [ 349 ] ,
scnE : [ 10934 ] ,
scnap : [ 10938 ] ,
scnsim : [ 8937 ] ,
scpolint : [ 10771 ] ,
scsim : [ 8831 ] ,
scy : [ 1089 ] ,
sdot : [ 8901 ] ,
sdotb : [ 8865 ] ,
sdote : [ 10854 ] ,
seArr : [ 8664 ] ,
searhk : [ 10533 ] ,
searr : [ 8600 ] ,
searrow : [ 8600 ] ,
sect : [ 167 ] ,
semi : [ 59 ] ,
seswar : [ 10537 ] ,
setminus : [ 8726 ] ,
setmn : [ 8726 ] ,
sext : [ 10038 ] ,
sfr : [ 120112 ] ,
sfrown : [ 8994 ] ,
sharp : [ 9839 ] ,
shchcy : [ 1097 ] ,
shcy : [ 1096 ] ,
shortmid : [ 8739 ] ,
shortparallel : [ 8741 ] ,
shy : [ 173 ] ,
sigma : [ 963 ] ,
sigmaf : [ 962 ] ,
sigmav : [ 962 ] ,
sim : [ 8764 ] ,
simdot : [ 10858 ] ,
sime : [ 8771 ] ,
simeq : [ 8771 ] ,
simg : [ 10910 ] ,
simgE : [ 10912 ] ,
siml : [ 10909 ] ,
simlE : [ 10911 ] ,
simne : [ 8774 ] ,
simplus : [ 10788 ] ,
simrarr : [ 10610 ] ,
slarr : [ 8592 ] ,
smallsetminus : [ 8726 ] ,
smashp : [ 10803 ] ,
smeparsl : [ 10724 ] ,
smid : [ 8739 ] ,
smile : [ 8995 ] ,
smt : [ 10922 ] ,
smte : [ 10924 ] ,
smtes : [ 10924 , 65024 ] ,
softcy : [ 1100 ] ,
sol : [ 47 ] ,
solb : [ 10692 ] ,
solbar : [ 9023 ] ,
sopf : [ 120164 ] ,
spades : [ 9824 ] ,
spadesuit : [ 9824 ] ,
spar : [ 8741 ] ,
sqcap : [ 8851 ] ,
sqcaps : [ 8851 , 65024 ] ,
sqcup : [ 8852 ] ,
sqcups : [ 8852 , 65024 ] ,
sqsub : [ 8847 ] ,
sqsube : [ 8849 ] ,
sqsubset : [ 8847 ] ,
sqsubseteq : [ 8849 ] ,
sqsup : [ 8848 ] ,
sqsupe : [ 8850 ] ,
sqsupset : [ 8848 ] ,
sqsupseteq : [ 8850 ] ,
squ : [ 9633 ] ,
square : [ 9633 ] ,
squarf : [ 9642 ] ,
squf : [ 9642 ] ,
srarr : [ 8594 ] ,
sscr : [ 120008 ] ,
ssetmn : [ 8726 ] ,
ssmile : [ 8995 ] ,
sstarf : [ 8902 ] ,
star : [ 9734 ] ,
starf : [ 9733 ] ,
straightepsilon : [ 1013 ] ,
straightphi : [ 981 ] ,
strns : [ 175 ] ,
sub : [ 8834 ] ,
subE : [ 10949 ] ,
subdot : [ 10941 ] ,
sube : [ 8838 ] ,
subedot : [ 10947 ] ,
submult : [ 10945 ] ,
subnE : [ 10955 ] ,
subne : [ 8842 ] ,
subplus : [ 10943 ] ,
subrarr : [ 10617 ] ,
subset : [ 8834 ] ,
subseteq : [ 8838 ] ,
subseteqq : [ 10949 ] ,
subsetneq : [ 8842 ] ,
subsetneqq : [ 10955 ] ,
subsim : [ 10951 ] ,
subsub : [ 10965 ] ,
subsup : [ 10963 ] ,
succ : [ 8827 ] ,
succapprox : [ 10936 ] ,
succcurlyeq : [ 8829 ] ,
succeq : [ 10928 ] ,
succnapprox : [ 10938 ] ,
succneqq : [ 10934 ] ,
succnsim : [ 8937 ] ,
succsim : [ 8831 ] ,
sum : [ 8721 ] ,
sung : [ 9834 ] ,
sup : [ 8835 ] ,
sup1 : [ 185 ] ,
sup2 : [ 178 ] ,
sup3 : [ 179 ] ,
supE : [ 10950 ] ,
supdot : [ 10942 ] ,
supdsub : [ 10968 ] ,
supe : [ 8839 ] ,
supedot : [ 10948 ] ,
suphsol : [ 10185 ] ,
suphsub : [ 10967 ] ,
suplarr : [ 10619 ] ,
supmult : [ 10946 ] ,
supnE : [ 10956 ] ,
supne : [ 8843 ] ,
supplus : [ 10944 ] ,
supset : [ 8835 ] ,
supseteq : [ 8839 ] ,
supseteqq : [ 10950 ] ,
supsetneq : [ 8843 ] ,
supsetneqq : [ 10956 ] ,
supsim : [ 10952 ] ,
supsub : [ 10964 ] ,
supsup : [ 10966 ] ,
swArr : [ 8665 ] ,
swarhk : [ 10534 ] ,
swarr : [ 8601 ] ,
swarrow : [ 8601 ] ,
swnwar : [ 10538 ] ,
szlig : [ 223 ] ,
target : [ 8982 ] ,
tau : [ 964 ] ,
tbrk : [ 9140 ] ,
tcaron : [ 357 ] ,
tcedil : [ 355 ] ,
tcy : [ 1090 ] ,
tdot : [ 8411 ] ,
telrec : [ 8981 ] ,
tfr : [ 120113 ] ,
there4 : [ 8756 ] ,
therefore : [ 8756 ] ,
theta : [ 952 ] ,
thetasym : [ 977 ] ,
thetav : [ 977 ] ,
thickapprox : [ 8776 ] ,
thicksim : [ 8764 ] ,
thinsp : [ 8201 ] ,
thkap : [ 8776 ] ,
thksim : [ 8764 ] ,
thorn : [ 254 ] ,
tilde : [ 732 ] ,
times : [ 215 ] ,
timesb : [ 8864 ] ,
timesbar : [ 10801 ] ,
timesd : [ 10800 ] ,
tint : [ 8749 ] ,
toea : [ 10536 ] ,
top : [ 8868 ] ,
topbot : [ 9014 ] ,
topcir : [ 10993 ] ,
topf : [ 120165 ] ,
topfork : [ 10970 ] ,
tosa : [ 10537 ] ,
tprime : [ 8244 ] ,
trade : [ 8482 ] ,
triangle : [ 9653 ] ,
triangledown : [ 9663 ] ,
triangleleft : [ 9667 ] ,
trianglelefteq : [ 8884 ] ,
triangleq : [ 8796 ] ,
triangleright : [ 9657 ] ,
trianglerighteq : [ 8885 ] ,
tridot : [ 9708 ] ,
trie : [ 8796 ] ,
triminus : [ 10810 ] ,
triplus : [ 10809 ] ,
trisb : [ 10701 ] ,
tritime : [ 10811 ] ,
trpezium : [ 9186 ] ,
tscr : [ 120009 ] ,
tscy : [ 1094 ] ,
tshcy : [ 1115 ] ,
tstrok : [ 359 ] ,
twixt : [ 8812 ] ,
twoheadleftarrow : [ 8606 ] ,
twoheadrightarrow : [ 8608 ] ,
uArr : [ 8657 ] ,
uHar : [ 10595 ] ,
uacute : [ 250 ] ,
uarr : [ 8593 ] ,
ubrcy : [ 1118 ] ,
ubreve : [ 365 ] ,
ucirc : [ 251 ] ,
ucy : [ 1091 ] ,
udarr : [ 8645 ] ,
udblac : [ 369 ] ,
udhar : [ 10606 ] ,
ufisht : [ 10622 ] ,
ufr : [ 120114 ] ,
ugrave : [ 249 ] ,
uharl : [ 8639 ] ,
uharr : [ 8638 ] ,
uhblk : [ 9600 ] ,
ulcorn : [ 8988 ] ,
ulcorner : [ 8988 ] ,
ulcrop : [ 8975 ] ,
ultri : [ 9720 ] ,
umacr : [ 363 ] ,
uml : [ 168 ] ,
uogon : [ 371 ] ,
uopf : [ 120166 ] ,
uparrow : [ 8593 ] ,
updownarrow : [ 8597 ] ,
upharpoonleft : [ 8639 ] ,
upharpoonright : [ 8638 ] ,
uplus : [ 8846 ] ,
upsi : [ 965 ] ,
upsih : [ 978 ] ,
upsilon : [ 965 ] ,
upuparrows : [ 8648 ] ,
urcorn : [ 8989 ] ,
urcorner : [ 8989 ] ,
urcrop : [ 8974 ] ,
uring : [ 367 ] ,
urtri : [ 9721 ] ,
uscr : [ 120010 ] ,
utdot : [ 8944 ] ,
utilde : [ 361 ] ,
utri : [ 9653 ] ,
utrif : [ 9652 ] ,
uuarr : [ 8648 ] ,
uuml : [ 252 ] ,
uwangle : [ 10663 ] ,
vArr : [ 8661 ] ,
vBar : [ 10984 ] ,
vBarv : [ 10985 ] ,
vDash : [ 8872 ] ,
vangrt : [ 10652 ] ,
varepsilon : [ 1013 ] ,
varkappa : [ 1008 ] ,
varnothing : [ 8709 ] ,
varphi : [ 981 ] ,
varpi : [ 982 ] ,
varpropto : [ 8733 ] ,
varr : [ 8597 ] ,
varrho : [ 1009 ] ,
varsigma : [ 962 ] ,
varsubsetneq : [ 8842 , 65024 ] ,
varsubsetneqq : [ 10955 , 65024 ] ,
varsupsetneq : [ 8843 , 65024 ] ,
varsupsetneqq : [ 10956 , 65024 ] ,
vartheta : [ 977 ] ,
vartriangleleft : [ 8882 ] ,
vartriangleright : [ 8883 ] ,
vcy : [ 1074 ] ,
vdash : [ 8866 ] ,
vee : [ 8744 ] ,
veebar : [ 8891 ] ,
veeeq : [ 8794 ] ,
vellip : [ 8942 ] ,
verbar : [ 124 ] ,
vert : [ 124 ] ,
vfr : [ 120115 ] ,
vltri : [ 8882 ] ,
vnsub : [ 8834 , 8402 ] ,
vnsup : [ 8835 , 8402 ] ,
vopf : [ 120167 ] ,
vprop : [ 8733 ] ,
vrtri : [ 8883 ] ,
vscr : [ 120011 ] ,
vsubnE : [ 10955 , 65024 ] ,
vsubne : [ 8842 , 65024 ] ,
vsupnE : [ 10956 , 65024 ] ,
vsupne : [ 8843 , 65024 ] ,
vzigzag : [ 10650 ] ,
wcirc : [ 373 ] ,
wedbar : [ 10847 ] ,
wedge : [ 8743 ] ,
wedgeq : [ 8793 ] ,
weierp : [ 8472 ] ,
wfr : [ 120116 ] ,
wopf : [ 120168 ] ,
wp : [ 8472 ] ,
wr : [ 8768 ] ,
wreath : [ 8768 ] ,
wscr : [ 120012 ] ,
xcap : [ 8898 ] ,
xcirc : [ 9711 ] ,
xcup : [ 8899 ] ,
xdtri : [ 9661 ] ,
xfr : [ 120117 ] ,
xhArr : [ 10234 ] ,
xharr : [ 10231 ] ,
xi : [ 958 ] ,
xlArr : [ 10232 ] ,
xlarr : [ 10229 ] ,
xmap : [ 10236 ] ,
xnis : [ 8955 ] ,
xodot : [ 10752 ] ,
xopf : [ 120169 ] ,
xoplus : [ 10753 ] ,
xotime : [ 10754 ] ,
xrArr : [ 10233 ] ,
xrarr : [ 10230 ] ,
xscr : [ 120013 ] ,
xsqcup : [ 10758 ] ,
xuplus : [ 10756 ] ,
xutri : [ 9651 ] ,
xvee : [ 8897 ] ,
xwedge : [ 8896 ] ,
yacute : [ 253 ] ,
yacy : [ 1103 ] ,
ycirc : [ 375 ] ,
ycy : [ 1099 ] ,
yen : [ 165 ] ,
yfr : [ 120118 ] ,
yicy : [ 1111 ] ,
yopf : [ 120170 ] ,
yscr : [ 120014 ] ,
yucy : [ 1102 ] ,
yuml : [ 255 ] ,
zacute : [ 378 ] ,
zcaron : [ 382 ] ,
zcy : [ 1079 ] ,
zdot : [ 380 ] ,
zeetrf : [ 8488 ] ,
zeta : [ 950 ] ,
zfr : [ 120119 ] ,
zhcy : [ 1078 ] ,
zigrarr : [ 8669 ] ,
zopf : [ 120171 ] ,
zscr : [ 120015 ] ,
zwj : [ 8205 ] ,
zwnj : [ 8204 ]
} ;
} ) ;
define ( "simple-html-tokenizer/char-refs/min" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
_ _exports _ _ [ "default" ] = {
quot : [ 34 ] ,
amp : [ 38 ] ,
apos : [ 39 ] ,
lt : [ 60 ] ,
gt : [ 62 ]
} ;
} ) ;
define ( "simple-html-tokenizer/entity-parser" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function EntityParser ( namedCodepoints ) {
this . namedCodepoints = namedCodepoints ;
}
EntityParser . prototype . parse = function ( tokenizer ) {
var input = tokenizer . input . slice ( tokenizer [ "char" ] ) ;
var matches = input . match ( /^#(?:x|X)([0-9A-Fa-f]+);/ ) ;
if ( matches ) {
tokenizer [ "char" ] += matches [ 0 ] . length ;
return String . fromCharCode ( parseInt ( matches [ 1 ] , 16 ) ) ;
}
matches = input . match ( /^#([0-9]+);/ ) ;
if ( matches ) {
tokenizer [ "char" ] += matches [ 0 ] . length ;
return String . fromCharCode ( parseInt ( matches [ 1 ] , 10 ) ) ;
}
matches = input . match ( /^([A-Za-z]+);/ ) ;
if ( matches ) {
var codepoints = this . namedCodepoints [ matches [ 1 ] ] ;
if ( codepoints ) {
tokenizer [ "char" ] += matches [ 0 ] . length ;
for ( var i = 0 , buffer = '' ; i < codepoints . length ; i ++ ) {
buffer += String . fromCharCode ( codepoints [ i ] ) ;
}
return buffer ;
}
}
} ;
_ _exports _ _ [ "default" ] = EntityParser ;
} ) ;
define ( "simple-html-tokenizer/generate" ,
[ "./generator" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _exports _ _ ) {
"use strict" ;
var Generator = _ _dependency1 _ _ [ "default" ] ;
_ _exports _ _ [ "default" ] = function generate ( tokens ) {
var generator = new Generator ( ) ;
return generator . generate ( tokens ) ;
}
} ) ;
define ( "simple-html-tokenizer/generator" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
var escape = ( function ( ) {
var test = /[&<>"'`]/ ;
var replace = /[&<>"'`]/g ;
var map = {
"&" : "&" ,
"<" : "<" ,
">" : ">" ,
'"' : """ ,
"'" : "'" ,
"`" : "`"
} ;
function escapeChar ( char ) {
return map [ "char" ] ;
}
return function escape ( string ) {
if ( ! test . test ( string ) ) {
return string ;
}
return string . replace ( replace , escapeChar ) ;
} ;
} ( ) ) ;
function Generator ( ) {
this . escape = escape ;
}
Generator . prototype = {
generate : function ( tokens ) {
var buffer = '' ;
var token ;
for ( var i = 0 ; i < tokens . length ; i ++ ) {
token = tokens [ i ] ;
buffer += this [ token . type ] ( token ) ;
}
return buffer ;
} ,
escape : function ( text ) {
var unsafeCharsMap = this . unsafeCharsMap ;
return text . replace ( this . unsafeChars , function ( char ) {
return unsafeCharsMap [ "char" ] || char ;
} ) ;
} ,
StartTag : function ( token ) {
var out = "<" ;
out += token . tagName ;
if ( token . attributes . length ) {
out += " " + this . Attributes ( token . attributes ) ;
}
out += ">" ;
return out ;
} ,
EndTag : function ( token ) {
return "</" + token . tagName + ">" ;
} ,
Chars : function ( token ) {
return this . escape ( token . chars ) ;
} ,
Comment : function ( token ) {
return "<!--" + token . chars + "-->" ;
} ,
Attributes : function ( attributes ) {
var out = [ ] , attribute ;
for ( var i = 0 , l = attributes . length ; i < l ; i ++ ) {
attribute = attributes [ i ] ;
out . push ( this . Attribute ( attribute [ 0 ] , attribute [ 1 ] ) ) ;
}
return out . join ( " " ) ;
} ,
Attribute : function ( name , value ) {
var attrString = name ;
if ( value ) {
value = this . escape ( value ) ;
attrString += "=\"" + value + "\"" ;
}
return attrString ;
}
} ;
_ _exports _ _ [ "default" ] = Generator ;
} ) ;
define ( "simple-html-tokenizer/tokenize" ,
[ "./tokenizer" , "./entity-parser" , "./char-refs/full" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _dependency3 _ _ , _ _exports _ _ ) {
"use strict" ;
var Tokenizer = _ _dependency1 _ _ [ "default" ] ;
var EntityParser = _ _dependency2 _ _ [ "default" ] ;
var namedCodepoints = _ _dependency3 _ _ [ "default" ] ;
_ _exports _ _ [ "default" ] = function tokenize ( input ) {
var tokenizer = new Tokenizer ( input , new EntityParser ( namedCodepoints ) ) ;
return tokenizer . tokenize ( ) ;
}
} ) ;
define ( "simple-html-tokenizer/tokenizer" ,
[ "./utils" , "./tokens" , "exports" ] ,
function ( _ _dependency1 _ _ , _ _dependency2 _ _ , _ _exports _ _ ) {
"use strict" ;
var preprocessInput = _ _dependency1 _ _ . preprocessInput ;
var isAlpha = _ _dependency1 _ _ . isAlpha ;
var isSpace = _ _dependency1 _ _ . isSpace ;
var StartTag = _ _dependency2 _ _ . StartTag ;
var EndTag = _ _dependency2 _ _ . EndTag ;
var Chars = _ _dependency2 _ _ . Chars ;
var Comment = _ _dependency2 _ _ . Comment ;
function Tokenizer ( input , entityParser ) {
this . input = preprocessInput ( input ) ;
this . entityParser = entityParser ;
this [ "char" ] = 0 ;
this . line = 1 ;
this . column = 0 ;
this . state = 'data' ;
this . token = null ;
}
Tokenizer . prototype = {
tokenize : function ( ) {
var tokens = [ ] , token ;
while ( true ) {
token = this . lex ( ) ;
if ( token === 'EOF' ) { break ; }
if ( token ) { tokens . push ( token ) ; }
}
if ( this . token ) {
tokens . push ( this . token ) ;
}
return tokens ;
} ,
tokenizePart : function ( string ) {
this . input += preprocessInput ( string ) ;
var tokens = [ ] , token ;
while ( this [ "char" ] < this . input . length ) {
token = this . lex ( ) ;
if ( token ) { tokens . push ( token ) ; }
}
this . tokens = ( this . tokens || [ ] ) . concat ( tokens ) ;
return tokens ;
} ,
tokenizeEOF : function ( ) {
var token = this . token ;
if ( token ) {
this . token = null ;
return token ;
}
} ,
createTag : function ( Type , char ) {
var lastToken = this . token ;
this . token = new Type ( char ) ;
this . state = 'tagName' ;
return lastToken ;
} ,
addToTagName : function ( char ) {
this . token . tagName += char ;
} ,
selfClosing : function ( ) {
this . token . selfClosing = true ;
} ,
createAttribute : function ( char ) {
this . _currentAttribute = [ char . toLowerCase ( ) , "" , null ] ;
this . token . attributes . push ( this . _currentAttribute ) ;
this . state = 'attributeName' ;
} ,
addToAttributeName : function ( char ) {
this . _currentAttribute [ 0 ] += char ;
} ,
markAttributeQuoted : function ( value ) {
this . _currentAttribute [ 2 ] = value ;
} ,
finalizeAttributeValue : function ( ) {
if ( this . _currentAttribute ) {
if ( this . _currentAttribute [ 2 ] === null ) {
this . _currentAttribute [ 2 ] = false ;
}
this . _currentAttribute = undefined ;
}
} ,
addToAttributeValue : function ( char ) {
this . _currentAttribute [ 1 ] = this . _currentAttribute [ 1 ] || "" ;
this . _currentAttribute [ 1 ] += char ;
} ,
createComment : function ( ) {
var lastToken = this . token ;
this . token = new Comment ( ) ;
this . state = 'commentStart' ;
return lastToken ;
} ,
addToComment : function ( char ) {
this . addChar ( char ) ;
} ,
addChar : function ( char ) {
this . token . chars += char ;
} ,
finalizeToken : function ( ) {
if ( this . token . type === 'StartTag' ) {
this . finalizeAttributeValue ( ) ;
}
return this . token ;
} ,
emitData : function ( ) {
this . addLocInfo ( this . line , this . column - 1 ) ;
var lastToken = this . token ;
this . token = null ;
this . state = 'tagOpen' ;
return lastToken ;
} ,
emitToken : function ( ) {
this . addLocInfo ( ) ;
var lastToken = this . finalizeToken ( ) ;
this . token = null ;
this . state = 'data' ;
return lastToken ;
} ,
addData : function ( char ) {
if ( this . token === null ) {
this . token = new Chars ( ) ;
this . markFirst ( ) ;
}
this . addChar ( char ) ;
} ,
markFirst : function ( line , column ) {
this . firstLine = ( line === 0 ) ? 0 : ( line || this . line ) ;
this . firstColumn = ( column === 0 ) ? 0 : ( column || this . column ) ;
} ,
addLocInfo : function ( line , column ) {
if ( ! this . token ) {
return ;
}
this . token . firstLine = this . firstLine ;
this . token . firstColumn = this . firstColumn ;
this . token . lastLine = ( line === 0 ) ? 0 : ( line || this . line ) ;
this . token . lastColumn = ( column === 0 ) ? 0 : ( column || this . column ) ;
} ,
consumeCharRef : function ( ) {
return this . entityParser . parse ( this ) ;
} ,
lex : function ( ) {
var char = this . input . charAt ( this [ "char" ] ++ ) ;
if ( char ) {
if ( char === "\n" ) {
this . line ++ ;
this . column = 0 ;
} else {
this . column ++ ;
}
return this . states [ this . state ] . call ( this , char ) ;
} else {
this . addLocInfo ( this . line , this . column ) ;
return 'EOF' ;
}
} ,
states : {
data : function ( char ) {
if ( char === "<" ) {
var chars = this . emitData ( ) ;
this . markFirst ( ) ;
return chars ;
} else if ( char === "&" ) {
this . addData ( this . consumeCharRef ( ) || "&" ) ;
} else {
this . addData ( char ) ;
}
} ,
tagOpen : function ( char ) {
if ( char === "!" ) {
this . state = 'markupDeclaration' ;
} else if ( char === "/" ) {
this . state = 'endTagOpen' ;
} else if ( isAlpha ( char ) ) {
return this . createTag ( StartTag , char . toLowerCase ( ) ) ;
}
} ,
markupDeclaration : function ( char ) {
if ( char === "-" && this . input . charAt ( this [ "char" ] ) === "-" ) {
this [ "char" ] ++ ;
this . createComment ( ) ;
}
} ,
commentStart : function ( char ) {
if ( char === "-" ) {
this . state = 'commentStartDash' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToComment ( char ) ;
this . state = 'comment' ;
}
} ,
commentStartDash : function ( char ) {
if ( char === "-" ) {
this . state = 'commentEnd' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToComment ( "-" ) ;
this . state = 'comment' ;
}
} ,
comment : function ( char ) {
if ( char === "-" ) {
this . state = 'commentEndDash' ;
} else {
this . addToComment ( char ) ;
}
} ,
commentEndDash : function ( char ) {
if ( char === "-" ) {
this . state = 'commentEnd' ;
} else {
this . addToComment ( "-" + char ) ;
this . state = 'comment' ;
}
} ,
commentEnd : function ( char ) {
if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToComment ( "--" + char ) ;
this . state = 'comment' ;
}
} ,
tagName : function ( char ) {
if ( isSpace ( char ) ) {
this . state = 'beforeAttributeName' ;
} else if ( char === "/" ) {
this . state = 'selfClosingStartTag' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToTagName ( char ) ;
}
} ,
beforeAttributeName : function ( char ) {
if ( isSpace ( char ) ) {
return ;
} else if ( char === "/" ) {
this . state = 'selfClosingStartTag' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . createAttribute ( char ) ;
}
} ,
attributeName : function ( char ) {
if ( isSpace ( char ) ) {
this . state = 'afterAttributeName' ;
} else if ( char === "/" ) {
this . state = 'selfClosingStartTag' ;
} else if ( char === "=" ) {
this . state = 'beforeAttributeValue' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToAttributeName ( char ) ;
}
} ,
afterAttributeName : function ( char ) {
if ( isSpace ( char ) ) {
return ;
} else if ( char === "/" ) {
this . state = 'selfClosingStartTag' ;
} else if ( char === "=" ) {
this . state = 'beforeAttributeValue' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . finalizeAttributeValue ( ) ;
this . createAttribute ( char ) ;
}
} ,
beforeAttributeValue : function ( char ) {
if ( isSpace ( char ) ) {
return ;
} else if ( char === '"' ) {
this . state = 'attributeValueDoubleQuoted' ;
this . markAttributeQuoted ( true ) ;
} else if ( char === "'" ) {
this . state = 'attributeValueSingleQuoted' ;
this . markAttributeQuoted ( true ) ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . state = 'attributeValueUnquoted' ;
this . markAttributeQuoted ( false ) ;
this . addToAttributeValue ( char ) ;
}
} ,
attributeValueDoubleQuoted : function ( char ) {
if ( char === '"' ) {
this . finalizeAttributeValue ( ) ;
this . state = 'afterAttributeValueQuoted' ;
} else if ( char === "&" ) {
this . addToAttributeValue ( this . consumeCharRef ( '"' ) || "&" ) ;
} else {
this . addToAttributeValue ( char ) ;
}
} ,
attributeValueSingleQuoted : function ( char ) {
if ( char === "'" ) {
this . finalizeAttributeValue ( ) ;
this . state = 'afterAttributeValueQuoted' ;
} else if ( char === "&" ) {
this . addToAttributeValue ( this . consumeCharRef ( "'" ) || "&" ) ;
} else {
this . addToAttributeValue ( char ) ;
}
} ,
attributeValueUnquoted : function ( char ) {
if ( isSpace ( char ) ) {
this . finalizeAttributeValue ( ) ;
this . state = 'beforeAttributeName' ;
} else if ( char === "&" ) {
this . addToAttributeValue ( this . consumeCharRef ( ">" ) || "&" ) ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this . addToAttributeValue ( char ) ;
}
} ,
afterAttributeValueQuoted : function ( char ) {
if ( isSpace ( char ) ) {
this . state = 'beforeAttributeName' ;
} else if ( char === "/" ) {
this . state = 'selfClosingStartTag' ;
} else if ( char === ">" ) {
return this . emitToken ( ) ;
} else {
this [ "char" ] -- ;
this . state = 'beforeAttributeName' ;
}
} ,
selfClosingStartTag : function ( char ) {
if ( char === ">" ) {
this . selfClosing ( ) ;
return this . emitToken ( ) ;
} else {
this [ "char" ] -- ;
this . state = 'beforeAttributeName' ;
}
} ,
endTagOpen : function ( char ) {
if ( isAlpha ( char ) ) {
this . createTag ( EndTag , char . toLowerCase ( ) ) ;
}
}
}
} ;
_ _exports _ _ [ "default" ] = Tokenizer ;
} ) ;
define ( "simple-html-tokenizer/tokens" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function StartTag ( tagName , attributes , selfClosing ) {
this . type = 'StartTag' ;
this . tagName = tagName || '' ;
this . attributes = attributes || [ ] ;
this . selfClosing = selfClosing === true ;
}
_ _exports _ _ . StartTag = StartTag ; function EndTag ( tagName ) {
this . type = 'EndTag' ;
this . tagName = tagName || '' ;
}
_ _exports _ _ . EndTag = EndTag ; function Chars ( chars ) {
this . type = 'Chars' ;
this . chars = chars || "" ;
}
_ _exports _ _ . Chars = Chars ; function Comment ( chars ) {
this . type = 'Comment' ;
this . chars = chars || '' ;
}
_ _exports _ _ . Comment = Comment ;
} ) ;
define ( "simple-html-tokenizer/utils" ,
[ "exports" ] ,
function ( _ _exports _ _ ) {
"use strict" ;
function isSpace ( char ) {
return ( /[\t\n\f ]/ ) . test ( char ) ;
}
_ _exports _ _ . isSpace = isSpace ; function isAlpha ( char ) {
return ( /[A-Za-z]/ ) . test ( char ) ;
}
_ _exports _ _ . isAlpha = isAlpha ; function preprocessInput ( input ) {
return input . replace ( /\r\n?/g , "\n" ) ;
}
_ _exports _ _ . preprocessInput = preprocessInput ;
} ) ;
requireModule ( "ember-template-compiler" ) ;
} ) ( ) ;
;
if ( typeof exports === "object" ) {
module . exports = Ember . _ _loader . require ( "ember-template-compiler" ) ;
}