Skip to content

Instantly share code, notes, and snippets.

@jlturner
Created November 18, 2015 21:12
Show Gist options
  • Save jlturner/21f471231466af5328e9 to your computer and use it in GitHub Desktop.
Save jlturner/21f471231466af5328e9 to your computer and use it in GitHub Desktop.
Tiny Demo w/ text and time (Nov 18, 2015)
<!DOCTYPE html>
<html>
<head>
<style>
@font-face {
font-family: 'std';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAAOAIAAAwBgRkZUTVlJPI8AAADsAAAAHEdERUYA7gAEAAABCAAAACBPUy8yNTq5cgAAASgAAABgY21hcDskb/gAAAGIAAAB+mdhc3D//wABAAADhAAAAAhnbHlm7EEHWwAAA4wAADBcaGVhZAwFqW4AADPoAAAANmhoZWERAgfCAAA0IAAAACRobXR4AfcAAAAANEQAAAMEbG9jYY8gmyIAADdIAAABhG1heHAAxwAnAAA4zAAAACBuYW1lMIiEKwAAOOwAAANycG9zdMKGwlwAADxgAAACUXdlYmblIVZMAAA+tAAAAAYAAAABAAAAAMw9os8AAAAAupkEIAAAAADScpWfAAEAAAAOAAAAGAAAAAAAAgABAAEAwAABAAQAAAACAAAABAVTAZAAAAAEAQABAAAAAgABAAEAAAACAAEAAgAAAAIACAAAAgAEAAD3/67/+9///wgb//8AAAAAemVocgDAAA0l/AgA/wABAAgAAgAAAAABAAAAAAUABwAAAAAgAAEAAAADAAAAAwAAABwAAQAAAAAA9AADAAEAAAAcAAQA2AAAADIAIAAEABIADQB+AKEApwCtALoAzwDWAN0A7wD2AP0A/wEfAWEBeALGIAogFCAZIC8gXyCsJfz//wAAAA0AIACgAKMArQC6AL8A0QDYAN8A8QD4AP8BHgFhAXgCxiAAIBAgGSAvIF8grCX8////9v/k/8P/wv+9/7H/rf+s/6v/qv+p/6j/p/+J/0j/Mv3l4Kzgp+Cj4I7gX+AT2sQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAMAAAAAAAAAAAAAAAAAAAABAAAEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYgBxcnR2fYKHi4qMjo2PkZOSlJWXlpiZmpybnZ+eoqGjpAAAAGVpAACJAAAAAAAAc4MAAAAAZwAAAAAAAABrAJCgbGQAAAAAAAAAAGNtcIEAALq7AAAAvAAApqoAvwAAAAAAAAAAAG93bnh1ent8eX+AAH6FhoQAqwAAAAAAAAAAAAAAAAAAAf//AAAAAgAAAAACAAcAAAMABwAAESERIQEhESECAP4AAgD+AAIAAQD/AAIABQAAAAACAAAFAAMABwAAAwAHAAABIREhASERIQIAAQD/AP4AAQD/AAcA/gACAP4AAAIAAAAABQAHAAADAB8AAAEhESEBESERIREhESERIREhESERIREhESERIREhESERAgABAP8AAwD/AAEA/wD/AP8A/wD/AAEA/wABAAEAAQABAAMAAQACAP4A/wD+AP8AAQD/AAEAAgABAAIAAQD/AAEA/wAAAwAA/wAFAAcAAAMABwAjAAABIREhGQEhGQEhESERIREhESERIREhESERIREhESERIREhESECAAEA/wABAP8A/wD/AAEA/wABAAEAAQABAAEA/wABAP8A/wAEAAEA/QD/AAEA/gD/AAEAAQACAAIAAgD/AAEA/wD/AP4A/gD+AAADAAAAAAYABwAAAwAHABcAACERIREBIREhASERIREhESERIREhESERIQQAAgD6AAIA/gAEAP8A/wD/AAEAAQABAAEA/wACAP4ABwD+AP4A/gD/AAIAAgACAAEA/fsAAAADAAAAAAYABwAAAwAHAB8AAAERIREBESERKQERIREhESERIREhESERIREhESERIREhAwD/AAEA/wADAP8A/QD/AAEA/wABAAMAAQD/AAEAAQD/AAUAAQD/APwAAgD+AP8AAQADAAEAAQABAP8A/wD+AAEA/AAAAAABAAAFAAEABwAAAwAAESERIQEA/wAHAP4AAAAAAwAA/wADAAcAAAMABwAPAAAhESEZASERIQERIREhESERAwD/AAEA/wD/AP8AAQABAP8AAQAHAP8A+gABAAQAAQD6AAADAAD/AAMABwAABwALAA8AACERIREhESERASERIRkBIREBAAEAAQD/AP8A/wABAP8ABgD/APwA/wAGAAEA+QD/AAEAAAEAAAAABQAHAAAbAAABESERIREhESERIREhESERIREhESERIREhESERBQD/AP8A/wD/AP8AAQD/AAEAAQABAAEAAQD/AAMA/gABAP4AAgD/AAIAAQACAP8AAgD+AAEA/gD/AAABAAABAAUABgAACwAAASERIREhESERIREhAwD/AP4AAgABAAIA/gABAAIAAQACAP4A/wAAAQAA/wACAAIAAAcAABEhESERIREhAQABAP8A/wABAAEA/gD/AAAAAAEAAAMABAAEAAADAAAZASERBAADAAEA/wAAAAABAAAAAAIAAgAAAwAAESERIQIA/gACAP4AAAAAAQAAAAADAAcFAAsAAAEhESERIREhESERIQIA/wD/AAEAAQABAP8AAfv+BQMAAgACBfz7AAIAAAAABQAHAAADAA8AAAERIREBESERIREhESERIREDAP8A/wD/AAEAAwABAP8AAQAFAPsA/wABAAUAAQD/APsA/wAAAQAAAAADAAcAAAcAABEhESERIREhAQACAP4A/wAGAAEA+QAFAAAAAAEAAAAABQAHAAARAAARIREhESERIREhESERIREhESEBAAIA/QAEAAEA/wD+AAMA+wADAAEAAgABAP8A/gD/AP4A/wAAAQAAAAAFAAcAABMAABEhESERIREhESERIREhESERIREhBAABAP8AAQD/APwAAwD+AAIA/QAHAP8A/gD/AP4A/wABAAIAAQACAAAAAAIAAAAABQAHAAADABIAAAEhESkBIyc1IREhESERIREhESECAP8AAQABAP4CAQACAP4A/QABAAIABAABAAL+AQD5AAIAAgD/AAAAAAABAAAAAAUABwAADwAAAREhESERIREhESERIREhEQUA/wD8AAMA/QAEAP0AAwAEAP0A/wABAAMAAwD/AP8A/wAAAgAAAAAFAAcAAAMAEwAAAREhESERIREhESERIREhESERIRECAAEAAgD/AP0A/wABAAMA/gACAAQA/QADAP0A/wABAAUAAQD/AP8A/wAAAAABAAAAAAUABwAADQAAASERIREhESERIREhESEBAAEAAQD9AAUA/wD/AP4AAwACAAEAAQD+AP4A/QAAAAADAAAAAAUABwAAAwAHABsAAAERIREBESERAREhESERIREhESERIREhESERIREDAP8AAQD/AAMA/wD9AP8AAQD/AAEAAwABAP8ABAACAP4A/QACAP4AAgD+AP8AAQACAAEAAgABAP8A/gD/AAACAAAAAAUABwAAAwATAAABIREhAREhESERIREhESERIREhEQIAAQD/AP8AAgD+AP8AAQADAAEA/wADAAMA+gABAAEAAQADAAEA/wD7AP8AAAIAAAAAAgAFAAADAAcAABEhESERIREhAgD+AAIA/gAFAP4A/wD+AAACAAD/AAIABQAABwALAAARIREhESERIREhESEBAAEA/wD/AAIA/gABAAEA/gD/AAYA/gAAAQAAAAAEAAcAABcAAAERIREhESERIREhESERIREhESERIREhEQQA/wD/AP8A/wABAAEAAQABAP8A/wABAAIA/gABAAEAAQABAAEAAQABAP4A/wD/AP8AAAIAAAEABAAEAAADAAcAABkBIREBESERBAD8AAQAAQABAP8AAgABAP8AAAAAAQAAAAAEAAcAABcAAAERIREhESERIREhESERIREhESERIREhEQEAAQD/AP8AAQABAAEAAQD/AP8A/wD/AAIAAQABAAEAAgD/AP8A/wD/AP8A/wD/AAIAAAIAAAAABQAHAAADABMAAAEhESERIREhESERIREhESERIREhAQACAP4AAQABAP0ABAABAP8A/wD+AAEA/wAEAAEAAQABAP8A/wD/AP4AAAAAAwAA/wAGAAYAAAMABwAVAAABIREhESERIQERIREhESERIREhESERAgABAP8AAgD+AAMA/AD/AAEABAABAPwAAgABAAEAAQD7AP8AAQAFAAEA/wD8AP8AAAIAAAAABQAHAAALAA8AAAERIREhESERIREhEQERIRECAP4AAQADAAEA/gD/AAEAAgD+AAYAAQD/APoAAgAEAP0AAwAAAwAAAAAFAAcAAAMABwATAAABIREhASERIQERIREhESERIREhEQIAAQD/AAEA/wABAAEAAQD/AAEA/wD8AAUAAQD+AP0ABgD/AP8A/wD9AP8ABwAAAQAAAAAFAAcAAAsAAAEhESERIREhESERIQEABAD9AAMA/AD/AAEABwD/APsA/wABAAUAAAIAAAAABQAHAAADAAsAAAERIREBESERIREhEQMA/wACAAEA/wD8AAEABQD7AAYA/wD7AP8ABwAAAQAAAAAFAAcAAAsAAAERIREhESERIREhEQQA/gADAPsABQD9AAUA/wD9AP8ABwD/AP8AAAEAAAAABQAHAAAJAAABESERIREhESERBAD+AP4ABQD9AAUA/wD8AAcA/wD/AAAAAAEAAAAABQAHAAANAAABIREhESERIREhESERIQEAAwD+AAEAAgD8AP8AAQAHAP8A+wADAPwAAQAFAAAAAAEAAAAABQAHAAALAAARIREhESERIREhESECAAEAAgD+AP8A/gAHAP4AAgD5AAQA/AAAAAABAAAAAAIABwAAAwAAMREhEQIABwD5AAABAAAAAAQABwAABwAAMREhESERIRECAAIA/wABAAYA+gD/AAABAAAAAAYABwAAGwAAASERIREhESERIREhESERIREhESERIREhESERIQQA/wD/AP4AAgABAAEAAgD/AP8A/wABAAEAAQD+AAEAAQD+AAcA/gABAAEA/wD/AP8A/wD/AP8A/wAAAQAAAAAEAAcAAAUAABEhESERIQIAAgD8AAcA+gD/AAABAAAAAAcABwAAFwAAASERIREhESERIREhESERIREhESERIREhBQD/AP8A/wD+AAEAAQABAAEAAQABAAEA/gADAP8AAQD9AAcA/wD/AP8AAQABAAEA+QAAAQAAAAAGAAcAABMAACERIREhESERIREhESERIREhESERBQD/AP8A/wD+AAEAAQABAAEAAgABAAEAAQD9AAcA/wD/AP8AAwD5AAAAAAIAAAAABgAHAAADAA8AAAERIREBESERIREhESERIREEAP4A/wD/AAEABAABAP8AAQAFAPsA/wABAAUAAQD/APsA/wAAAgAAAAAFAAcAAAMADQAAAREhEQERIREhESERIREDAP8AAgABAP8A/gD+AAMAAwD9AAQA/wD9AP8A/gAHAAAAAAIAAP8ABgAHAAAFABUAAAERIREhEQEhESERIREhESERIREhESEDAAEA/gACAP0A/wABAAQAAQD/AAEA/gABAAEABAD7AP8AAQAFAAEA/wD7AP8A/wAAAAACAAAAAAUABwAAAwARAAABESERAREhESERIREhESERIREDAP8AAwD+AP8A/gAEAAEA/wADAAMA/QD+AP8AAgD+AAcA/wD9AP4AAAAAAQAAAAAEAAcAABMAABEhESERIREhESERIREhESERIREhAgD/AP8AAQADAP4AAQABAP8A/QABAAIAAQACAAEA/wD+AP8A/gD/AAAAAAEAAAAABgAHAAAHAAABESERIREhEQYA/gD+AP4ABwD/APoABgABAAABAAAAAAUABwAACwAAAREhESERIREhESERAwACAP8A/QD/AAIAAQAGAPoA/wABAAYA+gAAAQAAAAAGAAcAAA8AAAEhESERIREhESERIREhESECAP8A/wACAAIAAgD/AP8A/gACAAIAAwD9AAMA/QD+AP4AAAEAAAAABwAHAAATAAABIREhESERIREhESERIREhESERIQUAAgD/AP4A/wD+AP8AAgABAAEAAQAHAPwA/QABAP8AAwAEAP0AAQD/AAABAAAAAAYABwAAGwAAMREhESERIREhESERIREhESERIREhESERIREhEQEAAQD/AP8AAgACAAIA/wD/AAEAAQD+AP4AAgABAAEAAQACAP4AAgD+AP8A/wD/AP4AAgD+AAABAAAAAAYABwAADwAAASERIREhESERIREhESERIQIA/wD/AAIAAgACAP8A/wD+AAQAAQACAP4AAgD+AP8A/AAAAQAAAAAFAAcAABMAAAEhESERIREhESERIREhESERIREhBQD/AP8A/wADAPsAAQABAAEA/QAFAAQA/wD/AP8A/wADAAEAAQABAAEAAAEAAP8AAwAHAAAHAAARIREhESERIQMA/wABAP0ABwD/APoA/wAAAAABAAAAAAMABwUACwAAASERIREhESERIREhAQD/AAEAAQABAP8A/wAEAAMF/fv+AP0AAfsAAQAA/wADAAcAAAcAAAEhESERIREhAwD9AAEA/wADAP8AAQAGAAEAAAEAAAQAAwAHAAALAAARIREhESERIREhESEBAAEAAQD/AP8A/wAGAAEA/wD+AAEA/wAAAAABAAAAAAYAAQAAAwAAESERIQYA+gABAP8AAAAAAQAABQACAAcAAAcAAAEhESERIREhAQD/AAEAAQD/AAYAAQD/AP8AAAIAAAAABQAFAAADABEAAAEhESEBESERIREhESERIREhEQIAAQD/AAMA/AD/AAEAAgD+AAMAAQABAAIA/AABAAEAAQABAAEA/wAAAAACAAAAAAUABwAAAwANAAABIREhAREhESERIREhEQMA/wABAAEAAQD/APwAAgAEAP0ABAD/AP0A/wAHAP4AAAAAAQAAAAAEAAUAAAsAABkBIREhESERIREhEQEAAwD+AAIA/QABAAMAAQD/AP0A/wABAAAAAAIAAAAABQAHAAADAA0AAAEhESEBESERIREhESERAwD/AAEA/gD/AAEAAgACAAQA/QD/AAEAAwABAAIA+QAAAAACAAAAAAUABQAAAwARAAABIREpAREhESERIREhESERIRECAAEA/wADAP0AAwD8AP8AAQADAAMAAQD+AP8A/wABAAMAAQD/AAABAAAAAAMABwAACwAAAREhESERIREhESERAwD/AP4AAQACAP8ABQD/APwABgABAP8A/wAAAgAA/wAFAAUAAAMAEQAAASERIQEhESERIREhESERIREhAgABAP8A/wACAP4A/wABAAQA/wD9AAIAAgD8AAEAAQACAAEA+wD/AAAAAAEAAAAABQAHAAALAAAhESERIREhESERIREDAP8A/gACAAIAAQAEAPwABwD+AP8A/AAAAAACAAAAAAIABwAAAwAHAAABIREhAREhEQIA/gACAP4AAgAGAAEA+QAFAPsAAAIAAP8AAwAHAAADAAsAAAEhESEBIREhESERIQMA/gACAP0AAQACAP8A/gAGAAEA+QAFAPsA/wAAAQAAAAAFAAcAABMAACkBESERIREhESERIREhESERIREhAgD+AAIAAQACAP8A/wABAAEA/gD/AAcA/QABAP8A/wD/AP8A/wABAAAAAAEAAAAAAgAHAAADAAARIREhAgD+AAcA+QAAAAABAAAAAAgABQAADQAAASERIREhESERIREhESEGAP8A/gD/AP4ABwABAP4ABAD8AAQA/AAFAP8A/AAAAAABAAAAAAUABQAACQAAAREhESERIREhEQUA/gD/AP4ABAAEAPwABAD8AAUA/wAAAAACAAAAAAUABQAAAwAPAAABESERAREhESERIREhESERAwD/AP8A/wABAAMAAQD/AAEAAwD9AP8AAQADAAEA/wD9AP8AAAIAAP8ABQAFAAADAA0AAAERIREBESERIREhESERAwD/AAIAAQD/AP4A/gACAAIA/gADAP8A/gD/AP4ABgAAAAACAAD/AAUABQAACQANAAABESERIREhESERAREhEQUA/gD+AP8AAQACAP8ABQD6AAIAAQACAAEA/QACAP4AAAAAAQAAAAAEAAUAAAkAADERIREhESERIRECAAEAAQD+AAUA/wABAP4A/QAAAAABAAAAAAQABQAADwAAAREhESERIREhESERIREhEQQA/wD9AAIA/gABAAMA/gADAP4A/wABAAEAAgABAP8A/wAAAQAAAAADAAcAAAsAAAERIREhESERIREhEQMA/gD/AAIAAQD/AAEA/wABAAYA/gD/AP0AAAEAAAAABQAFAAAJAAABIREhESERIREhAQD/AAIAAQACAPwAAQAEAPwABAD7AAAAAAEAAAAABQAFAAAPAAABIREhESERIREhESERIREhAgD/AP8AAgABAAIA/wD/AP8AAQACAAIA/gACAP4A/gD/AAABAAAAAAcABQAAEwAAASERIREhESERIREhESERIREhESEFAAIA/wD+AP8A/gD/AAIAAQABAAEABQD9AP4AAQD/AAIAAwD9AAIA/gAAAQAAAAAFAAUAABMAADERIREhESERIREhESERIREhESERAQD/AAIAAQACAP8AAQD+AP8AAgABAAIA/gACAP4A/wD+AAIA/gAAAQAA/wAFAAUAAA8AAAERIREhESERIREhESERIREDAAIA/wD9AAIA/gD/AAIAAgADAPsA/wABAAEAAQADAP0AAAEAAAAABQAFAAARAAARIREhESERIREhESERIREhESEFAP8A/wD/AAMA+wABAAEA/gAFAP8A/wD/AP8A/wACAAEAAQAAAQAA/wADAAcAAAcAABEhESERIREhAwD/AAEA/QAHAP8A+gD/AAAAAAEAAP8AAgAHAAADAAARIREhAgD+AAcA+AAAAAABAAD/AAMABwAABwAAASERIREhESEDAP0AAQD/AAMA/wABAAYAAQAAAwAABQAFAAcAAAMABwAPAAABIREhASERIREhESERIREhBAABAP8A/QD/AAEAAgABAP4A/wAHAP8A/wABAAEA/wD/AAEAAAAAAgAAAAACAAcAAAMABwAAASERIQEhESECAP4AAgD+AAIA/gAGAAEA/gD7AAABAAAAAAUABwAAEwAAESERIREhESERIREhESERIREhESEBAP8AAQABAAMA/gABAP8AAgD7AAEAAQABAAMAAQD/AP0A/wD/AP8AAAAABAAAAAAFAAYAAAMABwALAB8AAAEhESEBIREhASERIQEhESERIREhESERIREhESERIREhBAABAP8A/AABAP8AAwD/AAEA/QABAAMAAQD/AAEA/wD9AP8AAQD/AAYA/wD8AP8ABAD+AAQA/wD/AP4A/wD/AAEAAQACAAEAAAEAAAAABgAHAAAbAAARIREhESERIREhESERIREhESERIREhESERIREhAgD+AAEA/wACAAIAAgD/AAEA/gACAP4A/gD+AAMAAQABAAEAAQD/AAEA/wD/AP8A/wD/AP4AAgAAAAABAAD/AAIABwAAAwAAESERIQIA/gAHAPgAAAAABQAA/wAEAAcAAAQACQANABEAJQAAATczESEBByMRIQEhESERIREhASERIREhESERIREhESERIREhESEDAAL+/wD+AAL+AQABAAEA/wD/AAEAAQABAP8A/gABAP8A/wABAAIA/wABAAX+Av8A+wICAQABAAEAAQD/AAEA/AD/AAEAAQABAAQAAQD/AP8AAAAAAQAAAwAEAAQAAAMAABkBIREEAAMAAQD/AAAAAAMAAAIAAwAHAAAHAA8AEwAAAREhESERIREhESERIREhEQEhESECAP8AAQABAP8A/wD/AAEA/wADAP0ABQABAAEA/wD/AP8AAQABAP8A/gD/AAAAAAIAAAAABQAHAAADABMAAAEhESERIREhESERIREhESERIREhBAD+AAIA/wD/AAMA/AD/AAEAAQACAAYAAQD8AP8A/wD/AAEAAQABAAIAAAAAAwAAAAAFAAcAAAMABwAXAAABIREhASERIQEhESERIREhESERIREhESECAAEA/wD/AAEA/wABAP4AAQABAAEAAQABAP4A/wADAAEAAwD/APoABAABAAEA/wD/APwAAgAAAwAAAAAFAAcAAAMABwAXAAABIREhASERIREhESERIREhESERIREhESEDAAEA/wD/AAEA/wD+AAEAAQABAAEAAQD+AP8ABwD/AP0AAQD8AAQAAQABAP8A/wD8AAIAAAAAAgAAAAAFAAcAAAMAGAAAASERIREVIREhESERIREhESERIREhESERMwIAAQD/AAEA/wABAAEAAQD+AP8A/gABAP4DAAEAAf7+AQABAP8A/wD7AAIA/gAFAAEAAAADAAAAAAUABwAAAwAHAB4AAAEhESEBIREhARUhESERIREhESERIREhESERIREhETMEAAEA/wD+AAEA/wD/AAEA/wACAAEAAQD+AP8A/gABAP8A/gcA/wD9AAEAAf7+AQABAP8A/gD8AAIA/gAEAAEAAQAAAAQAAAAABQAHAAADAAcACwAXAAABIREhASERIQEhESEBIREhESERIREhESEBAAEA/wABAAEA/wABAAEA/wD/AP4AAQADAAEA/gD/AAcA/wD9AAEAAwD/APoABAABAP8A/AACAAACAAAAAAUABwAAAwAYAAABIREhERUhESERIREhESERIREhESERIREzAgABAP8AAQD/AAEAAQABAP4A/wD+AAEA/gMAAQAB/v4BAAEA/wD+APwAAgD+AAQAAgAAAAIAAAAABwAHAAADABcAAAEhESERIREhESERIREhESERIREhESERIQIAAQD/AAUA/gABAP8AAgD8AP8A/gABAAEABAABAAIA/wD+AP8A/gD/AAMA/QAFAAEAAAAAAQAA/wAFAAcAAA8AACkBESERIREhESERIREhESECAP8A/wABAAQA/QADAP4A/wABAAUAAQD/APsA/wD/AAAAAAIAAAAABQAHAAADABMAAAERIREBESERIREhESERIREhESERAgD/AAMA/gADAPsAAgABAAIA/QAHAP8AAQD8AP8A/wD/AAUAAQD/AP8A/wAAAgAAAAAFAAcAAAMAEwAAASERIQERIREhESERIREhESERIREDAAEA/wABAP4AAwD7AAIAAQACAP0ABwD/AP0A/wD/AP8ABQABAP8A/wD/AAABAAAAAAUABwAAFwAAASERIREhESERIREhESERIREhESERIREhAgABAAEAAQD9AAIA/gADAPsAAQABAAEA/wAHAP8A/wD/AP8A/wD/AP8ABQABAP8AAQAAAwAAAAAFAAcAAAMABwATAAABESERKQERIQERIREhESERIREhEQIA/wACAAEA/wABAP4AAwD7AAUA/QAHAP8AAQD/AP0A/wD/AP8ABQD/AP8AAAAAAgAAAAACAAcAAAMACQAAASERIQERIREhEQEA/wABAP8AAQABAAYAAQD5AAUAAQD6AAAAAAIAAAAAAgAHAAADAAkAAAEhESEBESERIRECAP8AAQD+AAEAAQAGAAEA+QAGAP8A+wAAAAADAAAAAAMABwAABAAIAA4AAAE1NzMRASERIQERIREhEQIAAv7+AAEA/wD/AAEAAQAFAP4C/wACAP8A+gAGAP8A+wAAAAMAAAAAAwAHAAADAAcACwAAASERKQIRIQERIREDAP8AAQD9AAEA/wABAAIABgABAP8A+gAFAPsAAAAAAAIAAAAABQAHAAADABwAAAEhESEBIREhESERIyc1IREhESERIREhESERIREhBAABAP8A/QABAAEA/wD+AgIAAQABAP8A/wD/AP4AAQAHAP8A/gD/AAIAAQAC/v8A/wD7AAEAAQD+AAYAAAAAAAMAAAAABgAHAAADAAcAFwAAASERIQERIREBESERIREhESERIREhESERAgABAP8AAgD+AP8A/wABAAIAAQABAAEA/wAHAP8A+wADAP0A/wABAAMAAQABAP8A/wD9AP8AAAMAAAAABgAHAAADAAcAFwAAASERIQERIREBESERIREhESERIREhESERAwABAP8AAQD+AP8A/wABAAEAAQACAAEA/wAHAP8A+wADAP0A/wABAAMAAQABAP8A/wD9AP8AAAIAAAAABgAHAAADABgAAAERIRkBFSERIREhESERIREhESERIREhETMEAP4AAgD+AAIAAQABAP8A/AD/AAEA/gEAAwD9AAT+/gEAAQD/AP8A/AD/AAEABAABAAAAAwAAAAAGAAcAAAMABwAcAAABIREhAREhGQEVIREhESERIREhESERIREhESERMwUAAQD/AP8A/gABAP8AAgABAAEA/wD8AP8AAQD+BwD/APsAAwD9AAT+/gEAAQD/AP4A/QD/AAEAAwACAAAABAAAAAAGAAcAAAMABwALABcAAAEhESEBIREhAREhEQERIREhESERIREhEQQAAQD/AP0AAQD/AAMA/gD/AP8AAQAEAAEA/wAHAP8AAQD/APsAAwD9AP8AAQADAAEA/wD9AP8AAAMAAAAABgAHAAAFAAsAEwAAAREhESEZASERIREhASERIREhESECAAEAAQD/AP8AAgD9AAUA/wD7AAEABgD+AAEAAQD9AP8A/wAGAPoA/wAGAAAAAAEAAAAABQAHAAAUAAABIREhESERIREhESERIRcRIREhESEBAAEAAQACAP8A/QD/AAH+AgEA/wD/AAcA/wD/APwA/wABAAQAAvwCBAABAAAAAgAAAAAFAAcAAAMAFAAAASERIQERIREhESERIREhESERIREhAwABAP8A/wABAP8AAQACAP8A/QD/AAH+BwD/AP7+/AIEAAEA/wD8AP8AAQAEAAAAAQAAAAAFAAcAABQAAAERIREhESERIREhESERIREhESERMwIAAQD/AAEAAQABAP8A/QD/AAEA/gX++wIFAAEA/wD/APwA/wABAAQAAQAAAAADAAAAAAUABwAAAwAHABMAAAEhESEBIREhGQEhESERIREhESERAQABAP8AAgABAP8AAgD/AP0A/wACAAcA/wABAP8A+wAEAPwA/wABAAQA/AAAAAACAAAAAAYABwAAAwAXAAABIREpAhEhESERIREhESERIREhESERIQQAAQD/AP8AAQACAP8A/wD+AP8A/wACAAIA/wAHAP8A/wD/AP8A/QADAAEAAQD/AAEAAAAAAAIAAP8ABQAHAAADABUAAAEhESERIREhESERIREhESERIREhESEDAP8AAQD/AP4AAQADAAEA/wABAP8A/wAGAP8A/wD7AAcAAQD/AP8A/wD9AP8AAAIAAAAABQAHAAADABcAAAEhESERIREhESERIREhESERIREhESERIQIAAQD/AAEAAQABAPwA/wABAAIA/gACAP8AAQABAAUA/wD+APwAAQABAAEAAQABAAEAAAAAAwAAAAAFAAcAAAMABwAZAAABIREhASERIQERIREhESERIREhESERIREhEQIAAQD/AAEAAQD/AAIA/AD/AAEAAgD+AAEAAQABAAEAAQAFAP8A/gD8AAEAAQABAAEAAQABAP8A/wAAAAACAAAAAAUABwAAAwAcAAABIREhERUhESERIREhESERIREhESERIREhESERMwIAAQD/AAEA/wABAAEAAQD8AP8AAQACAP0AAQD+AQABAAP+/gEAAQD/AP8A+wABAAEAAQABAAEAAQAAAAMAAAAABQAHAAADAAcAIAAAASERIQEhESEBIREhESERIREhESERIREhESERIREhETMXBAABAP8A/gABAP8A/wABAP8AAgABAAEA/AD/AAEAAgD+AP8A/gIHAP8A+wABAAMAAQABAP8A/gD8AAEAAQABAAEAAQABAAIAAAAEAAAAAAUABwAAAwAHAAsAGQAAASERIQEhESEBIREhESERIREhESERIREhESECAAEA/wABAAEA/wD+AAEA/wADAAEA/AD/AAEAAgD+AAEAAQAFAP8AAQD/AP8A/wD8AAEAAQABAAEAAAIAAAAABQAHAAADABoAAAEhESERFSERIREhESERIREhESERIREhESERMwIAAQD/AAEA/wABAAEAAQD8AP8AAQACAP4A/gEAAQAD/v4BAAEA/wD/APsAAQABAAEAAQACAAAAAAACAAAAAAcABQAAAwAaAAABIREhASE1NzMRIREhESERIREhESERIREhESECAAEA/wADAAEAAv7+AAIA+gD/AAEAAgD+AAUA/wABAAEAAQD+Av4A/wD/AAEAAQABAAEAAQD/AAAAAQAA/wAEAAUAAA8AACkBESERIREhESERIREhESECAP8A/wABAAMA/gACAP8A/wABAAMAAQD/AP0A/wD/AAAAAAMAAAAABQAHAAADAAcAGQAAASERIQEhESEBESERIREhESERIREzESERIRECAAEA/wD/AAEA/wAEAP0AAwD8AP8AAQD7AQUBAAMAAQADAP8A/gD+AP8A/wABAAMAAQABAP8A/wAAAAAAAwAAAAAFAAcAAAMABwAZAAABIREhASERIQERIREhESERIREhETMRIREhEQIAAQD/AAEAAQD/AAIA/QADAPwA/wABAPsBBQEAAwABAAMA/wD+AP4A/wD/AAEAAwABAAEA/wD/AAAAAAACAAAAAAUABwAAAwAaAAABIREhERUhESERIREhESERIREhESERIREhETMCAAEA/wABAP8AAQABAAEA/QADAPwA/wABAP4DAAEAAf7+AQABAP8A/wD9AP8A/wABAAQAAQAAAAAABAAAAAAFAAcAAAMABwALABkAAAEhESEBIREhASERIQERIREhESERIREhESERAwABAP8A/wABAP8A/wABAP8ABAD9AAMA/AD/AAEAAwAHAP8A/QABAAMA/wD+AP4A/wD/AAEAAwABAP8AAAAAAgAAAAACAAcAAAMACQAAASERIQERIREhEQEA/wABAP8AAQABAAYAAQD5AAUAAQD6AAAAAAIAAAAAAgAHAAADAAkAAAEhESEBESERIRECAP8AAQD+AAEAAQAGAAEA+QAGAP8A+wAAAAADAAAAAAMABwAABAAIAA4AAAE1NzMRASERIQERIREhEQIAAv7+AAEA/wD/AAEAAQAFAP4C/wACAP8A+gAGAP8A+wAAAAMAAAAAAwAHAAADAAcACwAAASERKQIRIQERIREDAP8AAQD9AAEA/wABAAIABgABAP8A+gAFAPsAAAAAAAIAAAAABQAHAAADABYAAAEhESEFFSERIREhESERIREhESERIREzBAABAP8A/QABAP8AAgABAAEA/gD/AP4A/gcA/wAC/gEAAQD/AP4A/AAEAPwABgAAAAADAAAAAAUABwAAAwAHABcAAAEhESEBESERAREhESERIREhESERIREhEQEAAQD/AAIA/wD/AP8AAQABAAEAAQABAP8ABwD/APsAAwD9AP8AAQADAAEAAQD/AP8A/QD/AAADAAAAAAUABwAAAwAHABcAAAEhESEZASERAREhESERIREhESERIREhEQMAAQD/AP8A/wD/AAEAAQABAAEAAQD/AAcA/wD7AAMA/QD/AAEAAwABAAEA/wD/AP0A/wAAAAACAAAAAAUABwAAAwAYAAABESERASERIREhESERIREhESERIREzFxUhAwD/AAEA/wABAAEAAQD/AP0A/wABAP4CAQABAAMA/QAFAAEA/wD/APwA/wABAAQAAQAC/gAAAAADAAAAAAUABwAAAwAHAB4AAAEhESEBESERARUhESERIREhESERIREhESERIREhETMEAAEA/wD/AP8A/wABAP8AAgABAAEA/wD9AP8AAQD/AP4HAP8A+wADAP0ABP7+AQABAP8A/gD9AP8AAQADAAEAAQAAAAQAAAAABQAHAAADAAcACwAXAAABIREhASERIQERIREBESERIREhESERIREDAAEA/wD+AAEA/wACAP8A/wD/AAEAAwABAP8ABwD/AAEA/wD7AAMA/QD/AAEAAwABAP8A/QD/AAADAAAAAAUABQAAAwAHAA8AAAEhESERIREhAREhESERIREDAP8AAQD/AAEA/gAEAP8A/AAEAP8A/wD/AAMAAQD8AP8ABAAAAAABAAAAAAUABwAAEgAAASERIRcRIREhESERIREhESERIQEA/wAB/gIBAP8A/wABAAEAAgD8AAEABAAC/AIEAAEAAQD/AP8A+wAAAAAAAgAAAAAFAAcAAAMAEgAAASERIQERIREhESERIREhESERIQMAAQD/AP8AAQD/AAEAAgD8AP8AAf4HAP8A/v78AgQAAQD/APsAAQAEAAAAAAABAAAAAAUABwAAEgAAASERIREzFxEhESERIREhESERIQEA/wABAP4CAQD/AAEAAQABAPwAAQAEAAEAAvsCBQABAP8A/wD7AAADAAAAAAUABwAAAwAHABEAAAEhESEBIREhGQEhESERIREhEQEAAQD/AAIAAQD/AAIA/AD/AAIABwD/AAEA/wD7AAQA+wABAAQA/AAAAwAA/wAFAAcAAAMABwAYAAABIREhASERIRkBIREhESERIREhESERIRcRAgABAP8AAQABAP8AAgD/AP0AAgD+AP8AAf4CBgD/AAIA/wD8AAMA+wD/AAEAAQABAAMAAv0CAAAAAAMAAP8ABQAHAAADAAcAFwAAASERIQEhESEZASERIREhESERIREhESERAQABAP8AAgABAP8AAgD/AP0AAgD+AP8AAgAHAP8AAQD/APwAAwD7AP8AAQABAAEAAwD9AAAAAAIAAAAABQAHAAADABUAAAEhESEBIREhESERIREhESERIREhESEEAAEA/wD8AAEAAwD+AAEAAgD8AP8AAQD/AAcA/wABAP8A/gD9AAIA/QABAAMAAgAAAAADAAD/AAUABwAAAwAHABsAAAEhESEBIREhASERIREhESERIREhESERIREhESEEAAEA/wD+AAEA/wD+AAEAAwABAP8A/QACAP4A/wABAP8ABwD/APwAAgADAP8A/wD7AP8AAQABAAEAAgACAAABAAD+AAEACAAAAwAAESERIQEA/wAIAPYAAAAAAwAAAAAGAAcAAAMABwAXAAABIREhASERIQEhESERIREhESERIREhESEEAAEA/wD9AAEA/wADAAIA/wD/AP4A/wD/AAIAAgAHAP8AAQD/AP8A/wD/AP0AAwABAAEA/wAAAQAABAADAAcAAAsAABEhESERIREhESERIQEAAQABAP8A/wD/AAYAAQD/AP4AAQD/AAAAAAEAAAMABAAEAAADAAAZASERBAADAAEA/wAAAAABAAADAAQABAAAAwAAGQEhEQQAAwABAP8AAAAAAQAAAwAEAAQAAAMAABkBIREEAAMAAQD/AAAAAAEAAAMABAAEAAADAAAZASERBAADAAEA/wAAAAABAAADAAgABAAAAwAAGQEhEQgAAwABAP8AAAAAAQAABQABAAcAAAMAABEhESEBAP8ABwD+AAAAAAQAAAAABgAGAAAEAAgADAAeAAABNTczEQEhESEBIREhESERIREhESERIREhESERIREhBQAC/v8AAQD/AP0AAwD9AP8A/wABAAEAAwD/AP4AAwD9AAQA/gL/AP4A/wAFAP8A/AABAAIAAQD/AP8A/wD/AP8AAAAAAAEAAAAABQAFAAADAAARIREhBQD7AAUA+wAAAAABAAAAAjMzvWaGX18PPPUACwgAAAAAANJylZ8AAAAA0nKVnwAA/gAIAAgAAAAACAACAAAAAAAAAAEAAAgA/gABAAkAAAAAAAgAAAEAAAAAAAAAAAAAAAAAAADBAwAAAAMAAAAIAAAAAwAAAAMAAAADAAAABAAAAAYAAAAGAAAABwAAAAcAAAACAAAABAAAAAQAAAAGAAAABgAAAAMAAAAFAAAAAwAAAAQAAAAGAAAABAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAMAAAAFAAAABQAAAAUAAAAGAAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAUAAAAHAAAABQAAAAgAAAAHAAAABwAAAAYAAAAHAAAABgAAAAUAAAAHAAAABgAAAAcAAAAIAAAABwAAAAcAAAAGAAAABAAAAAQAAAAEAAAABAAAAAYAAAADAAAABgAAAAYAAAAFAAAABgAAAAYAAAAEAAAABgAAAAYAAAADAAAABAAAAAYAAAADAAAACQAAAAYAAAAGAAAABgAAAAYAAAAFAAAABQAAAAQAAAAGAAAABgAAAAgAAAAGAAAABgAAAAYAAAAEAAAAAwAAAAQAAAAGAAAAAwAAAAMAAAAGAAAABgAAAAcAAAADAAAABQAAAAUAAAAEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAYAAAAGAAAABgAAAAMAAAADAAAABAAAAAQAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAACAAAAAUAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAMAAAAEAAAABAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAQAAAAHAAAABAAAAAQAAAAIAAAABAAAAAgAAAACqgAAAgAAAAFVAAABVQAAAQAAAAGZAAAAcQAABQAAAAUAAAAFAAAABQAAAAkAAAACAAAAAZkAAAIAAAAHAAAABQAAAAAAAAAAAAAAAAAAAAAWACwAZgCmANYBEgEgAUIBZAGWAbABxAHSAeAB+gIcAjACUgJ4Ap4CvgLmAwQDOgNiA3YDkAO8A9ID/gQmBFIEdASeBLgE1ATuBQYFJAU+BUoFXAWOBZ4FygXwBhIGMgZeBoQGqga+BtgG+AceB04HbgeUB6gHwgfWB/AH/ggSCDgIWAhyCJIItgjQCPYJEAkmCUIJaAl2CZQJrAnOCe4KDgokCkQKXgp2CpYKvArgCwALIgs2C0QLWAt8C3wLkgu4C/YMKAw2DH4MjAy2DN4NDg0+DWwNpg3YDgYONA5UDnwOpA7QDvoPFA8uD1APbg+kD9QQBBAyEGgQmhDEEOwRFhE+EWgRlhHAEe4SIhJWEpQSyBL6EywTTBOAE7QT5hQcFDYUUBRyFJAUvBTsFRwVTBWGFbgV3BYCFioWThZ0FqYW1hcCFzgXRhd2F5AXkBeQF5AXkBeQF5AXkBeQF5AXkBeQF54XrBe6F8gX1hfkF+QX5BggGC4AAQAAAMEAJgAFAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIA3gADAAEECQAAADYAAAADAAEECQABACQANgADAAEECQACAAoAWgADAAEECQADADoAZAADAAEECQAEADAAngADAAEECQAFABIAzgADAAEECQAGACwA4AADAAEECQAHADYBDAADAAEECQAIAAYBQgADAAEECQAJADYBSAADAAEECQAKADYBfgADAAEECQALADYBtAADAAEECQAMADYB6gADAAEECQDIABYCIAADAAEECQDJADACNgADAAEECQDKAAgCZgADAAEECQDLAAwCbgADAAEECdkDABoCegBoAHQAdABwADoALwAvAHcAdwB3AC4AZgBhAHQAbwByAGMAYQBvAHMALgBjAG8AbQAuAGIAcgBOAG8AawBpAGEAIABDAGUAbABsAHAAaABvAG4AZQAgAEYAQwBTAG0AYQBsAGwAegBlAGgAOgAgAE4AbwBrAGkAYQAgAEMAZQBsAGwAcABoAG8AbgBlACAARgBDADoAIAAyADAAMAAzAE4AbwBrAGkAYQAgAEMAZQBsAGwAcABoAG8AbgBlACAARgBDACAAUwBtAGEAbABsADIAMAAwADMAOwAgADIALgAyAE4AbwBrAGkAYQBDAGUAbABsAHAAaABvAG4AZQBGAEMALQBTAG0AYQBsAGwAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAYQB0AG8AcgBjAGEAbwBzAC4AYwBvAG0ALgBiAHIAegBlAGgAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAYQB0AG8AcgBjAGEAbwBzAC4AYwBvAG0ALgBiAHIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAYQB0AG8AcgBjAGEAbwBzAC4AYwBvAG0ALgBiAHIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAYQB0AG8AcgBjAGEAbwBzAC4AYwBvAG0ALgBiAHIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAYQB0AG8AcgBjAGEAbwBzAC4AYwBvAG0ALgBiAHIAVwBlAGIAZgBvAG4AdAAgADEALgAwAFcAZQBkACAATgBvAHYAIAAxADgAIAAxADUAOgA1ADIAOgA0ADcAIAAyADAAMQA1AGsAZQBlAHAAdABhAHUAcgB1AHMARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD/AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAAEAAgECAQMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQADAKMAhQC9AJYA6ACGAQQAngCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4AZgDTANAA0QCvAGcAkQDWANQA1QBoAOsAiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AHgAegB5AHsAfQB8AKEAfwB+AIAAgQDsALoA+AD5AOUAuwDYAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgCyALMAtwETARQBFQEWB3VuaTAwMEQMdmlzaWJsZXNwYWNlB3VuaTAwQUQHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMTAHdW5pMjAxMQpmaWd1cmVkYXNoB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTI1RkMAAAAAAVZM5SAAAA==) format('truetype');
font-weight: normal;
font-style: normal;
}
body {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: bottom;
justify-content: center;
}
canvas {
-webkit-scroll-snap-coordinate:0%0%;
}
html, body, canvas {
-webkit-scroll-snap-type: mandatory;
margin:0px;
padding:0px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default;
background-color: black;
}
</style>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
</head>
<script type="text/tiny">
$high_score = 0
$init = {
color(3)
clear()
$ball_size = [10, 10]
$ball_pos = &dimensions / 2
$ball_velocity = [0,0]
$gravity = [0,0.06]
$pball_size = [5,5]
$pball_pos = $ball_pos
$start_time = &time
}
run $init
$constrain_ball_velocity = {
$ball_velocity = $ball_velocity # [[-2.5,2.5],[-2.5,2.5]]
}
$move_ball = {
$top_left = $ball_pos + $ball_velocity
$bottom_right = $ball_pos + $ball_velocity
if $top_left[0] < 0 or $bottom_right[0] > &dimensions[0] {
$ball_velocity = $ball_velocity * [-1, 0]
}
if $top_left[1] < 18 {
$ball_velocity = $ball_velocity * [0, -1]
}
if $bottom_right[1] - $ball_velocity[1] >= &dimensions[1] {
run $init
}
$ball_pos = ($ball_pos + $ball_velocity) # [[0, &dimensions[0]], [0, &dimensions[1]]]
$ball_velocity = $ball_velocity + $gravity
run $constrain_ball_velocity
}
draw {
if &touch and &last_touch[0] >= ($ball_pos - ($ball_size / 2))[0] and &last_touch[0] <= ($ball_pos + ($ball_size / 2))[0] and &last_touch[1] >= ($ball_pos - ($ball_size / 2))[1] and &last_touch[1] <= ($ball_pos + ($ball_size / 2))[1] {
$base = $ball_pos - &last_touch
$mag = sqrt($base[0] * $base[0] + $base[1] * $base[1])
$normalized = $base / $mag
$ball_velocity = [$normalized[0] * 0.3, abs($normalized[1]) * -1] * 5
run $constrain_ball_velocity
}
color(rand(3))
rect(($pball_pos - ($pball_size / 2)) : $pball_size)
color(0)
rect(($ball_pos - ($pball_size / 2)) : $pball_size)
$pball_pos = $ball_pos
run $move_ball
$score = floor((&time - $start_time) / 100)
if $score > $high_score {
$high_score = $score
}
color(1)
rect([0,0,&dimensions[0], 18])
color(3)
text($score, [1, 0])
color(2)
text("High: " + $high_score, [1, 9])
}
</script>
<body>
<canvas></canvas>
<script>
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
* Hashcode.js 1.0.2
* https://github.com/stuartbannerman/hashcode
*
* Copyright 2013 Stuart Bannerman (me@stuartbannerman.com)
* Released under the MIT license
*
* Date: 07-04-2013
*
* packaged as npm module by
* A. Siebert, ask@touchableheroes.com
*
* usage:
* ------------------------------------
* var encode = require( 'hashcode' ).hashCode;
* var hash = encode().value( "my string value" );
*/
exports.hashCode = function () {
// Hashes a string
var hash = function (string) {
var string = string.toString(), hash = 0, i;
for (i = 0; i < string.length; i++) {
hash = (((hash << 5) - hash) + string.charCodeAt(i)) & 0xFFFFFFFF;
}
return hash;
};
// Deep hashes an object
var object = function (obj) {
var result = 0;
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
result += hash(property + value(obj[property]));
}
}
return result;
};
// Does a type check on the passed in value and calls the appropriate hash method
var value = function (value) {
var types =
{
'string': hash,
'number': hash,
'boolean': hash,
'object': object
// functions are excluded because they are not representative of the state of an object
// types 'undefined' or 'null' will have a hash of 0
};
var type = typeof value;
return value != null && types[type] ? types[type](value) + hash(type) : 0;
};
return {
value: value
};
};
},{}],2:[function(require,module,exports){
/*
https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace
so it's better encapsulated. Now you can have multiple random number generators
and they won't stomp all over eachother's state.
If you want to use this as a substitute for Math.random(), use the random()
method like so:
var m = new MersenneTwister();
var randomNumber = m.random();
You can also call the other genrand_{foo}() methods on the instance.
If you want to use a specific seed in order to get a repeatable random
sequence, pass an integer into the constructor:
var m = new MersenneTwister(123);
and that will always produce the same random sequence.
Sean McCullough (banksean@gmail.com)
*/
/*
A C-program for MT19937, with initialization improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.
Before using, initialize the state by using init_seed(seed)
or init_by_array(init_key, key_length).
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The names of its contributors may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Any feedback is very welcome.
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
*/
var MersenneTwister = function(seed) {
if (seed == undefined) {
seed = new Date().getTime();
}
/* Period parameters */
this.N = 624;
this.M = 397;
this.MATRIX_A = 0x9908b0df; /* constant vector a */
this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
this.mt = new Array(this.N); /* the array for the state vector */
this.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */
this.init_seed(seed);
}
/* initializes mt[N] with a seed */
/* origin name init_genrand */
MersenneTwister.prototype.init_seed = function(s) {
this.mt[0] = s >>> 0;
for (this.mti=1; this.mti<this.N; this.mti++) {
var s = this.mt[this.mti-1] ^ (this.mt[this.mti-1] >>> 30);
this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)
+ this.mti;
/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
/* In the previous versions, MSBs of the seed affect */
/* only MSBs of the array mt[]. */
/* 2002/01/09 modified by Makoto Matsumoto */
this.mt[this.mti] >>>= 0;
/* for >32 bit machines */
}
}
/* initialize by an array with array-length */
/* init_key is the array for initializing keys */
/* key_length is its length */
/* slight change for C++, 2004/2/26 */
MersenneTwister.prototype.init_by_array = function(init_key, key_length) {
var i, j, k;
this.init_seed(19650218);
i=1; j=0;
k = (this.N>key_length ? this.N : key_length);
for (; k; k--) {
var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)
this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))
+ init_key[j] + j; /* non linear */
this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
i++; j++;
if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }
if (j>=key_length) j=0;
}
for (k=this.N-1; k; k--) {
var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);
this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))
- i; /* non linear */
this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
i++;
if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }
}
this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
}
/* generates a random number on [0,0xffffffff]-interval */
/* origin name genrand_int32 */
MersenneTwister.prototype.random_int = function() {
var y;
var mag01 = new Array(0x0, this.MATRIX_A);
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (this.mti >= this.N) { /* generate N words at one time */
var kk;
if (this.mti == this.N+1) /* if init_seed() has not been called, */
this.init_seed(5489); /* a default initial seed is used */
for (kk=0;kk<this.N-this.M;kk++) {
y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);
this.mt[kk] = this.mt[kk+this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
}
for (;kk<this.N-1;kk++) {
y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);
this.mt[kk] = this.mt[kk+(this.M-this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
}
y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];
this.mti = 0;
}
y = this.mt[this.mti++];
/* Tempering */
y ^= (y >>> 11);
y ^= (y << 7) & 0x9d2c5680;
y ^= (y << 15) & 0xefc60000;
y ^= (y >>> 18);
return y >>> 0;
}
/* generates a random number on [0,0x7fffffff]-interval */
/* origin name genrand_int31 */
MersenneTwister.prototype.random_int31 = function() {
return (this.random_int()>>>1);
}
/* generates a random number on [0,1]-real-interval */
/* origin name genrand_real1 */
MersenneTwister.prototype.random_incl = function() {
return this.random_int()*(1.0/4294967295.0);
/* divided by 2^32-1 */
}
/* generates a random number on [0,1)-real-interval */
MersenneTwister.prototype.random = function() {
return this.random_int()*(1.0/4294967296.0);
/* divided by 2^32 */
}
/* generates a random number on (0,1)-real-interval */
/* origin name genrand_real3 */
MersenneTwister.prototype.random_excl = function() {
return (this.random_int() + 0.5)*(1.0/4294967296.0);
/* divided by 2^32 */
}
/* generates a random number on [0,1) with 53-bit resolution*/
/* origin name genrand_res53 */
MersenneTwister.prototype.random_long = function() {
var a=this.random_int()>>>5, b=this.random_int()>>>6;
return(a*67108864.0+b)*(1.0/9007199254740992.0);
}
/* These real versions are due to Isaku Wada, 2002/01/09 added */
module.exports = MersenneTwister;
},{}],3:[function(require,module,exports){
var parse = require('./parser.js').parse;
function quote(str) {
return "'" + str + "'"
}
function parens(str) {
return "(" + str + ")";
}
function square_br(str) {
return "[" + str + "]";
}
function curly_br(str) {
return "{" + str + "}";
}
function eol(str) {
return str + ';';
}
function func(funcName, params) {
return parens(funcName + parens(params.join(',')));
}
function self_executing(str) {
return parens(parens('function()'+curly_br(str)) + "()");
}
var compileStmt = function(stmt) {
var val;
if (stmt === undefined) return eol("");
switch(stmt.tag) {
case 'expression': // Expression
return eol('__r=' + compileExpr(stmt.body));
case 'assignment': // Assignment
return (function(){
var variableJsStr = 'user' + square_br(quote(stmt.name.identifier));
var valueJsStr = compileExpr(stmt.body);
var funcParams = [variableJsStr, valueJsStr];
var out;
switch(stmt.operator) {
case "=":
out = valueJsStr;
break;
case ":=":
out = func('concat',funcParams);
break;
case "^=":
out = func('powOp',funcParams);
break;
case '+=':
out = func('additionOp',funcParams);
break;
case '-=':
out = func('subtractionOp',funcParams);
break;
case '*=':
out = func('multiplicationOp',funcParams);
break;
case '/=':
out = func('divisionOp',funcParams);
break;
case '%=':
out = func('moduloOp',funcParams);
break;
case '|=':
out = func('intersection', funcParams);
break;
case '##=':
out = func('wrap', funcParams);
break;
case '#=':
out = func('clamp', funcParams);
break;
case ':=':
out = func('concat', funcParams);
break;
default:
throw "unknown operator: " + stmt.operator;
}
return eol('__r=' + out ) + eol(variableJsStr + '=__r');
})();
case 'list_index_assignment': // Assignment of list element
return eol('__r=' + compileExpr(stmt.body)) +
eol('user' + square_br(quote(stmt.name.identifier)) + stmt.index_accessors.map(function(index_accessor){ return square_br(compileExpr(index_accessor)); }).join('') + '=__r');
case 'conditional': // if ... else if ... else
return eol(
'if' + parens(compileExpr(stmt.condition) + '===true') +
curly_br(compileStatements(stmt.body)) +
(stmt.else_body !== undefined ? 'else' + curly_br(compileStatements(stmt.else_body)) : ''));
case 'iterate': // each iterable { }
return eol(
parens('ensureList' + parens(compileExpr(stmt.iterable))) +
'.slice().forEach(function(v,i,a){pushEnv({value:a[i],index:i});' +
compileStatements(stmt.body) +
'popEnv();})'
);
case 'loop':
return eol('while' + parens(compileExpr(stmt.condition) + '===true') + curly_br(compileStatements(stmt.body)));
return val;
case 'draw':
return eol('drawFunc(function(){' +
compileStatements(stmt.body) +
'})');
case 'run': // run $some_block
return eol(parens(compileExpr(stmt.body)) + '.apply(null,[])');
case 'native': // native "setTimeout(function(){alert('yo!');}, 50);"
return eol(stmt.body);
}
};
var compileStatements = function(statements) {
if (statements === undefined) return ';';
return statements.map(compileStmt).join('');
}
var compileExpr = function(expr) {
if (typeof expr === 'number' || typeof expr === 'boolean') {
return expr.toString();
}
if (typeof expr === 'string') {
return quote(expr.replace(/'/gmi, "\\'"));
}
switch(expr.tag) {
// Block
case 'block':
return "function(){" + compileStatements(expr.body) + "}";
// List
case 'list':
return square_br(expr.values.map(function(v){ return compileExpr(v); }).join(','));
case 'list_access':
return expr.index_accessors.reduce(function(v, index){ return v + square_br(compileExpr(index)); }, compileExpr(expr.list));
case 'list_slice':
return func('slice', [compileExpr(expr.list), expr.start === null ? '0' : compileExpr(expr.start), expr.end === null ? '0' : compileExpr(expr.end)]);
case 'nothing':
return "undefined";
// Unary operations
case 'not':
return parens("!" + compileExpr(expr.expr));
// Boolean operations
case 'and':
return parens(compileExpr(expr.left) + "&&" +
compileExpr(expr.right));
case 'or':
return parens(compileExpr(expr.left) + "||" +
compileExpr(expr.right));
// intersection operation
case '|':
return func('intersection', [compileExpr(expr.left), compileExpr(expr.right)]);
// wrap operation
case '##':
return func('wrap', [compileExpr(expr.left), compileExpr(expr.right)]);
// clamp operation
case '#':
return func('clamp', [compileExpr(expr.left), compileExpr(expr.right)]);
// concat operation
case ':':
return func('concat', [compileExpr(expr.left), compileExpr(expr.right)]);
case '..':
return func('range', [expr.start === null ? "undefined" : compileExpr(expr.start), compileExpr(expr.end)]);
case '...':
return func('slice', [func('range', [expr.start === null ? "undefined" : compileExpr(expr.start), compileExpr(expr.end)]), 0, -1]);
case '<':
case '<=':
case '>':
case '>=':
return parens(compileExpr(expr.left) + expr.tag +
compileExpr(expr.right));
case '+':
return func('additionOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '-':
return func('subtractionOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '*':
return func('multiplicationOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '/':
return func('divisionOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '^':
return func('powOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '%':
return func('moduloOp', [compileExpr(expr.left), compileExpr(expr.right)]);
case '==':
return func('deepEqual', [compileExpr(expr.left), compileExpr(expr.right)]);
case '!=':
return func('!deepEqual', [compileExpr(expr.left), compileExpr(expr.right)]);
// Built-in Function Call
case 'call':
return'(lookup(functions,' + quote(expr.name) + ').apply(null,[' +
expr.args.map(function(arg){ return compileExpr(arg) }).join(",")
+ ']))';
// Variable lookup
case 'var':
if(expr.scope === "system") {
return parens('copy(lookup(system,' + quote(expr.identifier) + '))');
} else if(expr.scope === "user") {
return parens('copy(user[' + quote(expr.identifier) + '])');
} else if(expr.scope === "asset") {
return parens('copy(asset[' + quote(expr.identifier) + '])');
} else {
throw "Unknown scope " + expr.scope;
}
}
}
var compile = function(code, verbose) {
verbose = verbose;
if(verbose === true) console.log(code);
var out = "(function(){" + eol('var __r') + compileStatements(parse(code)) + eol('return __r') + "})()";
verbose = false;
return out;
}
module.exports.compile = compile;
},{"./parser.js":4}],4:[function(require,module,exports){
// auto-generated using `compile_grammar.rb` at 14/11/2015 11:25
var parser = (function() {
/*
* Generated by PEG.js 0.8.0.
*
* http://pegjs.majda.cz/
*/
function peg$subclass(child, parent) {
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function SyntaxError(message, expected, found, offset, line, column) {
this.message = message;
this.expected = expected;
this.found = found;
this.offset = offset;
this.line = line;
this.column = column;
this.name = "SyntaxError";
}
peg$subclass(SyntaxError, Error);
function parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
peg$FAILED = {},
peg$startRuleFunctions = { start: peg$parsestart },
peg$startRuleFunction = peg$parsestart,
peg$c0 = "",
peg$c1 = function() { return undefined; },
peg$c2 = /^[ \t]/,
peg$c3 = { type: "class", value: "[ \\t]", description: "[ \\t]" },
peg$c4 = [],
peg$c5 = /^[\n\r]/,
peg$c6 = { type: "class", value: "[\\n\\r]", description: "[\\n\\r]" },
peg$c7 = peg$FAILED,
peg$c8 = null,
peg$c9 = ";",
peg$c10 = { type: "literal", value: ";", description: "\";\"" },
peg$c11 = function(first, rest) { return [first].concat(rest); },
peg$c12 = function() { return []; },
peg$c13 = function(statement) { return statement; },
peg$c14 = function(expression) { return { tag:"expression", body:expression}; },
peg$c15 = "=",
peg$c16 = { type: "literal", value: "=", description: "\"=\"" },
peg$c17 = "+=",
peg$c18 = { type: "literal", value: "+=", description: "\"+=\"" },
peg$c19 = "-=",
peg$c20 = { type: "literal", value: "-=", description: "\"-=\"" },
peg$c21 = "*=",
peg$c22 = { type: "literal", value: "*=", description: "\"*=\"" },
peg$c23 = "/=",
peg$c24 = { type: "literal", value: "/=", description: "\"/=\"" },
peg$c25 = "%=",
peg$c26 = { type: "literal", value: "%=", description: "\"%=\"" },
peg$c27 = "^=",
peg$c28 = { type: "literal", value: "^=", description: "\"^=\"" },
peg$c29 = "##=",
peg$c30 = { type: "literal", value: "##=", description: "\"##=\"" },
peg$c31 = "#=",
peg$c32 = { type: "literal", value: "#=", description: "\"#=\"" },
peg$c33 = "|=",
peg$c34 = { type: "literal", value: "|=", description: "\"|=\"" },
peg$c35 = ":=",
peg$c36 = { type: "literal", value: ":=", description: "\":=\"" },
peg$c37 = function(v, operator, expr) { return { tag:"assignment", name:v, operator:operator, body:expr }; },
peg$c38 = "[",
peg$c39 = { type: "literal", value: "[", description: "\"[\"" },
peg$c40 = "]",
peg$c41 = { type: "literal", value: "]", description: "\"]\"" },
peg$c42 = function(expr) { return expr; },
peg$c43 = function(v, index_accessors, expr) { return { tag:"list_index_assignment", name:v, index_accessors:index_accessors, body:expr }; },
peg$c44 = "run",
peg$c45 = { type: "literal", value: "run", description: "\"run\"" },
peg$c46 = function(expr) { return { tag:"run", body:expr }; },
peg$c47 = "native",
peg$c48 = { type: "literal", value: "native", description: "\"native\"" },
peg$c49 = function(expr) { return { tag:"native", body:expr }; },
peg$c50 = "if",
peg$c51 = { type: "literal", value: "if", description: "\"if\"" },
peg$c52 = "{",
peg$c53 = { type: "literal", value: "{", description: "\"{\"" },
peg$c54 = "}",
peg$c55 = { type: "literal", value: "}", description: "\"}\"" },
peg$c56 = "else",
peg$c57 = { type: "literal", value: "else", description: "\"else\"" },
peg$c58 = function(condition_expr, statements, else_conditional) { return {tag:"conditional", condition:condition_expr, body:statements, else_body:[else_conditional]}; },
peg$c59 = function(condition_expr, statements, else_statements) { return {tag:"conditional", condition:condition_expr, body:statements, else_body:else_statements}; },
peg$c60 = function(condition_expr, statements) { return {tag:"conditional", condition:condition_expr, body:statements, else_body:undefined}; },
peg$c61 = "each",
peg$c62 = { type: "literal", value: "each", description: "\"each\"" },
peg$c63 = function(iterable, statements) { return {tag:"iterate", iterable:iterable, body:statements}; },
peg$c64 = "while",
peg$c65 = { type: "literal", value: "while", description: "\"while\"" },
peg$c66 = function(condition_expr, statements) { return {tag:"loop", condition:condition_expr, body:statements}; },
peg$c67 = "draw",
peg$c68 = { type: "literal", value: "draw", description: "\"draw\"" },
peg$c69 = function(statements) { return {tag:"draw", body:statements}; },
peg$c70 = "and",
peg$c71 = { type: "literal", value: "and", description: "\"and\"" },
peg$c72 = "or",
peg$c73 = { type: "literal", value: "or", description: "\"or\"" },
peg$c74 = function(left, op, right) { return {tag: op, left:left, right:right}; },
peg$c75 = "<=",
peg$c76 = { type: "literal", value: "<=", description: "\"<=\"" },
peg$c77 = ">=",
peg$c78 = { type: "literal", value: ">=", description: "\">=\"" },
peg$c79 = "!=",
peg$c80 = { type: "literal", value: "!=", description: "\"!=\"" },
peg$c81 = "==",
peg$c82 = { type: "literal", value: "==", description: "\"==\"" },
peg$c83 = "<",
peg$c84 = { type: "literal", value: "<", description: "\"<\"" },
peg$c85 = ">",
peg$c86 = { type: "literal", value: ">", description: "\">\"" },
peg$c87 = "|",
peg$c88 = { type: "literal", value: "|", description: "\"|\"" },
peg$c89 = "##",
peg$c90 = { type: "literal", value: "##", description: "\"##\"" },
peg$c91 = "#",
peg$c92 = { type: "literal", value: "#", description: "\"#\"" },
peg$c93 = ":",
peg$c94 = { type: "literal", value: ":", description: "\":\"" },
peg$c95 = "+",
peg$c96 = { type: "literal", value: "+", description: "\"+\"" },
peg$c97 = function(left, op, right) { return {tag:op, left:left, right:right}; },
peg$c98 = "-",
peg$c99 = { type: "literal", value: "-", description: "\"-\"" },
peg$c100 = "*",
peg$c101 = { type: "literal", value: "*", description: "\"*\"" },
peg$c102 = "/",
peg$c103 = { type: "literal", value: "/", description: "\"/\"" },
peg$c104 = "%",
peg$c105 = { type: "literal", value: "%", description: "\"%\"" },
peg$c106 = "^",
peg$c107 = { type: "literal", value: "^", description: "\"^\"" },
peg$c108 = "!",
peg$c109 = { type: "literal", value: "!", description: "\"!\"" },
peg$c110 = function(expr) { return {tag:"not", expr:expr}; },
peg$c111 = ",",
peg$c112 = { type: "literal", value: ",", description: "\",\"" },
peg$c113 = function(list, start, end) { return {tag:"list_slice", list:list, start:start, end:end}; },
peg$c114 = function(list, index_accessors) { return {tag:"list_access", list:list, index_accessors:index_accessors}; },
peg$c115 = "(",
peg$c116 = { type: "literal", value: "(", description: "\"(\"" },
peg$c117 = ")",
peg$c118 = { type: "literal", value: ")", description: "\")\"" },
peg$c119 = /^[a-z_]/,
peg$c120 = { type: "class", value: "[a-z_]", description: "[a-z_]" },
peg$c121 = function(chars) { return chars.join(''); },
peg$c122 = function(v) { return {tag:"call", name:v, args:[]}; },
peg$c123 = function(v, args) { return {tag:"call", name:v, args:args}; },
peg$c124 = /^[0-9a-z_]/,
peg$c125 = { type: "class", value: "[0-9a-z_]", description: "[0-9a-z_]" },
peg$c126 = function(first, rest) { return [first].concat(rest).join(''); },
peg$c127 = "$",
peg$c128 = { type: "literal", value: "$", description: "\"$\"" },
peg$c129 = function() { return "user" },
peg$c130 = function(scope, variable_identifier) { return {tag:"var", scope:scope, identifier:variable_identifier}},
peg$c131 = "&",
peg$c132 = { type: "literal", value: "&", description: "\"&\"" },
peg$c133 = function() { return "system" },
peg$c134 = "@",
peg$c135 = { type: "literal", value: "@", description: "\"@\"" },
peg$c136 = function() { return "asset" },
peg$c137 = "true",
peg$c138 = { type: "literal", value: "true", description: "\"true\"" },
peg$c139 = function() { return true; },
peg$c140 = "false",
peg$c141 = { type: "literal", value: "false", description: "\"false\"" },
peg$c142 = function() { return false; },
peg$c143 = "nothing",
peg$c144 = { type: "literal", value: "nothing", description: "\"nothing\"" },
peg$c145 = function() { return {tag:"nothing"}; },
peg$c146 = function() { return parseFloat(text()); },
peg$c147 = /^[0-9]/,
peg$c148 = { type: "class", value: "[0-9]", description: "[0-9]" },
peg$c149 = /^[0-9a-f]/i,
peg$c150 = { type: "class", value: "[0-9a-f]i", description: "[0-9a-f]i" },
peg$c151 = ".",
peg$c152 = { type: "literal", value: ".", description: "\".\"" },
peg$c153 = /^[1-9]/,
peg$c154 = { type: "class", value: "[1-9]", description: "[1-9]" },
peg$c155 = /^[eE]/,
peg$c156 = { type: "class", value: "[eE]", description: "[eE]" },
peg$c157 = "0",
peg$c158 = { type: "literal", value: "0", description: "\"0\"" },
peg$c159 = function(chars) { return chars.join(""); },
peg$c160 = "\"",
peg$c161 = { type: "literal", value: "\"", description: "\"\\\"\"" },
peg$c162 = "\\",
peg$c163 = { type: "literal", value: "\\", description: "\"\\\\\"" },
peg$c164 = "b",
peg$c165 = { type: "literal", value: "b", description: "\"b\"" },
peg$c166 = function() { return "\b"; },
peg$c167 = "f",
peg$c168 = { type: "literal", value: "f", description: "\"f\"" },
peg$c169 = function() { return "\f"; },
peg$c170 = "n",
peg$c171 = { type: "literal", value: "n", description: "\"n\"" },
peg$c172 = function() { return "\n"; },
peg$c173 = "r",
peg$c174 = { type: "literal", value: "r", description: "\"r\"" },
peg$c175 = function() { return "\r"; },
peg$c176 = "t",
peg$c177 = { type: "literal", value: "t", description: "\"t\"" },
peg$c178 = function() { return "\t"; },
peg$c179 = "u",
peg$c180 = { type: "literal", value: "u", description: "\"u\"" },
peg$c181 = function(digits) {
return String.fromCharCode(parseInt(digits, 16));
},
peg$c182 = function(sequence) { return sequence; },
peg$c183 = /^[ -!#-[\]-\u10FFFF]/,
peg$c184 = { type: "class", value: "[ -!#-[\\]-\\u10FFFF]", description: "[ -!#-[\\]-\\u10FFFF]" },
peg$c185 = function(v) { return v; },
peg$c186 = function(values) { return {tag:"list", values:(values !== null ? values : [])}; },
peg$c187 = function(statements) { return {tag:"block", body:statements}; },
peg$currPos = 0,
peg$reportedPos = 0,
peg$cachedPos = 0,
peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$cache = {},
peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$reportedPos, peg$currPos);
}
function offset() {
return peg$reportedPos;
}
function line() {
return peg$computePosDetails(peg$reportedPos).line;
}
function column() {
return peg$computePosDetails(peg$reportedPos).column;
}
function expected(description) {
throw peg$buildException(
null,
[{ type: "other", description: description }],
peg$reportedPos
);
}
function error(message) {
throw peg$buildException(message, null, peg$reportedPos);
}
function peg$computePosDetails(pos) {
function advance(details, startPos, endPos) {
var p, ch;
for (p = startPos; p < endPos; p++) {
ch = input.charAt(p);
if (ch === "\n") {
if (!details.seenCR) { details.line++; }
details.column = 1;
details.seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
details.line++;
details.column = 1;
details.seenCR = true;
} else {
details.column++;
details.seenCR = false;
}
}
}
if (peg$cachedPos !== pos) {
if (peg$cachedPos > pos) {
peg$cachedPos = 0;
peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
}
advance(peg$cachedPosDetails, peg$cachedPos, pos);
peg$cachedPos = pos;
}
return peg$cachedPosDetails;
}
function peg$fail(expected) {
if (peg$currPos < peg$maxFailPos) { return; }
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected);
}
function peg$buildException(message, expected, pos) {
function cleanupExpected(expected) {
var i = 1;
expected.sort(function(a, b) {
if (a.description < b.description) {
return -1;
} else if (a.description > b.description) {
return 1;
} else {
return 0;
}
});
while (i < expected.length) {
if (expected[i - 1] === expected[i]) {
expected.splice(i, 1);
} else {
i++;
}
}
}
function buildMessage(expected, found) {
function stringEscape(s) {
function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
return s
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
.replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
.replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
.replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
}
var expectedDescs = new Array(expected.length),
expectedDesc, foundDesc, i;
for (i = 0; i < expected.length; i++) {
expectedDescs[i] = expected[i].description;
}
expectedDesc = expected.length > 1
? expectedDescs.slice(0, -1).join(", ")
+ " or "
+ expectedDescs[expected.length - 1]
: expectedDescs[0];
foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
return "Expected " + expectedDesc + " but " + foundDesc + " found.";
}
var posDetails = peg$computePosDetails(pos),
found = pos < input.length ? input.charAt(pos) : null;
if (expected !== null) {
cleanupExpected(expected);
}
return new SyntaxError(
message !== null ? message : buildMessage(expected, found),
expected,
found,
pos,
posDetails.line,
posDetails.column
);
}
function peg$parsestart() {
var s0, s1;
var key = peg$currPos * 86 + 0,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parsestatements();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$c0;
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c1();
}
s0 = s1;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsewhitespace_character() {
var s0;
var key = peg$currPos * 86 + 1,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c2.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c3); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsews() {
var s0, s1;
var key = peg$currPos * 86 + 2,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = [];
s1 = peg$parsewhitespace_character();
while (s1 !== peg$FAILED) {
s0.push(s1);
s1 = peg$parsewhitespace_character();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenewline_character() {
var s0;
var key = peg$currPos * 86 + 3,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c5.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenewline_ws() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 4,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsews();
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_character();
if (s2 !== peg$FAILED) {
s3 = peg$parsenewline_ws();
if (s3 === peg$FAILED) {
s3 = peg$c8;
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsews();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseexplicit_statement_delimiter() {
var s0;
var key = peg$currPos * 86 + 5,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 59) {
s0 = peg$c9;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsestatement_end() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 86 + 6,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsews();
if (s1 !== peg$FAILED) {
s2 = peg$parseexplicit_statement_delimiter();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsestatement_end();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsestatement_end();
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsews();
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_character();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsestatement_end();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsestatement_end();
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsedelimiter_ws() {
var s0;
var key = peg$currPos * 86 + 7,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parsestatement_end();
if (s0 === peg$FAILED) {
s0 = peg$parsews();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsestatements() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 86 + 8,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsedelimiter_ws();
if (s1 !== peg$FAILED) {
s2 = peg$parsestatement();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsenext_statement();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsenext_statement();
}
if (s3 !== peg$FAILED) {
s4 = peg$parsedelimiter_ws();
if (s4 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c11(s2, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsedelimiter_ws();
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c12();
}
s0 = s1;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenext_statement() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 9,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsestatement_end();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsestatement();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c13(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsestatement() {
var s0, s1;
var key = peg$currPos * 86 + 10,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parseassignment();
if (s0 === peg$FAILED) {
s0 = peg$parseindex_assignment();
if (s0 === peg$FAILED) {
s0 = peg$parserun();
if (s0 === peg$FAILED) {
s0 = peg$parsenative();
if (s0 === peg$FAILED) {
s0 = peg$parseconditional();
if (s0 === peg$FAILED) {
s0 = peg$parseiterate();
if (s0 === peg$FAILED) {
s0 = peg$parseloop();
if (s0 === peg$FAILED) {
s0 = peg$parsedraw();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseexpression();
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c14(s1);
}
s0 = s1;
}
}
}
}
}
}
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseassignment_operator() {
var s0;
var key = peg$currPos * 86 + 11,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 61) {
s0 = peg$c15;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c17) {
s0 = peg$c17;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c18); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c19) {
s0 = peg$c19;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c20); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c21) {
s0 = peg$c21;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c22); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c23) {
s0 = peg$c23;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c24); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c25) {
s0 = peg$c25;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c26); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c27) {
s0 = peg$c27;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c29) {
s0 = peg$c29;
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c30); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c31) {
s0 = peg$c31;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c32); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c33) {
s0 = peg$c33;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c34); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c35) {
s0 = peg$c35;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c36); }
}
}
}
}
}
}
}
}
}
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseassignment() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 12,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseuser_variable();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseassignment_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseexpression();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c37(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseindex_accessors() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;
var key = peg$currPos * 86 + 13,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s1 = peg$c38;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c39); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s5 = peg$c40;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s5 !== peg$FAILED) {
s6 = [];
s7 = peg$currPos;
s8 = peg$parsews();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 91) {
s9 = peg$c38;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c39); }
}
if (s9 !== peg$FAILED) {
s10 = peg$parsews();
if (s10 !== peg$FAILED) {
s11 = peg$parseexpression();
if (s11 !== peg$FAILED) {
s12 = peg$parsews();
if (s12 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s13 = peg$c40;
peg$currPos++;
} else {
s13 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s13 !== peg$FAILED) {
peg$reportedPos = s7;
s8 = peg$c42(s11);
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$currPos;
s8 = peg$parsews();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 91) {
s9 = peg$c38;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c39); }
}
if (s9 !== peg$FAILED) {
s10 = peg$parsews();
if (s10 !== peg$FAILED) {
s11 = peg$parseexpression();
if (s11 !== peg$FAILED) {
s12 = peg$parsews();
if (s12 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s13 = peg$c40;
peg$currPos++;
} else {
s13 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s13 !== peg$FAILED) {
peg$reportedPos = s7;
s8 = peg$c42(s11);
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
} else {
peg$currPos = s7;
s7 = peg$c7;
}
}
if (s6 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c11(s3, s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseindex_assignment() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 86 + 14,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseuser_variable();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseindex_accessors();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 61) {
s5 = peg$c15;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsews();
if (s6 !== peg$FAILED) {
s7 = peg$parseexpression();
if (s7 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c43(s1, s3, s7);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parserun() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 15,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 3) === peg$c44) {
s1 = peg$c44;
peg$currPos += 3;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c45); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c46(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenative() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 16,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 6) === peg$c47) {
s1 = peg$c47;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c48); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c49(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseconditional() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;
var key = peg$currPos * 86 + 17,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 2) === peg$c50) {
s1 = peg$c50;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c51); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s5 = peg$c52;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsenewline_ws();
if (s6 !== peg$FAILED) {
s7 = peg$parsestatements();
if (s7 !== peg$FAILED) {
s8 = peg$parsenewline_ws();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c54;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s9 !== peg$FAILED) {
s10 = peg$parsenewline_ws();
if (s10 !== peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c56) {
s11 = peg$c56;
peg$currPos += 4;
} else {
s11 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c57); }
}
if (s11 !== peg$FAILED) {
s12 = peg$parsenewline_ws();
if (s12 !== peg$FAILED) {
s13 = peg$parseconditional();
if (s13 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c58(s3, s7, s13);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 2) === peg$c50) {
s1 = peg$c50;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c51); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s5 = peg$c52;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsenewline_ws();
if (s6 !== peg$FAILED) {
s7 = peg$parsestatements();
if (s7 !== peg$FAILED) {
s8 = peg$parsenewline_ws();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c54;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s9 !== peg$FAILED) {
s10 = peg$parsenewline_ws();
if (s10 !== peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c56) {
s11 = peg$c56;
peg$currPos += 4;
} else {
s11 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c57); }
}
if (s11 !== peg$FAILED) {
s12 = peg$parsenewline_ws();
if (s12 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s13 = peg$c52;
peg$currPos++;
} else {
s13 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s13 !== peg$FAILED) {
s14 = peg$parsestatements();
if (s14 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s15 = peg$c54;
peg$currPos++;
} else {
s15 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s15 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c59(s3, s7, s14);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 2) === peg$c50) {
s1 = peg$c50;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c51); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s5 = peg$c52;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsenewline_ws();
if (s6 !== peg$FAILED) {
s7 = peg$parsestatements();
if (s7 !== peg$FAILED) {
s8 = peg$parsenewline_ws();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c54;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s9 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c60(s3, s7);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseiterate() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
var key = peg$currPos * 86 + 18,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 4) === peg$c61) {
s1 = peg$c61;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c62); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s5 = peg$c52;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsedelimiter_ws();
if (s6 !== peg$FAILED) {
s7 = peg$parsestatements();
if (s7 !== peg$FAILED) {
s8 = peg$parsedelimiter_ws();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c54;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s9 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c63(s3, s7);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseloop() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
var key = peg$currPos * 86 + 19,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 5) === peg$c64) {
s1 = peg$c64;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c65); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s5 = peg$c52;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s5 !== peg$FAILED) {
s6 = peg$parsedelimiter_ws();
if (s6 !== peg$FAILED) {
s7 = peg$parsestatements();
if (s7 !== peg$FAILED) {
s8 = peg$parsedelimiter_ws();
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c54;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s9 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c66(s3, s7);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsedraw() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 86 + 20,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 4) === peg$c67) {
s1 = peg$c67;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c68); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_ws();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s3 = peg$c52;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsedelimiter_ws();
if (s4 !== peg$FAILED) {
s5 = peg$parsestatements();
if (s5 !== peg$FAILED) {
s6 = peg$parsedelimiter_ws();
if (s6 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s7 = peg$c54;
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s7 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c69(s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseexpression() {
var s0, s1;
var key = peg$currPos * 86 + 21,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseboolean_operation();
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c42(s1);
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseboolean_operator() {
var s0;
var key = peg$currPos * 86 + 22,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.substr(peg$currPos, 3) === peg$c70) {
s0 = peg$c70;
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c72) {
s0 = peg$c72;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c73); }
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseboolean_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 23,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsecomparison_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseboolean_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseboolean_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsecomparison_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsecomparison_operator() {
var s0;
var key = peg$currPos * 86 + 24,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.substr(peg$currPos, 2) === peg$c75) {
s0 = peg$c75;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c76); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c77) {
s0 = peg$c77;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c79) {
s0 = peg$c79;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c80); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c81) {
s0 = peg$c81;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c82); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 60) {
s0 = peg$c83;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c84); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 62) {
s0 = peg$c85;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c86); }
}
}
}
}
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsecomparison_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 25,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseintersection_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsecomparison_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parsecomparison_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseintersection_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseintersection_operator() {
var s0;
var key = peg$currPos * 86 + 26,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 124) {
s0 = peg$c87;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c88); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseintersection_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 27,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsewrap_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseintersection_operation();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseintersection_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsewrap_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsewrap_operator() {
var s0;
var key = peg$currPos * 86 + 28,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.substr(peg$currPos, 2) === peg$c89) {
s0 = peg$c89;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c90); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsewrap_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 29,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseclamp_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsewrap_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parsewrap_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseclamp_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseclamp_operator() {
var s0;
var key = peg$currPos * 86 + 30,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 35) {
s0 = peg$c91;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c92); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseclamp_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 31,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseconcat_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseclamp_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseclamp_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseconcat_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseconcat_operator() {
var s0;
var key = peg$currPos * 86 + 32,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 58) {
s0 = peg$c93;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c94); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseconcat_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 33,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseadditive_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseconcat_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseconcat_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c74(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseadditive_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseadditive_operator() {
var s0;
var key = peg$currPos * 86 + 34,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 43) {
s0 = peg$c95;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c96); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseadditive_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 35,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsesubtractive_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseadditive_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseadditive_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c97(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsesubtractive_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesubtractive_operator() {
var s0;
var key = peg$currPos * 86 + 36,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 45) {
s0 = peg$c98;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c99); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesubtractive_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 37,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsemultiplicative_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsesubtractive_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parsesubtractive_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c97(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsemultiplicative_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemultiplicative_operator() {
var s0;
var key = peg$currPos * 86 + 38,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 42) {
s0 = peg$c100;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c101); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemultiplicative_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 39,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsequotient_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsemultiplicative_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parsemultiplicative_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c97(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parsequotient_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsequotient_operator() {
var s0;
var key = peg$currPos * 86 + 40,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 47) {
s0 = peg$c102;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c103); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 37) {
s0 = peg$c104;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c105); }
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsequotient_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 41,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseexponential_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parsequotient_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parsequotient_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c97(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseexponential_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseexponential_operator() {
var s0;
var key = peg$currPos * 86 + 42,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 94) {
s0 = peg$c106;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c107); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseexponential_operation() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 43,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseunary_operation();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexponential_operator();
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
if (s4 !== peg$FAILED) {
s5 = peg$parseexponential_operation();
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c97(s1, s3, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseunary_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseunary_operator() {
var s0;
var key = peg$currPos * 86 + 44,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 33) {
s0 = peg$c108;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c109); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseunary_operation() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 45,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseunary_operator();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c110(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parselist_operation();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parselist_slice() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
var key = peg$currPos * 86 + 46,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsegrouped_expression();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 91) {
s3 = peg$c38;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c39); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
s5 = peg$parseexpression();
if (s5 === peg$FAILED) {
s5 = peg$c8;
}
if (s5 !== peg$FAILED) {
s6 = peg$parsenewline_ws();
if (s6 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s7 = peg$c111;
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s7 !== peg$FAILED) {
s8 = peg$parsenewline_ws();
if (s8 !== peg$FAILED) {
s9 = peg$parseexpression();
if (s9 === peg$FAILED) {
s9 = peg$c8;
}
if (s9 !== peg$FAILED) {
s10 = peg$parsenewline_ws();
if (s10 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s11 = peg$c40;
peg$currPos++;
} else {
s11 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s11 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c113(s1, s5, s9);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parselist_access() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 47,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsegrouped_expression();
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (s2 !== peg$FAILED) {
s3 = peg$parseindex_accessors();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c114(s1, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parselist_operation() {
var s0;
var key = peg$currPos * 86 + 48,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parselist_slice();
if (s0 === peg$FAILED) {
s0 = peg$parselist_access();
if (s0 === peg$FAILED) {
s0 = peg$parsegrouped_expression();
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsegrouped_expression() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 49,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 40) {
s1 = peg$c115;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c116); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_ws();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpression();
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 41) {
s5 = peg$c117;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c118); }
}
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c42(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$parseprimary();
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseprimary() {
var s0;
var key = peg$currPos * 86 + 50,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parseprimitive();
if (s0 === peg$FAILED) {
s0 = peg$parseany_variable();
if (s0 === peg$FAILED) {
s0 = peg$parsefunction_call();
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsearglist() {
var s0, s1, s2, s3, s4, s5, s6;
var key = peg$currPos * 86 + 51,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseexpression();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s4 = peg$c111;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s4 !== peg$FAILED) {
s5 = peg$parsenewline_ws();
if (s5 !== peg$FAILED) {
s6 = peg$parseexpression();
if (s6 !== peg$FAILED) {
peg$reportedPos = s3;
s4 = peg$c42(s6);
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$c7;
}
} else {
peg$currPos = s3;
s3 = peg$c7;
}
} else {
peg$currPos = s3;
s3 = peg$c7;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s4 = peg$c111;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s4 !== peg$FAILED) {
s5 = peg$parsenewline_ws();
if (s5 !== peg$FAILED) {
s6 = peg$parseexpression();
if (s6 !== peg$FAILED) {
peg$reportedPos = s3;
s4 = peg$c42(s6);
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$c7;
}
} else {
peg$currPos = s3;
s3 = peg$c7;
}
} else {
peg$currPos = s3;
s3 = peg$c7;
}
}
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c11(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsefunction_identifier() {
var s0, s1, s2;
var key = peg$currPos * 86 + 52,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = [];
if (peg$c119.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c120); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c119.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c120); }
}
}
} else {
s1 = peg$c7;
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c121(s1);
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsefunction_call() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 86 + 53,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsefunction_identifier();
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_ws();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 40) {
s3 = peg$c115;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c116); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 41) {
s5 = peg$c117;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c118); }
}
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c122(s1);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsefunction_identifier();
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_ws();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 40) {
s3 = peg$c115;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c116); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
s5 = peg$parsearglist();
if (s5 !== peg$FAILED) {
s6 = peg$parsenewline_ws();
if (s6 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 41) {
s7 = peg$c117;
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c118); }
}
if (s7 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c123(s1, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsevalid_variable_first_char() {
var s0;
var key = peg$currPos * 86 + 54,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c119.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c120); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsevalid_variable_char() {
var s0;
var key = peg$currPos * 86 + 55,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c124.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c125); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsevariable_identifier() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 56,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsevalid_variable_first_char();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsevalid_variable_char();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsevalid_variable_char();
}
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c126(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseany_variable() {
var s0;
var key = peg$currPos * 86 + 57,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parseuser_variable();
if (s0 === peg$FAILED) {
s0 = peg$parsesystem_variable();
if (s0 === peg$FAILED) {
s0 = peg$parseasset_variable();
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseuser_variable_identifier() {
var s0, s1;
var key = peg$currPos * 86 + 58,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 36) {
s1 = peg$c127;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c128); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c129();
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseuser_variable() {
var s0, s1, s2;
var key = peg$currPos * 86 + 59,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseuser_variable_identifier();
if (s1 !== peg$FAILED) {
s2 = peg$parsevariable_identifier();
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c130(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesystem_variable_identifier() {
var s0, s1;
var key = peg$currPos * 86 + 60,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 38) {
s1 = peg$c131;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c132); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c133();
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesystem_variable() {
var s0, s1, s2;
var key = peg$currPos * 86 + 61,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsesystem_variable_identifier();
if (s1 !== peg$FAILED) {
s2 = peg$parsevariable_identifier();
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c130(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseasset_variable_identifier() {
var s0, s1;
var key = peg$currPos * 86 + 62,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 64) {
s1 = peg$c134;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c135); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c136();
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseasset_variable() {
var s0, s1, s2;
var key = peg$currPos * 86 + 63,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseasset_variable_identifier();
if (s1 !== peg$FAILED) {
s2 = peg$parsevariable_identifier();
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c130(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseprimitive() {
var s0;
var key = peg$currPos * 86 + 64,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parseboolean();
if (s0 === peg$FAILED) {
s0 = peg$parsenothing();
if (s0 === peg$FAILED) {
s0 = peg$parsenumber();
if (s0 === peg$FAILED) {
s0 = peg$parsestring();
if (s0 === peg$FAILED) {
s0 = peg$parselist();
if (s0 === peg$FAILED) {
s0 = peg$parseblock();
}
}
}
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseboolean() {
var s0, s1;
var key = peg$currPos * 86 + 65,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 4) === peg$c137) {
s1 = peg$c137;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c138); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c139();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 5) === peg$c140) {
s1 = peg$c140;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c141); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c142();
}
s0 = s1;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenothing() {
var s0, s1;
var key = peg$currPos * 86 + 66,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 7) === peg$c143) {
s1 = peg$c143;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c144); }
}
if (s1 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c145();
}
s0 = s1;
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenumber() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 86 + 67,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseminus();
if (s1 === peg$FAILED) {
s1 = peg$c8;
}
if (s1 !== peg$FAILED) {
s2 = peg$parseint();
if (s2 !== peg$FAILED) {
s3 = peg$parsefrac();
if (s3 === peg$FAILED) {
s3 = peg$c8;
}
if (s3 !== peg$FAILED) {
s4 = peg$parseexp();
if (s4 === peg$FAILED) {
s4 = peg$c8;
}
if (s4 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c146();
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsedigit() {
var s0;
var key = peg$currPos * 86 + 68,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c147.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c148); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsehexdigit() {
var s0;
var key = peg$currPos * 86 + 69,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c149.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c150); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsedecimal_point() {
var s0;
var key = peg$currPos * 86 + 70,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 46) {
s0 = peg$c151;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c152); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsedigit1_9() {
var s0;
var key = peg$currPos * 86 + 71,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c153.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c154); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsee() {
var s0;
var key = peg$currPos * 86 + 72,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c155.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c156); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseexp() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 86 + 73,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsee();
if (s1 !== peg$FAILED) {
s2 = peg$parseminus();
if (s2 === peg$FAILED) {
s2 = peg$parseplus();
}
if (s2 === peg$FAILED) {
s2 = peg$c8;
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsedigit();
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsedigit();
}
} else {
s3 = peg$c7;
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsefrac() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 74,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsedecimal_point();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsedigit();
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsedigit();
}
} else {
s2 = peg$c7;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseint() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 75,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parsezero();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsedigit1_9();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsedigit();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsedigit();
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseminus() {
var s0;
var key = peg$currPos * 86 + 76,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 45) {
s0 = peg$c98;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c99); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseplus() {
var s0;
var key = peg$currPos * 86 + 77,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 43) {
s0 = peg$c95;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c96); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsezero() {
var s0;
var key = peg$currPos * 86 + 78,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 48) {
s0 = peg$c157;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c158); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsestring() {
var s0, s1, s2, s3;
var key = peg$currPos * 86 + 79,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsequotation_mark();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsechar();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsechar();
}
if (s2 !== peg$FAILED) {
s3 = peg$parsequotation_mark();
if (s3 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c159(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsechar() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
var key = peg$currPos * 86 + 80,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$parseunescaped();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s2 = peg$c160;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
if (s2 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 92) {
s2 = peg$c162;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c163); }
}
if (s2 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 47) {
s2 = peg$c102;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c103); }
}
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 98) {
s3 = peg$c164;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c165); }
}
if (s3 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c166();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 102) {
s3 = peg$c167;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c168); }
}
if (s3 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c169();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 110) {
s3 = peg$c170;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c171); }
}
if (s3 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c172();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 114) {
s3 = peg$c173;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c174); }
}
if (s3 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c175();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 116) {
s3 = peg$c176;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c177); }
}
if (s3 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c178();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 117) {
s3 = peg$c179;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c180); }
}
if (s3 !== peg$FAILED) {
s4 = peg$currPos;
s5 = peg$currPos;
s6 = peg$parsehexdigit();
if (s6 !== peg$FAILED) {
s7 = peg$parsehexdigit();
if (s7 !== peg$FAILED) {
s8 = peg$parsehexdigit();
if (s8 !== peg$FAILED) {
s9 = peg$parsehexdigit();
if (s9 !== peg$FAILED) {
s6 = [s6, s7, s8, s9];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$c7;
}
} else {
peg$currPos = s5;
s5 = peg$c7;
}
} else {
peg$currPos = s5;
s5 = peg$c7;
}
} else {
peg$currPos = s5;
s5 = peg$c7;
}
if (s5 !== peg$FAILED) {
s5 = input.substring(s4, peg$currPos);
}
s4 = s5;
if (s4 !== peg$FAILED) {
peg$reportedPos = s2;
s3 = peg$c181(s4);
s2 = s3;
} else {
peg$currPos = s2;
s2 = peg$c7;
}
} else {
peg$currPos = s2;
s2 = peg$c7;
}
}
}
}
}
}
}
}
}
if (s2 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c182(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseescape() {
var s0;
var key = peg$currPos * 86 + 81,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 92) {
s0 = peg$c162;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c163); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsequotation_mark() {
var s0;
var key = peg$currPos * 86 + 82,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 34) {
s0 = peg$c160;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseunescaped() {
var s0;
var key = peg$currPos * 86 + 83,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (peg$c183.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c184); }
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parselist() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
var key = peg$currPos * 86 + 84,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s1 = peg$c38;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c39); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenewline_ws();
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
s4 = peg$parseexpression();
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$currPos;
s7 = peg$parsenewline_ws();
if (s7 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s8 = peg$c111;
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s8 !== peg$FAILED) {
s9 = peg$parsenewline_ws();
if (s9 !== peg$FAILED) {
s10 = peg$parseexpression();
if (s10 !== peg$FAILED) {
peg$reportedPos = s6;
s7 = peg$c185(s10);
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$currPos;
s7 = peg$parsenewline_ws();
if (s7 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s8 = peg$c111;
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s8 !== peg$FAILED) {
s9 = peg$parsenewline_ws();
if (s9 !== peg$FAILED) {
s10 = peg$parseexpression();
if (s10 !== peg$FAILED) {
peg$reportedPos = s6;
s7 = peg$c185(s10);
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
} else {
peg$currPos = s6;
s6 = peg$c7;
}
}
if (s5 !== peg$FAILED) {
peg$reportedPos = s3;
s4 = peg$c11(s4, s5);
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$c7;
}
} else {
peg$currPos = s3;
s3 = peg$c7;
}
if (s3 === peg$FAILED) {
s3 = peg$c8;
}
if (s3 !== peg$FAILED) {
s4 = peg$parsenewline_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s5 = peg$c40;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c186(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseblock() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 86 + 85,
cached = peg$cache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c52;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsedelimiter_ws();
if (s2 !== peg$FAILED) {
s3 = peg$parsestatements();
if (s3 !== peg$FAILED) {
s4 = peg$parsedelimiter_ws();
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s5 = peg$c54;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s5 !== peg$FAILED) {
peg$reportedPos = s0;
s1 = peg$c187(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
} else {
peg$currPos = s0;
s0 = peg$c7;
}
peg$cache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail({ type: "end", description: "end of input" });
}
throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
}
}
return {
SyntaxError: SyntaxError,
parse: parse
};
})();
function parse(code) {
try {
return parser.parse(code);}
catch (e) { throw 'Syntax Error: Line ' + e.line + ', Column ' + e.column + ', expected: ' + JSON.stringify(e.expected) + ', got: '+ e.found + '.'; }}
if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { module.exports.parse = parse; } }
},{}],5:[function(require,module,exports){
var compile = require('./compiler.js').compile;
var shared = require('./shared.js');
function copy(v) {
if (v instanceof Array) {
return v.slice();
} else {
return v;
}
}
function ensureList(v) {
return v instanceof Array ? v : [v];
}
function _wrap_clamp_internal(name, func, v, bounds){
/*
x # [low,high]
[x,y] # [low,high]
[x,y] # [[lowX, highX],[lowY,highY]]
[x,y,r] # [low,high]
[x,y,r] # [[lowX, highX],[lowY,highY],[lowR,highR]]
[x,y,r] # [[lowX, highX],[lowY,highY]]
[x,y,w,h] # [low,high]
[x,y,w,h] # [[lowX, highX],[lowY,highY],[lowW,highW],[lowH,highH]]
[[x1,y1], [x2,y2]] # [low, high]
[[x1,y1], [x2,y2]] # [[[lowX1, highX1],[lowY,highY1]],[[lowX2,highX2],[lowY2,highY2]]]
[[x1,y1,w1,h1], [x2,y2]] # [[[lowX1, highX1],[lowY,highY1],[lowW, highW], [lowH, highH]],[[lowX2,highX2],[lowY2,highY2]]]
[[x1,y1,w1,h1], [x2,y2]] # [[low1,high1],[low2,high2]]
*/
if(!(v instanceof Array)) {
if(typeof v !== 'number') {
throw name + " only implemented for numeric values";
}
if (bounds instanceof Array && bounds.length === 2 && bounds.reduce(function(ok,g){return ok && (typeof g === 'number')},true)) {
// TODO: Sanitize bounds: 0 should be lower than 1, if both equal return the value of the equal bounds
return func(v, bounds);
} else {
throw name + "'s bounds should be a list containing two numbers, a low value and a high value";
}
}
if(bounds.length === 2 && typeof bounds[0] === 'number') {
return v.map(function(g){return clamp(g,bounds);});
} else if (bounds.length === v.length) {
return v.map(function(g,i){return clamp(g,bounds[i]);});
} else {
throw name + "'s bounds structure mismatch";
}
}
function clamp(v, bounds){
return _wrap_clamp_internal(
"clamp",
function(v, bounds){
return Math.max(bounds[0], Math.min(bounds[1], v));
}, v, bounds);
}
function wrap(v, bounds){
return _wrap_clamp_internal(
"wrap",
function(v, bounds){
var vPrime = v;
var boundsDelta = (bounds[1] - bounds[0]);
while (vPrime < bounds[0]) {
vPrime += boundsDelta;
}
if (vPrime >= bounds[1]) {
return vPrime - boundsDelta;
}
return vPrime;
}, v, bounds);
}
function intersection(a, b){
// This will be a very general purpose intersection function
/*
Point: [x,y]
Line: [[x1,y1], [x2,y2]]
Circle: [x, y, r]
Rect: [x, y, w, h]
Convex Polygon (Triangle, Trapezoid, Pentagon, etc.): [[x1, y1], [x2, y2], [xN, yN]...]
*/
// todo: finish
throw 'not implemented';
}
function slice(list, _start, _end){
var start = _start
if(start < 0) {
start = list.length + start;
}
var end = _end
if(end <= 0) {
end = list.length + end;
}
return list.slice(start,end);
}
function range(a,b) {
return shared.range(a,b);
}
function concat(a, b) {
return ensureList(a).concat(ensureList(b));
}
function baseOp(a,b,f,opName) {
var aA = a instanceof Array;
var bA = b instanceof Array;
if(aA || bA){
// Add scalar
if ((aA && !bA) || (bA && !aA)) {
// add scalar to all vectors
var scalar = (aA ? b : a);
return (aA ? a : b).map(function(v){
return f(v, scalar);
});
}
if(a.length !== b.length) {
throw "Cannot " + opName + " vectors of different lengths";
}
return a.map(function(v,i){ return f(v, b[i]); });
} else {
return f(a,b);
}
}
function additionOp(a,b){
return baseOp(a,b,
function(a,b){
return a + b;
}, "add");
}
function subtractionOp(a,b){
return baseOp(a,b,
function(a,b){
return a - b;
}, "subtract");
}
function divisionOp(a,b){
return baseOp(a,b,
function(a,b){
return a / b;
}, "divide");
}
function multiplicationOp(a,b){
return baseOp(a,b,
function(a,b){
return a * b;
}, "multiply");
}
function moduloOp(a,b){
return baseOp(a,b,
function(a,b){
return a % b;
}, "modulo");
}
function powOp(a,b){
return baseOp(a,b,
function(a,b){
return Math.pow(a, b);
}, "raise the power of");
}
function deepEqual(a,b) {
if(typeof a !== typeof b) return false;
if(a instanceof Array){
if (!(b instanceof Array) || a.length !== b.length) return false;
var eq = true;
var i = 0;
while(eq && i < a.length) {
eq = deepEqual(a[i],b[i]);
i++;
}
return eq;
}
// catch all for primitives and function references
return a === b;
}
var lookup = function(env, identifier) {
if(env.bindings && env.bindings[identifier] !== undefined) {
return env.bindings[identifier];
} else if(env.outer !== undefined) {
return lookup(env.outer, identifier);
} else {
return undefined;
}
};
function run(compiledCode, functions, user, system, assets, draw_implementation) {
functions = functions || {};
user = user || {};
system = system || {};
assets = assets || {};
draw_implementation = draw_implementation ||function(f){
while(true){ f(); }
};
// Execute Draw Loop as implemented by environment
function drawFunc(f){
if(isInDrawLoop===true){
throw "Can only call draw once";
}
isInDrawLoop = true;
draw_implementation(f);
}
functions = {bindings:functions, outer:undefined};
var isInDrawLoop = false;
var pushEnv = function(bindings) {
system = {bindings:bindings, outer:system};
}
var popEnv = function() {
if(system !== undefined) system = system.outer;
}
// Prime the onion variables for system
pushEnv(system, undefined);
return {value:eval(compiledCode), state:user};
}
function compileAndRun(code, verbose) {
var compiled = compile(code, verbose);
return run.apply(null, [compiled].concat(Array.prototype.slice.call(arguments,2)));
}
module.exports.run = run;
module.exports.compileAndRun = compileAndRun;
module.exports.deepEqual = deepEqual;
},{"./compiler.js":3,"./shared.js":6}],6:[function(require,module,exports){
function range(_start,end,_step) {
var start = _start;
var step = (_step === undefined ? 1 : _step);
var range = [];
var typeofStart = typeof start;
var typeofEnd = typeof end;
function onlyStringsAndNumbers(){
throw TypeError("Only string and number types are supported");
};
if (typeofEnd === "undefined") {
throw TypeError("Must pass end argument.");
} else if (typeofStart === "undefined") {
if (typeofEnd === "number") {
start = 0;
} else if (typeofEnd === "string") {
start = " ";
} else {
onlyStringsAndNumbers();
}
} else if (typeofStart !== typeofEnd) {
throw TypeError("Start and end arguments must be of same type.");
}
if (end < start) {
step = -step;
}
if (typeofEnd === "number") {
while (step > 0 ? end >= start : end <= start) {
range.push(start);
start += step;
}
} else if (typeofEnd === "string") {
if (start.length != 1 || end.length != 1) {
throw TypeError("Only strings with one character are supported.");
}
start = start.charCodeAt(0);
end = end.charCodeAt(0);
while (step > 0 ? end >= start : end <= start) {
range.push(String.fromCharCode(start));
start += step;
}
} else {
onlyStringsAndNumbers();
}
return range;
}
module.exports.range = range;
},{}],7:[function(require,module,exports){
var shared = require('./shared.js');
var MersenneTwister = require('mersenne-twister');
var hashcode = require('hashcode').hashCode().value;
var rng = new MersenneTwister();
var stdlib = {
// Write to the console
print:function(msg){ console.log(msg); },
// Crash the program
panic:function(msg) {
throw msg;
},
// Create a range of numbers as a list
range:function(start,end,step) {
return shared.range(start,end,step);
},
// Math
abs:Math.abs,
acos:Math.acos,
asin:Math.asin,
atan:Math.atan,
atan2:Math.atan2,
ceil:Math.ceil,
cos:Math.cos,
exp:Math.exp,
floor:Math.floor,
log:Math.log,
max:Math.max,
min:Math.min,
pow:Math.pow,
round:Math.round,
sign:function(v){ return typeof v !== 'number' ? (function(){throw 'can only get the sign of numbers'})() : (v === 0 ? 0 : (v < 0 ? -1 : 1))},
sin:Math.sin,
sqrt:Math.sqrt,
tan:Math.tan,
// Random
rand:function(_low, _high) {
var low = _low;
var high = _high;
if (low === undefined) {
high = 1;
low = 0;
} else if (high === undefined) {
high = low;
low = 0;
}
return (rng.random() * (high - low)) + low;
},
rand_int:function(low,high){ return Math.floor(rand(low,high+1)); },
rand_seed:function(seed) {
rng.init_seed(hashcode(seed));
}
// More math (interpolation!), Random, noise, string processing, look at processing and basic std libs!
}
module.exports.stdlib = stdlib;
},{"./shared.js":6,"hashcode":1,"mersenne-twister":2}],8:[function(require,module,exports){
var evaluate = require("../lib/runtime.js").compileAndRun;
var stdlib = require('../lib/stdlib.js').stdlib;
var state = {};
var system = {};
var assets = {};
var config = {
orientation:"portrait",
scale:5,
palette:["#162424","#456354","#9CB1A0","#DCEBE2"]
};
var dimensions = config.orientation === "landscape" ? [128,64] : (config.orientation === "portrait" ? [64,128] : [0,0]);
function orientationChanged() {
document.body.style["-webkit-transform"] = (window.orientation % 0 == 180 ? '' : 'rotate(-90deg);');
}
window.onorientationchange = orientationChanged;
window.setTimeout(orientationChanged, 1);
system['dimensions'] = dimensions;
system['width'] = dimensions[0];
system['height'] = dimensions[1];
var canvas = document.querySelector("canvas");
canvas.width = dimensions[0] * config.scale;
canvas.height = dimensions[1] * config.scale;
var canvasContext = canvas.getContext("2d");
canvasContext.mozImageSmoothingEnabled = false;
canvasContext.msImageSmoothingEnabled = false;
canvasContext.webkitImageSmoothingEnabled = false;
canvasContext.imageSmoothingEnabled = false;
var renderCanvas = document.createElement("canvas");
renderCanvas.width = dimensions[0];
renderCanvas.height = dimensions[1];
var ctx = renderCanvas.getContext("2d");
ctx.mozImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
// Initialize palette
var palette = config.palette;
ctx.fillStyle = palette[0];
stdlib['color'] = function(color) {
if(typeof color === "number") {
var c = Math.floor(color);
if(c < 0 >= palette.length) {
throw "color value must be between palette size (0-" + (palette.length - 1) + ")";
}
ctx.fillStyle = palette[c];
} else {
throw "fill function expected number, got " + typeof color;
}
}
stdlib['clear'] = function() {
stdlib['rect']([0,0,canvas.width,canvas.height]);
}
stdlib['rect'] = function(r) {
ctx.fillRect(Math.round(r[0]),Math.round(r[1]),Math.round(r[2]),Math.round(r[3]));
}
stdlib['text'] = function(text, pos) {
ctx.font = "6pt std";
ctx.textBaseline = "hanging";
ctx.fillText(text, pos[0], pos[1]);
}
// Touch events
function mapOffsetToPixel(offset, min, max){
return Math.max(min, Math.min(max, Math.floor(offset / config.scale)));
}
system['touch'] = undefined;
system['ptouch'] = undefined;
system['last_touch'] = undefined;
canvas.addEventListener('touchstart', function(e) {
system['touch'] = [mapOffsetToPixel(e.targetTouches[0].pageX - canvas.offsetLeft, 0, dimensions[0]), mapOffsetToPixel(e.targetTouches[0].pageY - canvas.offsetTop, 0, dimensions[1])];
system['last_touch'] = system['touch'];
e.preventDefault();
});
canvas.addEventListener('touchend', function(e) {
console.log(e);
system['touch'] = undefined;
e.preventDefault();
});
canvas.addEventListener('touchmove', function(e) {
if(system['touch'] !== undefined) {
system['touch'] = [mapOffsetToPixel(e.targetTouches[0].pageX - canvas.offsetLeft, 0, dimensions[0]), mapOffsetToPixel(e.targetTouches[0].pageY - canvas.offsetTop, 0, dimensions[1])];
system['last_touch'] = system['touch'];
}
e.preventDefault();
});
// Init time value
system['time'] = 0;
function draw_function(f) {
var draw_func = function(timestamp){
system['time'] = timestamp;
f();
canvasContext.drawImage(renderCanvas, 0, 0, canvas.width, canvas.height);
system['ptouch'] = system['touch'];
window.requestAnimationFrame(draw_func);
};
window.requestAnimationFrame(draw_func);
};
var gameCode = document.querySelector("script[type=\"text/tiny\"]").textContent;
evaluate(gameCode, false, stdlib, state, system, assets, draw_function);
},{"../lib/runtime.js":5,"../lib/stdlib.js":7}]},{},[8]);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment