From f5836da2a57e8c08a413c798e39926d269c336f6 Mon Sep 17 00:00:00 2001 From: Paul Tagliamonte Date: Wed, 27 Feb 2013 19:00:52 -0500 Subject: [PATCH] Kill everything --- AUTHORS | 11 - COPYRIGHT | 19 -- README.md | 2 - REFACTOR | 4 - bin/bhython | 9 - bin/hython | 28 -- demo/.gitignore | 1 - demo/Makefile | 14 - demo/app.py | 27 -- demo/devel.sh | 12 - demo/less/config.less | 16 - demo/less/debuild.me.less | 6 - demo/less/font.less | 32 -- demo/less/layout.less | 146 --------- demo/less/macros.less | 5 - demo/static/fonts/Damion.woff | Bin 30272 -> 0 bytes demo/static/fonts/Quicksand.woff | Bin 13692 -> 0 bytes demo/static/fonts/cantarell.otf | Bin 76356 -> 0 bytes demo/static/imgs/logo.png | Bin 2420 -> 0 bytes demo/static/imgs/texture.png | Bin 170 -> 0 bytes demo/static/jquery-1.8.3.min.js | 2 - demo/static/jquery.min.js | 1 - demo/templates/base.html | 64 ---- demo/templates/index.html | 6 - eg/flask/app.hy | 13 - eg/flask/shim.py | 5 - eg/flask/templates/index.html | 1 - eg/ma-legs.hy | 9 - eg/pkginfo.hy | 35 --- grammar.md | 47 --- hy/__init__.py | 0 hy/compiler/__init__.py | 0 hy/compiler/ast27.py | 493 ------------------------------- hy/lang/__init__.py | 0 hy/lang/bool.py | 9 - hy/lang/builtins.py | 94 ------ hy/lang/expression.py | 40 --- hy/lang/hyobj.py | 49 --- hy/lang/importer.py | 77 ----- hy/lang/internals.py | 23 -- hy/lang/list.py | 15 - hy/lang/map.py | 15 - hy/lang/natives.py | 137 --------- hy/lang/number.py | 10 - hy/lang/string.py | 17 -- hy/lang/symbol.py | 10 - hy/lex/__init__.py | 0 hy/lex/errors.py | 2 - hy/lex/machine.py | 29 -- hy/lex/states.py | 250 ---------------- hy/lex/tokenize.py | 11 - maint-scripts/deploy.sh | 5 - requirements.txt | 3 - setup.cfg | 5 - setup.py | 32 -- tests/__init__.py | 0 tests/lang/__init__.py | 0 tests/lang/colls.hy | 5 - tests/lang/foo.hy | 4 - tests/lang/kwargs.hy | 9 - tests/lang/test_expression.py | 34 --- tests/lang/test_import.py | 13 - tests/lang/test_kwargs.py | 18 -- tests/lang/test_map.py | 15 - tests/lang/test_types_as_fn.py | 7 - tests/lexer/__init__.py | 0 tests/lexer/test_basic_lexing.py | 80 ----- tests/lexer/test_list_lexing.py | 44 --- tox.ini | 7 - 69 files changed, 2077 deletions(-) delete mode 100644 AUTHORS delete mode 100644 COPYRIGHT delete mode 100644 README.md delete mode 100644 REFACTOR delete mode 100755 bin/bhython delete mode 100755 bin/hython delete mode 100644 demo/.gitignore delete mode 100644 demo/Makefile delete mode 100644 demo/app.py delete mode 100755 demo/devel.sh delete mode 100644 demo/less/config.less delete mode 100644 demo/less/debuild.me.less delete mode 100644 demo/less/font.less delete mode 100644 demo/less/layout.less delete mode 100644 demo/less/macros.less delete mode 100644 demo/static/fonts/Damion.woff delete mode 100644 demo/static/fonts/Quicksand.woff delete mode 100644 demo/static/fonts/cantarell.otf delete mode 100644 demo/static/imgs/logo.png delete mode 100644 demo/static/imgs/texture.png delete mode 100644 demo/static/jquery-1.8.3.min.js delete mode 120000 demo/static/jquery.min.js delete mode 100644 demo/templates/base.html delete mode 100644 demo/templates/index.html delete mode 100644 eg/flask/app.hy delete mode 100644 eg/flask/shim.py delete mode 100644 eg/flask/templates/index.html delete mode 100644 eg/ma-legs.hy delete mode 100644 eg/pkginfo.hy delete mode 100644 grammar.md delete mode 100644 hy/__init__.py delete mode 100644 hy/compiler/__init__.py delete mode 100644 hy/compiler/ast27.py delete mode 100644 hy/lang/__init__.py delete mode 100644 hy/lang/bool.py delete mode 100644 hy/lang/builtins.py delete mode 100644 hy/lang/expression.py delete mode 100644 hy/lang/hyobj.py delete mode 100644 hy/lang/importer.py delete mode 100644 hy/lang/internals.py delete mode 100644 hy/lang/list.py delete mode 100644 hy/lang/map.py delete mode 100644 hy/lang/natives.py delete mode 100644 hy/lang/number.py delete mode 100644 hy/lang/string.py delete mode 100644 hy/lang/symbol.py delete mode 100644 hy/lex/__init__.py delete mode 100644 hy/lex/errors.py delete mode 100644 hy/lex/machine.py delete mode 100644 hy/lex/states.py delete mode 100644 hy/lex/tokenize.py delete mode 100755 maint-scripts/deploy.sh delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100755 setup.py delete mode 100644 tests/__init__.py delete mode 100644 tests/lang/__init__.py delete mode 100644 tests/lang/colls.hy delete mode 100644 tests/lang/foo.hy delete mode 100644 tests/lang/kwargs.hy delete mode 100644 tests/lang/test_expression.py delete mode 100644 tests/lang/test_import.py delete mode 100644 tests/lang/test_kwargs.py delete mode 100644 tests/lang/test_map.py delete mode 100644 tests/lang/test_types_as_fn.py delete mode 100644 tests/lexer/__init__.py delete mode 100644 tests/lexer/test_basic_lexing.py delete mode 100644 tests/lexer/test_list_lexing.py delete mode 100644 tox.ini diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 975c7f7..0000000 --- a/AUTHORS +++ /dev/null @@ -1,11 +0,0 @@ -Code contributors: - - - Paul R. Tagliamonte - - Gergely Nagy - -I'd also like to thank the following people: - - - Kragen Sitaker: - Major thanks goes to Kragen on helping me work through some of the - initial namespacing crap with the first (really functional) attempt - at solving the problem. diff --git a/COPYRIGHT b/COPYRIGHT deleted file mode 100644 index afc91b2..0000000 --- a/COPYRIGHT +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010-2012 Paul Tagliamonte - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index bac210e..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ - -Check out some [tests](https://gist.github.com/4365555) I ran diff --git a/REFACTOR b/REFACTOR deleted file mode 100644 index 0e54bf3..0000000 --- a/REFACTOR +++ /dev/null @@ -1,4 +0,0 @@ - - overhaul state stuff, machine stuff, revise to be smart - - generate ast in a better way; use "prims" & macros to compile hy diff --git a/bin/bhython b/bin/bhython deleted file mode 100755 index 075ea88..0000000 --- a/bin/bhython +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -"""": -exec /usr/bin/env bpython -i $0 $@ -""" - -import hy.lang.importer -import sys - -print "Hython is now importable!" diff --git a/bin/hython b/bin/hython deleted file mode 100755 index d19b8be..0000000 --- a/bin/hython +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from hy.lang.importer import _hy_import_file - -from code import InteractiveConsole -import traceback -import sys - -try: - import readline -except ImportError: - pass - -if len(sys.argv) > 1: - sys.argv = sys.argv[1:] - mod = _hy_import_file(sys.argv[0], '__main__') - sys.exit(0) - - -InteractiveConsole().interact(banner=""" - "Really, if the lower orders don’t set us a good example, what on - earth is the use of them?" - - -- Oscar Wilde (The Importance of Being Earnest) - - - The hython bits have been loaded -- magically, .hy - files are importable!""") diff --git a/demo/.gitignore b/demo/.gitignore deleted file mode 100644 index 1d7ffab..0000000 --- a/demo/.gitignore +++ /dev/null @@ -1 +0,0 @@ -static/css diff --git a/demo/Makefile b/demo/Makefile deleted file mode 100644 index 87bd217..0000000 --- a/demo/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -LESSC = lessc -LESSCFLAGS = -x -DEPLOYMENT = dev - -all: clean build - -STATIC=./static - -clean: - rm -rf $(STATIC)/css - -build: - mkdir $(STATIC)/css - $(LESSC) $(LESSCFLAGS) less/debuild.me.less > $(STATIC)/css/debuild.css diff --git a/demo/app.py b/demo/app.py deleted file mode 100644 index f08c109..0000000 --- a/demo/app.py +++ /dev/null @@ -1,27 +0,0 @@ -from hy.compiler.ast27 import forge_ast -from hy.lex.tokenize import tokenize -import codegen - -from flask import Flask, render_template, request -app = Flask(__name__) - - -@app.route('/') -def index(): - return render_template('index.html') - - -@app.route('/translate', methods=['POST']) -def translate(): - lines = request.form['code'] - - try: - code = tokenize(lines) - ast = forge_ast("stdin", code) - return codegen.to_source(ast) - except Exception as e: - return str(e) - - -if __name__ == '__main__': - app.run(debug=True) diff --git a/demo/devel.sh b/demo/devel.sh deleted file mode 100755 index 76d52d5..0000000 --- a/demo/devel.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -last="" -while [ true ]; do - now=$(find ./less -type f -printf "%T@ %Tx %TX %p\n" | sort -n -r | head -1) - if [ "$last" != "$now" ]; then - make >/dev/null - echo "Updated." - fi - last=$now - sleep 1 -done diff --git a/demo/less/config.less b/demo/less/config.less deleted file mode 100644 index 4689e52..0000000 --- a/demo/less/config.less +++ /dev/null @@ -1,16 +0,0 @@ -@background-color: #DCDCDC; -@color: #333333; - -@link-color: #191921; - -@nav-background-color: #333333; -@nav-color: #EEEEEE; -@nav-border: #FFFFFF; -@nav-height: 50px; - -@shadow-color: #333333; - -@nav-from: #CACACA; -@nav-to: #F5F5F5; - -@table-zebra: #FFFFFF; diff --git a/demo/less/debuild.me.less b/demo/less/debuild.me.less deleted file mode 100644 index 12291e6..0000000 --- a/demo/less/debuild.me.less +++ /dev/null @@ -1,6 +0,0 @@ -@import "config.less"; - -@import "macros.less"; -@import "font.less"; - -@import "layout.less"; diff --git a/demo/less/font.less b/demo/less/font.less deleted file mode 100644 index 67a664a..0000000 --- a/demo/less/font.less +++ /dev/null @@ -1,32 +0,0 @@ -@font-face { - font-family: 'Damion'; - font-style: normal; - font-weight: 400; - src: local('Damion'), url(../fonts/Damion.woff) format('woff'); -} - -@font-face { - font-family: 'Cantarel'; - font-style: normal; - font-weight: 400; - src: url(../fonts/cantarell.otf); -} - -@font-face { - font-family: 'Quicksand'; - font-style: normal; - font-weight: 400; - src: local('Quicksand'), url(../fonts/Quicksand.woff) format('woff'); -} - -.damion { - font-family: 'Damion', cursive; -} - -.quicksand { - font-family: 'Quicksand', sans-serif; -} - -.cantarell { - font-family: 'Cantarel', sans-serif; -} diff --git a/demo/less/layout.less b/demo/less/layout.less deleted file mode 100644 index 87ebc5c..0000000 --- a/demo/less/layout.less +++ /dev/null @@ -1,146 +0,0 @@ -.noshim { - padding: 0px; - margin: 0px; -} - -html, body { - background-color: @background-color; - background-image: url(../imgs/texture.png); - height: 100%; - .noshim; - .cantarell; -} - -pre { - border-radius: 5px; - background-color: #FFFFFF; - padding: 10px; - border: 1px solid darken(@background-color, 1%); -} - -.spacer { - min-height: 30px; -} - -a { - color: @link-color; -} - -ul { - .noshim; - list-style-type: none; -} - -table { - width: 100%; - .noshim; - border-spacing: 0px; - border-collapse: collapse; - border: 1px solid darken(@background-color, 1%); - tr { - .noshim; - td { - .noshim; - padding: 5px; - } - border-bottom: 1px solid darken(@background-color, 1%); - } - margin-top: 10px; - margin-bottom: 10px; -} - -table.zebra { - tr:nth-child(2n) { - background-color: @table-zebra; - } -} - - -.content { - background-color: #F8F8F8; - min-height: 70%; - border-bottom: 1px solid #888888; - padding-top: 30px; -} - -.container { - margin-left: auto; - margin-right: auto; - width: 700px; -} - -.main-container { - .container; - padding-bottom: 50px; -} - -.shim { - padding: 5px; -} - -.header { - .color { - width: 12.5%; - height: 10px; - float: left; - } -} - - -.shadow { - box-shadow: 5px 5px rgba(15,15,15,0.05); -} - - -.popover { - position: fixed; - height: 100%; - width: 100%; - .focus { - .shadow; - border: 1px solid #CCCCCC; - background-color: #FFFFFF; - border-radius: 5px; - width: 90%; - height: 85%; - margin-left: auto; - margin-right: auto; - margin-top: 5%; - } -} - -#repl-input { - border-right: 1px solid #DDDDDD; -} - -.repl { - height: 100%; - padding: 3px; - .repl-left { - float: left; - } - .repl-right { - float: right; - } - .repl-pane { - padding: 0px; - margin: 0px; - border: 0px solid #000000; - resize: none; - width: 48%; - height: 99%; - } -} - -.logo { - width: 100%; - text-align: center; -} - -small { - font-size: 0.5em; -} - -.clear { - clear: both; -} diff --git a/demo/less/macros.less b/demo/less/macros.less deleted file mode 100644 index 8a9b94c..0000000 --- a/demo/less/macros.less +++ /dev/null @@ -1,5 +0,0 @@ -.box-shadow(@style) { - box-shadow: @style @shadow-color; - -webkit-box-shadow: @style @shadow-color; - -moz-box-shadow: @style @shadow-color; -} diff --git a/demo/static/fonts/Damion.woff b/demo/static/fonts/Damion.woff deleted file mode 100644 index 23d7ec182f3bbda6aa8e7a6871718959a967b56e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30272 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

+A_`4HF-bK|?jrm(A>M~0! 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 diff --git a/demo/static/fonts/cantarell.otf b/demo/static/fonts/cantarell.otf deleted file mode 100644 index 34f17a9f83206c76ea1327e6764bcc122ef3e1e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76356 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 nGZ!=$46&IDGxM;S!)TMf<|5`Iz(vhP@mb3Jg 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 mIMl<9sA-x~;%iUy!u|o+Z=646V^`Y%0000{XE z)7O>#4v!2ot8A7+s5nqavcxr_#5q4VH#M(>!MP|ku_QG`p**uBL&4qCHz2%`52Q%N z)5S4_-DQ7e9u-W9zDy#|Ke7LiBz*^bTKdJd?b!PC{x JWt~$(699ZiD{ue+ diff --git a/demo/static/jquery-1.8.3.min.js b/demo/static/jquery-1.8.3.min.js deleted file mode 100644 index 83589da..0000000 --- a/demo/static/jquery-1.8.3.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.3 jquery.com | jquery.org/license */ -(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="

",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/demo/static/jquery.min.js b/demo/static/jquery.min.js deleted file mode 120000 index a11c5fd..0000000 --- a/demo/static/jquery.min.js +++ /dev/null @@ -1 +0,0 @@ -jquery-1.8.3.min.js \ No newline at end of file diff --git a/demo/templates/base.html b/demo/templates/base.html deleted file mode 100644 index 64af773..0000000 --- a/demo/templates/base.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - {% block title %}{% endblock %} | hy - - - - - -
-
-
-
- -

-                
-
-
-
- -{% block content %} -{% endblock %} - - diff --git a/demo/templates/index.html b/demo/templates/index.html deleted file mode 100644 index 5547907..0000000 --- a/demo/templates/index.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Welcome!{% endblock %} - -{% block content %} -{% endblock %} diff --git a/eg/flask/app.hy b/eg/flask/app.hy deleted file mode 100644 index 8d9c594..0000000 --- a/eg/flask/app.hy +++ /dev/null @@ -1,13 +0,0 @@ -; Copyright (c) Paul R. Tagliamonte , 2013 under the terms of -; hy. - -(import-from flask - Flask render-template) - - -(def app (Flask "__main__")) - - -(decorate-with (.route app "/") - (defn index [] - (render-template "index.html"))) diff --git a/eg/flask/shim.py b/eg/flask/shim.py deleted file mode 100644 index 8aa3517..0000000 --- a/eg/flask/shim.py +++ /dev/null @@ -1,5 +0,0 @@ -import hy.lang.importer # NOQA -from app import app - -if __name__ == '__main__': - app.run(debug=True) diff --git a/eg/flask/templates/index.html b/eg/flask/templates/index.html deleted file mode 100644 index dd60957..0000000 --- a/eg/flask/templates/index.html +++ /dev/null @@ -1 +0,0 @@ -

It works!

diff --git a/eg/ma-legs.hy b/eg/ma-legs.hy deleted file mode 100644 index d8347f1..0000000 --- a/eg/ma-legs.hy +++ /dev/null @@ -1,9 +0,0 @@ -; vim: tabstop=2 expandtab shiftwidth=2 softtabstop=2 filetype=lisp -; Copyright (c) Paul Tagliamonte, in sofar as any of this is at all -; copyrightable. - -(import "sunlight") - - -(for [x (kwapply (sunlight.openstates.legislators) {"state" "ma"})] - (print (index x "first_name"))) diff --git a/eg/pkginfo.hy b/eg/pkginfo.hy deleted file mode 100644 index 152d654..0000000 --- a/eg/pkginfo.hy +++ /dev/null @@ -1,35 +0,0 @@ -(import sys) ; for arguments -(import-from sh apt-cache) ; for apt-cache - - -(def package "fluxbox") -(if (> (len sys.argv) 1) - (def package (index sys.argv 1))) - - -(defn parse-rfc-822 [inpu] - (do (def keys {}) - (def key None) - (def val None) - (for [x (.splitlines inpu)] - (if (!= x "") - (if (!= (index x 0) " ") - (do (def kv (.split x ":" 1)) - (def key (.strip (index kv 0))) - (set-index keys key (.strip (index kv 1)))) - (do - (if (== x " .") - (def x "")) - (set-index keys key (+ (index keys key) "\n" (.strip x))))))) - (dict keys))) - - -(defn get-info [package] - (parse-rfc-822 (.show apt-cache package))) - - -(def data (get-info package)) - -(print "The maintainer for" package "is" (index data "Maintainer")) -(print "") -(print package "is a(n)" (index data "Description-en")) diff --git a/grammar.md b/grammar.md deleted file mode 100644 index 5928ea2..0000000 --- a/grammar.md +++ /dev/null @@ -1,47 +0,0 @@ -## Lexical syntax ## - - OPEN-PAREN := '(' - - CLOSE-PAREN := ')' - - OPEN-SQUARE := '[' - - CLOSE-SQUARE := ']' - - OPEN-CURLY := '{' - - CLOSE-CURLY := '}' - - WHITESPACE := ' ' | '\t' | '\n' | '\r' - - COMMENT := ';' ??? - - STRING := '"' ??? '"' - - CONSTANT := '*' ??? '*' - - BOOLEAN := 'true' | 'false' - - SYMBOL := ??? - - NUMBER := ??? - - HASH := '#!' ??? - - -## Grammar ## ([example](http://docs.python.org/2/reference/grammar.html)) - - Hy := HASH | COMMENT | WHITESPACE | Expression - - Expression := OPEN-PAREN Operator Args Close-Paren - - Operator := ??? - - Args := Value(*) - - List := OPEN-SQUARE Value(*) CLOSE-SQUARE - - Map := OPEN-CURLY ( Value Value )(*) CLOSE-CURLY - - Value := STRING | CONSTANT | BOOLEAN | SYMBOL | NUMBER | Expression | List | Map - \ No newline at end of file diff --git a/hy/__init__.py b/hy/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hy/compiler/__init__.py b/hy/compiler/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hy/compiler/ast27.py b/hy/compiler/ast27.py deleted file mode 100644 index 9d74637..0000000 --- a/hy/compiler/ast27.py +++ /dev/null @@ -1,493 +0,0 @@ -# output ast for cpython 2.7 -import ast -import imp - -from hy.lang.expression import HYExpression -from hy.lang.number import HYNumber -from hy.lang.string import HYString -from hy.lang.symbol import HYSymbol -from hy.lang.list import HYList -from hy.lang.bool import HYBool -from hy.lang.map import HYMap - - -def _ast_print(node, children, obj): - """ Handle `print' statements """ - return ast.Print(dest=None, values=children, nl=True) - - -def _ast_raise(node, children, obj): - return ast.Raise(type=children[0]) - - -def _ast_binop(node, children, obj): - """ Handle basic Binary ops """ - # operator = Add | Sub | Mult | Div | Mod | Pow | LShift - # | RShift | BitOr | BitXor | BitAnd | FloorDiv - # XXX: Add these folks in - - inv = node.get_invocation() - ops = {"+": ast.Add, "/": ast.Div, "*": ast.Mult, "-": ast.Sub} - op = ops[inv['function']] - left = children.pop(0) - calc = None - for child in children: - calc = ast.BinOp(left=left, op=op(), right=child) - left = calc - return calc - - -def _ast_cmp(node, children, obj): - inv = node.get_invocation() - ops = { - "==": ast.Eq, "<=": ast.LtE, ">=": ast.GtE, ">": ast.Gt, "<": ast.Lt, - "!=": ast.NotEq, "in": ast.In, "not-in": ast.NotIn, "is": ast.Is, - "is-not": ast.IsNot - } - op = ops[inv['function']] - left = children.pop(0) - - cop = [op()] * len(children) - return ast.Compare(left=left, ops=cop, comparators=children) - - -def _ast_import(tree): - i = tree.get_invocation() - c = i['args'] - return ast.Import(names=[ast.alias(name=str(x), asname=None) for x in c]) - - -def _ast_import_from(tree): - i = tree.get_invocation() - c = i['args'] - mod = c.pop(0) - return ast.ImportFrom( - module=str(mod), - names=[ - ast.alias( - name=str(x), - asname=None - ) for x in c - ], - level=0 - ) - - -def _ast_if(node, children, obj): - cond = children.pop(0) - true = children.pop(0) - flse = [] - if children != []: - flse = children.pop(0) - - true = true if isinstance(true, list) else [true] - flse = flse if isinstance(flse, list) else [flse] - - true = _adjust_body(true, do_ret=obj.in_fn) - flse = _adjust_body(flse, do_ret=obj.in_fn) - - ret = ast.If(test=cond, body=true, orelse=flse) - return ret - - -def _ast_do(node, children, obj): - return children - - -def _ast_return(node, children, obj): - return ast.Return(value=children[-1]) - - -def _ast_yield(node, chile, obj): - val = chile.pop(0) - # XXX: Check to make sure chile is now [] - return ast.Yield(value=val) - - -special_cases = { - "print": _ast_print, - - "+": _ast_binop, "/": _ast_binop, - "-": _ast_binop, "*": _ast_binop, - - "==": _ast_cmp, "<=": _ast_cmp, - ">=": _ast_cmp, "<": _ast_cmp, - ">": _ast_cmp, "!=": _ast_cmp, - "in": _ast_cmp, "not-in": _ast_cmp, - "is": _ast_cmp, "is-not": _ast_cmp, - - "if": _ast_if, - "do": _ast_do, - "raise": _ast_raise, - "yield": _ast_yield -} - - -def _meta_ast_subscript(val, sl, ctx): - return ast.Subscript(value=val, slice=sl, ctx=ctx) - - -class AST27Converter(object): - """ Convert a lexed Hy tree into a Python AST for cpython 2.7 """ - - def __init__(self): - self.table = { - HYString: self.render_string, - HYExpression: self.render_expression, - HYNumber: self.render_number, - HYSymbol: self.render_symbol, - HYBool: self.render_bool, - HYList: self.render_list, - HYMap: self.render_map, - } - - self.startswith = { - ".": self._ast_dot - } - - self.native_cases = { - "defn": self._defn, - "fn": self._defn, - "def": self._def, - "import": _ast_import, - - "import_from": _ast_import_from, # Remember, "-" --> "_" - "decorate_with": self._ast_decorate, - - "index": self._ast_index, - "set_index": self._ast_set_index, - "while": self._ast_while, - - "doseq": self._ast_for, - "for": self._ast_for, - "kwapply": self._ast_kwapply, - } - self.special_types = { - HYMap: self._ast_fn_index, - HYList: self._ast_fn_index, - } - self.in_fn = False - - def _ast_set_index(self, node): - i = node.get_invocation() - c = i['args'] - val = c.pop(0) - sl = c.pop(0) - tar = c.pop(0) - - return ast.Assign( - targets=[ - _meta_ast_subscript( - self.render(val), - ast.Index(value=self.render(sl)), - ast.Store()) - ], - value=self.render(tar) - ) - - def _ast_index(self, node): - i = node.get_invocation() - c = i['args'] - val = c.pop(0) - tar = c.pop(0) - - return _meta_ast_subscript( - self.render(val), - ast.Index(value=self.render(tar), ctx=ast.Load()), - ast.Load()) - - def _ast_fn_index(self, node): - i = node.get_invocation() - cmd = ["index"] - cmd.append(i['function']) - cmd.extend(i['args']) - return self.render_expression(HYExpression(cmd)) - - def _ast_dot(self, node): - inv = node.get_invocation() - args = inv['args'] - target = args.pop(0) - attr = inv['function'][1:] - - return ast.Call( - func=ast.Attribute( - value=self.render(target), - attr=str(attr), - ctx=ast.Load() - ), - args=[self.render(x) for x in args], - keywords=[], - starargs=None, - kwargs=None - ) - - def _ast_decorate(self, node): - i = node.get_invocation() - c = i['args'] - meth = c.pop(-1) - fn = self.render(meth) - for chile in c: - fn.decorator_list.append(self.render(chile)) - - return fn - - def _def(self, node): - """ For the `def` operator """ - inv = node.get_invocation() - args = inv['args'] - name = args.pop(0) - blob = self.render(args[0]) - - ret = ast.Assign( - targets=[ast.Name(id=str(name), ctx=ast.Store())], - value=blob - ) - return ret - - def _ast_kwapply(self, node): - i = node.get_invocation() - args = i['args'] - fn = args.pop(0) - kwargs = args.pop(0) - ret = self.render(fn) - ret.keywords = [ - ast.keyword( - arg=str(x), - value=self.render(kwargs[x]) - ) for x in kwargs - ] - return ret - - def _ast_while(self, node): - i = node.get_invocation() - args = i['args'] - test = args.pop(0) - test = self.render(test) - body = args.pop(0) - body = self.render(body) - body = body if isinstance(body, list) else [body] - orel = [] - - body = _adjust_body(body, do_ret=self.in_fn) - orel = _adjust_body(orel, do_ret=self.in_fn) - - return ast.While( - test=test, - body=body, - orelse=orel, - ) - - def _ast_for(self, node): - i = node.get_invocation() - args = i['args'] - sig = args.pop(0) - body = args.pop(0) - aname, seq = sig - - body = self.render(body) - body = body if isinstance(body, list) else [body] - orel = [] - - body = _adjust_body(body, do_ret=False) - orel = _adjust_body(orel, do_ret=False) - - return ast.For( - target=ast.Name(id=str(aname), ctx=ast.Store()), - iter=self.render(seq), - body=body, - orelse=orel, - ) - - def _defn(self, node): - """ For the defn operator """ - inv = node.get_invocation() - args = inv['args'] - name = args.pop(0) - sig = args.pop(0) - doc = None - - if type(args[0]) == HYString: - doc = args.pop(0) - - # verify child count... - c = [] - _pop_fn = self.in_fn - - self.in_fn = True - for child in args: - c.append(self.render(child)) - - self.in_fn = _pop_fn - - cont = c[-1] # XXX: Wrong... - body = cont if isinstance(cont, list) else [cont] - - if doc: - # Shim in docstrings - body.insert(0, ast.Expr(value=ast.Str(s=str(doc)))) - - body = _adjust_body(body, do_ret=True) - - ret = ast.FunctionDef( - name=str(name), - args=ast.arguments( - args=[ - ast.Name( - arg=str(x), - id=str(x), - ctx=ast.Param() - ) for x in sig - ], - vararg=None, - kwarg=None, - kwonlyargs=[], - kw_defaults=[], - defaults=[] - ), - body=body, - decorator_list=[] - ) - return ret - - def render_string(self, node): - """ Render a string to AST """ - return ast.Str(s=str(node)) - - def render_list(self, node): - ret = [] - for c in node: - ret.append(self.render(c)) - return ast.List(elts=ret, ctx=ast.Load()) - - def render_map(self, node): - keys = [] - values = [] - for key in node: - keys.append(self.render(key)) - values.append(self.render(node[key])) - return ast.Dict(keys=keys, values=values) - - def render_bool(self, node): - """ Render a boolean to AST """ - thing = "True" if node._val else "False" - return ast.Name(id=thing, ctx=ast.Load()) - - def render_symbol(self, node): - """ Render a symbol to AST """ - # the only time we have a bare symbol is if we - # deref it. - if "." in node: - glob, local = node.rsplit(".", 1) - ret = ast.Attribute( - value=self.render_symbol(glob), - attr=str(local), - ctx=ast.Load() - ) - return ret - - return ast.Name(id=str(node), ctx=ast.Load()) - - def render_number(self, node): - """ Render a number to AST """ - return ast.Num(n=node) - - def render_expression(self, node): - """ Render an expression (function) to AST """ - - inv = node.get_invocation() - - if type(inv['function']) in self.special_types: - return self.special_types[type(inv['function'])](node) - - if inv['function'] in self.native_cases: - return self.native_cases[inv['function']](node) - - for key in self.startswith: - if inv['function'].startswith(key): - return self.startswith[key](node) - - c = [] - for child in node.get_children(): - c.append(self.render(child)) - - if inv['function'] in special_cases: - return special_cases[inv['function']](node, c, self) - - ret = ast.Call( - func=self.render_symbol(inv['function']), - args=c, - keywords=[], - starargs=None, - kwargs=None - ) - return ret - - def render(self, tree): - """ Entry point """ - t = type(tree) - handler = self.table[t] - ret = handler(tree) - - def _correct_tree(_ast, tree): - for node in ast.walk(_ast): - node.lineno = tree.line - node.col_offset = tree.column - - if isinstance(ret, list): - for r in ret: - _correct_tree(r, tree) - else: - _correct_tree(ret, tree) - - return ret - - -def _adjust_body(at, do_ret=True): - ret = [] - - first = True - at.reverse() - - for el in at: - if not isinstance(el, ast.stmt): - if first and do_ret: - ret.append(ast.Return( - value=el, - lineno=el.lineno, - col_offset=el.col_offset - )) - else: - ret.append(ast.Expr( - value=el, - lineno=el.lineno, - col_offset=el.col_offset - )) - else: - ret.append(el) - first = False - - ret.reverse() - return ret - - -def forge_ast(name, forest): - """ Make an AST for hacking with """ - conv = AST27Converter() - - statements = [] - for tree in forest: - ret = conv.render(tree) - statements.append(ret) - - statements = _adjust_body(statements, do_ret=False) - - return ast.Module(body=statements) - #return ast.fix_missing_locations(ast.Module(body=statements)) - - -def forge_module(name, fpath, forest): - mod = imp.new_module(name) - mod.__file__ = fpath - ast = forge_ast(name, forest) - eval(compile(ast, fpath, "exec"), mod.__dict__) - return mod diff --git a/hy/lang/__init__.py b/hy/lang/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hy/lang/bool.py b/hy/lang/bool.py deleted file mode 100644 index 32bc3d6..0000000 --- a/hy/lang/bool.py +++ /dev/null @@ -1,9 +0,0 @@ -from hy.lang.hyobj import HYObject - - -class HYBool(HYObject): - def __init__(self, val): - self._val = val - - def eval(self, lns, *args, **kwargs): - return self._val is True diff --git a/hy/lang/builtins.py b/hy/lang/builtins.py deleted file mode 100644 index fe58045..0000000 --- a/hy/lang/builtins.py +++ /dev/null @@ -1,94 +0,0 @@ -# -import sys -from hy.lang.string import HYString - - -def _define(obj, lns): - fd = obj.get_invocation() - args = fd['args'] - obj.namespace[args[0]] = args[1]() - - -def _loop(obj, lns): - fd = obj.get_invocation() - args = fd['args'] - while True: - for arg in args: - arg.eval(lns.clone()) - - -def _fn(obj, lns, name=None): - fd = obj.get_invocation() - args = fd['args'] - sig = args[0] - - docstring = None - if isinstance(args[1], HYString): - docstring = args.pop(1) - - meth = args[1] - - def _(*args, **kwargs): - l = lns.clone() - for i in range(0, len(sig)): - name = sig[i] - value = args[i] - l[name] = value - - ret = meth.eval(l, *args, **kwargs) - return ret - - _.__name__ = "hyfn" - if name: - _.__name__ = name - - _.__doc__ = docstring - return _ - - -def _kwapply(obj, lns): - fd = obj.get_invocation() - subshell, kwargs = fd['args'] - return subshell.eval(lns.clone(), **kwargs) - - -def _import(obj, lns): - ns = obj.namespace - fd = obj.get_invocation() - args = fd['args'] - mods = args[0] - - for module in mods: - basename = module.split(".", 1)[0] - mod = __import__(module) - sys.modules[module] = mod - ns[basename] = mod - - -def _progn(obj, lns): - fd = obj.get_invocation() - args = fd['args'] - ret = [] - for arg in args: - ret.append(arg.eval(lns.clone())) - return ret - - -def _if(obj, lns): - fd = obj.get_invocation() - args = fd['args'] - if args[0].eval(lns.clone()): - return args[1].eval(lns.clone()) - else: - return args[2].eval(lns.clone()) - - -builtins = { - "def": _define, - "fn": _fn, - "import": _import, - "kwapply": _kwapply, - "if": _if, - "loop": _loop, - "progn": _progn, -} diff --git a/hy/lang/expression.py b/hy/lang/expression.py deleted file mode 100644 index fc4e0fa..0000000 --- a/hy/lang/expression.py +++ /dev/null @@ -1,40 +0,0 @@ -from hy.lang.hyobj import HYObject -from hy.lang.builtins import builtins - - -class HYExpression(HYObject, list): - def __init__(self, nodes): - self += nodes - - def get_children(self): - ret = [] - for node in self.get_invocation()['args']: - ret.append(node) - return ret - - def get_invocation(self): - fn = self[0] if len(self) > 0 else "" - args = self[1:] if len(self) > 1 else [] - - return { - "function": fn, - "args": args, - } - - def peek(self): - return self.get_invocation()['function'] - - def eval(self, lns, *args, **kwargs): - fn = self.peek() - - if fn in builtins: - # special-case builtin handling. - return builtins[fn](self, lns) - - things = [] - for child in self.get_children(): - c = child.copy() - things.append(c.eval(lns.clone())) - - ret = self.lookup(lns, fn)(*things, **kwargs) - return ret diff --git a/hy/lang/hyobj.py b/hy/lang/hyobj.py deleted file mode 100644 index 5028763..0000000 --- a/hy/lang/hyobj.py +++ /dev/null @@ -1,49 +0,0 @@ -from hy.lang.internals import HYNamespaceCOW - - -class HYObject(object): - def set_namespace(self, ns): - self.namespace = ns - for c in self.get_children(): - c.set_namespace(ns) - - def get_children(self): - return [] - - def __call__(self, *args, **kwargs): - ns = HYNamespaceCOW({}) # Each invocation needs it's own ns - return self.eval(ns, *args, **kwargs) - - def lookup(self, lns, fn): - if fn in lns: - return lns[fn] - - if fn in self.namespace: - return self.namespace[fn] - - if fn in self.namespace['__builtins__']: - return self.namespace['__builtins__'][fn] - # builtin lookup - - if "." in fn: - lon, short = fn.rsplit(".", 1) - holder = self.lookup(lns, lon) - return getattr(holder, short) - - raise Exception("No such symbol: `%s`" % (fn)) - - def eval(self, lns, *args, **kwargs): - for node in self.get_children(): - node.eval(lns, *args, **kwargs) - return self - - def _issue_job(self, job, *args, **kwargs): - pass - - def _join(self): - pass - - def copy(self): - new = type(self)(self) - new.set_namespace(self.namespace) - return new diff --git a/hy/lang/importer.py b/hy/lang/importer.py deleted file mode 100644 index 9457f3f..0000000 --- a/hy/lang/importer.py +++ /dev/null @@ -1,77 +0,0 @@ -# from hy.compiler.modfaker import forge_module -from hy.compiler.ast27 import forge_module - -from hy.lex.tokenize import tokenize -import sys -import os - - -def _hy_import_file(fd, name): - m = forge_module( - name, - fd, - tokenize(open(fd, 'r').read()) - ) - return m - - -class HyFinder(object): - def is_package(self, fullname): - dirpath = "/".join(fullname.split(".")) - for pth in sys.path: - pth = os.path.abspath(pth) - composed_path = "%s/%s/__init__.hy" % (pth, dirpath) - if os.path.exists(composed_path): - return True - return False - - def find_on_path(self, fullname): - fls = ["%s/__init__.hy", "%s.hy"] - dirpath = "/".join(fullname.split(".")) - - for pth in sys.path: - pth = os.path.abspath(pth) - for fp in fls: - composed_path = fp % ("%s/%s" % (pth, dirpath)) - if os.path.exists(composed_path): - return composed_path - - -class MetaLoader(HyFinder): - def load_module(self, fullname): - if fullname in sys.modules: - return sys.modules[fullname] - - pth = self.find_on_path(fullname) - if pth is None: - return - - sys.modules[fullname] = None - mod = _hy_import_file(pth, fullname) - - ispkg = self.is_package(fullname) - - mod.__file__ = pth - mod.__loader__ = self - mod.__name__ = fullname - - if ispkg: - mod.__path__ = [] - mod.__package__ = fullname - else: - mod.__package__ = fullname.rpartition('.')[0] - - sys.modules[fullname] = mod - return mod - - -class MetaImporter(HyFinder): - def find_module(self, fullname, path=None): - pth = self.find_on_path(fullname) - if pth is None: - return - return MetaLoader() - - -sys.meta_path.append(MetaImporter()) -sys.path.insert(0, "") diff --git a/hy/lang/internals.py b/hy/lang/internals.py deleted file mode 100644 index 289fa43..0000000 --- a/hy/lang/internals.py +++ /dev/null @@ -1,23 +0,0 @@ -# - - -class HYNamespaceCOW(object): - def __init__(self, inmutable_copy): - self._inmute = inmutable_copy - self._mute = {} - - def __contains__(self, key): - if key in self._mute: - return True - return key in self._inmute - - def __getitem__(self, key): - if key in self._mute: - return self._mute[key] - return self._inmute[key] - - def __setitem__(self, key, value): - self._mute[key] = value - - def clone(self): - return HYNamespaceCOW(self) diff --git a/hy/lang/list.py b/hy/lang/list.py deleted file mode 100644 index 48be89a..0000000 --- a/hy/lang/list.py +++ /dev/null @@ -1,15 +0,0 @@ -from hy.lang.hyobj import HYObject - - -class HYList(HYObject, list): - def __init__(self, nodes): - [self.append(node) for node in nodes] - - def get_children(self): - return self - - def eval(self, ln, *args, **kwargs): - ret = [] - for node in self.get_children(): - ret.append(node.eval(ln, *args, **kwargs)) - return ret diff --git a/hy/lang/map.py b/hy/lang/map.py deleted file mode 100644 index c3032f7..0000000 --- a/hy/lang/map.py +++ /dev/null @@ -1,15 +0,0 @@ -from hy.lang.hyobj import HYObject - - -class HYMap(HYObject, dict): - def __init__(self, nodes): - for node in nodes: - self[node] = nodes[node] - - def get_children(self): - ret = [] - for v in self.keys(): - ret.append(v) - for v in self.values(): - ret.append(v) - return ret diff --git a/hy/lang/natives.py b/hy/lang/natives.py deleted file mode 100644 index 07df64e..0000000 --- a/hy/lang/natives.py +++ /dev/null @@ -1,137 +0,0 @@ -from hy.lex.tokenize import tokenize as _hy_tok -import sys - - -def _print(*args, **kwargs): - sys.stdout.write(" ".join([str(x) for x in args]) + "\n") - sys.stdout.flush() - - -def _read(*args): - return sys.stdin.readline() - - -def _lex(*args): - ret = [] - for thing in args: - ret.append(_hy_tok(thing)) - return ret - - -def _foreach(*args): - a = args[0] - for arg in a: - args[1](arg) - - -def _get(*args): - m = args[0] - k = args[1] - if k in m: - return m[k] - else: - if len(args) > 2: - return args[2] - raise KeyError("No such key `%s` in map." % (k)) - - -def _plus(*args): - ret = args[0] - args = args[1:] - for x in args: - ret += x - return ret - - -def _subtract(*args): - ret = args[0] - args = args[1:] - for x in args: - ret -= x - return ret - - -def _mult(*args): - ret = args[0] - args = args[1:] - for x in args: - ret *= x - return ret - - -def _divide(*args): - ret = args[0] - args = args[1:] - for x in args: - ret /= x - return ret - - -def _eq(*args): - car, cdr = args[0], args[1:] - for arg in cdr: - if arg != car: - return False - return True - - -def _ne(*args): - seen = set() - for arg in args: - if arg in seen: - return False - seen.add(arg) - return True - - -def _gt(*args): - for i in range(1, len(args)): - if not (args[i - 1] > args[i]): - return False - return True - - -def _ge(*args): - for i in range(1, len(args)): - if not (args[i - 1] >= args[i]): - return False - return True - - -def _le(*args): - for i in range(1, len(args)): - if not (args[i - 1] <= args[i]): - return False - return True - - -def _lt(*args): - for i in range(1, len(args)): - if not (args[i - 1] < args[i]): - return False - return True - - -def _throw(*args): - raise args[0] - - -natives = { - "print": _print, - "puts": _print, - "+": _plus, - "-": _subtract, - "*": _mult, - "/": _divide, - "==": _eq, - ">": _gt, - ">=": _ge, - "<": _lt, - "<=": _le, - "!=": _ne, - "lex": _lex, - "read": _read, - "foreach": _foreach, - "get": _get, - "throw": _throw -} diff --git a/hy/lang/number.py b/hy/lang/number.py deleted file mode 100644 index 348e094..0000000 --- a/hy/lang/number.py +++ /dev/null @@ -1,10 +0,0 @@ -from hy.lang.hyobj import HYObject - - -class HYNumber(HYObject, int): - def __new__(cls, number, *args, **kwargs): - number = int(number) - return super(HYNumber, cls).__new__(cls, number) - - def eval(self, lns, *args, **kwargs): - return int(self) diff --git a/hy/lang/string.py b/hy/lang/string.py deleted file mode 100644 index 7f90ece..0000000 --- a/hy/lang/string.py +++ /dev/null @@ -1,17 +0,0 @@ -from hy.lang.hyobj import HYObject -import sys - - -if sys.version_info[0] >= 3: - _str_type = str -else: - _str_type = unicode - - -class HYString(HYObject, _str_type): - def __new__(cls, value): - obj = _str_type.__new__(cls, value) - return obj - - def eval(self, ln, *args, **kwargs): - return str(self) diff --git a/hy/lang/symbol.py b/hy/lang/symbol.py deleted file mode 100644 index dca8919..0000000 --- a/hy/lang/symbol.py +++ /dev/null @@ -1,10 +0,0 @@ -from hy.lang.string import HYString - - -class HYSymbol(HYString): - def __init__(self, string): - self += string - - def eval(self, lns, *args, **kwargs): - obj = self.lookup(lns, self) - return obj diff --git a/hy/lex/__init__.py b/hy/lex/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hy/lex/errors.py b/hy/lex/errors.py deleted file mode 100644 index fc9ae07..0000000 --- a/hy/lex/errors.py +++ /dev/null @@ -1,2 +0,0 @@ -class LexException(Exception): - pass diff --git a/hy/lex/machine.py b/hy/lex/machine.py deleted file mode 100644 index 125c527..0000000 --- a/hy/lex/machine.py +++ /dev/null @@ -1,29 +0,0 @@ -class Machine(object): - def __init__(self, state): - # print "New machine: %s" % (state) - self.nodes = [] - self.state = state(self) - self.state.enter() - self.line = 1 - self.column = 1 - - def add_node(self, node): - node.line = self.line - node.column = self.column - self.nodes.append(node) - - def process(self, buf): - for i in range(0, len(buf)): - char = buf[i] - - self.column += 1 - if char == "\n": - self.line += 1 - self.column = 0 - - nx = self.state.process(char) - if nx: - # print "New state: %s" % (nx) - self.state.exit() - self.state = nx(self) - self.state.enter() diff --git a/hy/lex/states.py b/hy/lex/states.py deleted file mode 100644 index cdc34f6..0000000 --- a/hy/lex/states.py +++ /dev/null @@ -1,250 +0,0 @@ -from hy.lang.expression import HYExpression -from hy.lex.errors import LexException -from hy.lang.string import HYString -from hy.lang.symbol import HYSymbol -from hy.lang.number import HYNumber -from hy.lex.machine import Machine -from hy.lang.list import HYList -from hy.lang.bool import HYBool -from hy.lang.map import HYMap - - -WHITESPACE = [" ", "\t", "\n", "\r"] - - -def _resolve_atom(value, self): - def _mangle(obj): - obj.line = self.machine.line - obj.column = self.machine.column - return obj - - if value == "true": - return _mangle(HYBool(True)) - elif value == "false": - return _mangle(HYBool(False)) - - try: - return _mangle(HYNumber(value)) - except ValueError: - pass - - # LISP Variants tend to use *foo* for constants. Let's make it - # the more pythonic "FOO" - if value.startswith("*") and value.endswith("*") and len(value) > 1: - value = value.upper()[1:-1] - - # LISP Variants have a tendency to use "-" in symbols n' shit. - if value != "-": # we need subtraction - value = value.replace("-", "_") - - return _mangle(HYSymbol(value)) - - -class State(object): - def __init__(self, machine): - self.machine = machine - self.sub_machine = None - - def enter(self): - pass - - def exit(self): - pass - - def sub(self, machine): - self.sub_machine = Machine(machine) - - def process(self, x): - if self.sub_machine: - self.sub_machine.process(x) - idle = type(self.sub_machine.state) == Idle - if idle: - self.nodes += self.sub_machine.nodes - self.sub_machine = None - return - - return self.p(x) - - -class Comment(State): - def p(self, x): - if x == '\n': - return Idle - - -class Idle(State): - def p(self, x): - if x == "#": - return HashExpression - if x == ";": - return Comment - if x == "(": - return Expression - if x in WHITESPACE: - return - - raise LexException("Unknown char: %s" % (x)) - - -class HashExpression(State): - def p(self, x): - if x == "!": - return Comment - - raise LexException("Unknwon Hash modifier - %s" % (x)) - - -class Expression(State): - def enter(self): - self.nodes = HYExpression([]) - self.bulk = "" - - def exit(self): - if self.bulk: - self.nodes.append(_resolve_atom(self.bulk, self)) - - self.machine.add_node(self.nodes) - - def commit(self): - if self.bulk.strip() != "": - self.nodes.append(_resolve_atom(self.bulk, self)) - self.bulk = "" - - def p(self, x): - if x == ")": - return Idle - if x in WHITESPACE: - self.commit() - return - if x == "\"": - self.sub(String) - return - if x == "(": - self.sub(Expression) - return - if x == "[": - self.sub(List) - return - if x == "{": - self.sub(Map) - return - if x == ";": - self.sub(Comment) - return - self.bulk += x - - -class List(State): - def enter(self): - self.nodes = HYList([]) - self.bulk = "" - - def exit(self): - if self.bulk: - self.nodes.append(_resolve_atom(self.bulk, self)) - self.machine.add_node(self.nodes) - - def commit(self): - if self.bulk.strip() != "": - self.nodes.append(_resolve_atom(self.bulk, self)) - self.bulk = "" - - def p(self, x): - if x == "]": - return Idle - if x in WHITESPACE: - self.commit() - return - if x == "\"": - self.sub(String) - return - if x == "[": - self.sub(List) - return - if x == "(": - self.sub(Expression) - return - if x == "{": - self.sub(Map) - return - if x == ";": - self.sub(Comment) - return - self.bulk += x - - -class Map(State): - def enter(self): - self.nodes = [] - self.bulk = "" - - def exit(self): - if self.bulk: - self.nodes.append(_resolve_atom(self.bulk, self)) - - if (len(self.nodes) % 2) != 0: - raise LexException("Hash map is screwed up") - - ret = HYMap({}) - i = iter(self.nodes) - hmap = zip(i, i) - for key, val in hmap: - ret[key] = val - self.machine.add_node(ret) - - def commit(self): - if self.bulk.strip() != "": - self.nodes.append(_resolve_atom(self.bulk, self)) - self.bulk = "" - - def p(self, x): - if x == "}": - return Idle - if x in WHITESPACE: - self.commit() - return - if x == "\"": - self.sub(String) - return - if x == "[": - self.sub(List) - return - if x == "{": - self.sub(Map) - return - if x == "(": - self.sub(Expression) - return - if x == ";": - self.sub(Comment) - return - self.bulk += x - - -class String(State): - magic = {"n": "\n", "t": "\t", "\\": "\\", "\"": "\""} - - def enter(self): - self.buf = "" - self.esc = False - - def exit(self): - self.machine.add_node(HYString(self.buf)) - - def p(self, x): - if x == "\\": - self.esc = True - return - - if x == "\"" and not self.esc: - return Idle - - if self.esc and x not in self.magic: - raise LexException("Unknown escape: \\%s" % (x)) - - elif self.esc: - x = self.magic[x] - - self.esc = False - - self.buf += x diff --git a/hy/lex/tokenize.py b/hy/lex/tokenize.py deleted file mode 100644 index 19f3e53..0000000 --- a/hy/lex/tokenize.py +++ /dev/null @@ -1,11 +0,0 @@ -from hy.lex.machine import Machine -from hy.lex.states import Idle -from hy.lex.errors import LexException - - -def tokenize(buff): - m = Machine(Idle) - m.process(buff) - if type(m.state) != Idle: - raise LexException("Reached end of file before we were done parsing") - return m.nodes diff --git a/maint-scripts/deploy.sh b/maint-scripts/deploy.sh deleted file mode 100755 index 8ad2205..0000000 --- a/maint-scripts/deploy.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -echo "Pulling repo." -ssh metatron.pault.ag "cd /srv/www/uwsgi/app/hy; git pull" -ssh -l www metatron.pault.ag "kill-apps; start-apps" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 62497ed..0000000 --- a/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -flake8 -nose -coverage diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 5172a3c..0000000 --- a/setup.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[nosetests] -detailed-errors=1 -with-coverage=1 -cover-package=hy -nocapture=1 diff --git a/setup.py b/setup.py deleted file mode 100755 index 19f39bb..0000000 --- a/setup.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -from setuptools import setup - -long_description = """This thing does stuff and -things with other things until things looks like other -things. """ - -appname = "hy" -version = "0.8.2" - -setup(**{ - "name": appname, - "version": version, - "packages": [ - 'hy', - 'hy.lang', - 'hy.lex', - 'hy.compiler' - ], - "author": "Paul Tagliamonte", - "author_email": "tag@pault.ag", - "long_description": long_description, - "description": 'lisp and python love eachother', - "license": "Expat", - "url": "http://hy.pault.ag/", - "platforms": ['any'], - "scripts": [ - "bin/hython", - "bin/bhython" - ] -}) diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/lang/__init__.py b/tests/lang/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/lang/colls.hy b/tests/lang/colls.hy deleted file mode 100644 index 3369b0e..0000000 --- a/tests/lang/colls.hy +++ /dev/null @@ -1,5 +0,0 @@ -(defn test-map-index [] - ({"foo" "bar"} "foo")) - -(defn test-list-index [] - (["first" "second"] 1)) diff --git a/tests/lang/foo.hy b/tests/lang/foo.hy deleted file mode 100644 index 756cfff..0000000 --- a/tests/lang/foo.hy +++ /dev/null @@ -1,4 +0,0 @@ -; vim: tabstop=2 expandtab shiftwidth=2 softtabstop=2 filetype=lisp - -(defn square [arg] - (* arg arg)) diff --git a/tests/lang/kwargs.hy b/tests/lang/kwargs.hy deleted file mode 100644 index d0c98b2..0000000 --- a/tests/lang/kwargs.hy +++ /dev/null @@ -1,9 +0,0 @@ -; vim: tabstop=2 expandtab shiftwidth=2 softtabstop=2 filetype=lisp - -(import "tests.lang.test_kwargs") - -(defn kiwi [] - (kwapply (tests.lang.test_kwargs.shim "one" "two") { - "three" "three" - "four" "four" - })) diff --git a/tests/lang/test_expression.py b/tests/lang/test_expression.py deleted file mode 100644 index f50be72..0000000 --- a/tests/lang/test_expression.py +++ /dev/null @@ -1,34 +0,0 @@ -from hy.lex.tokenize import tokenize -from hy.lang.expression import HYExpression - -code = """ -(+ 1 1) ; this is a test. -(fn foo bar) ; this is a test. -""" - - -def test_basics(): - """Test the basics""" - assert { - "function": "fn", - "args": [ - "one" - ] - } == HYExpression(["fn", "one"]).get_invocation() - - -def test_fn_split(): - """Test if we can get a statement something right.""" - one, two = tokenize(code) - assert one.get_invocation() == { - "function": "+", - "args": [ - 1, 1 - ] - } - assert two.get_invocation() == { - "function": "fn", - "args": [ - "foo", "bar" - ] - } diff --git a/tests/lang/test_import.py b/tests/lang/test_import.py deleted file mode 100644 index 00f24e7..0000000 --- a/tests/lang/test_import.py +++ /dev/null @@ -1,13 +0,0 @@ -import hy.lang.importer -import tests.lang.foo - - -def square(x): - return x * x - - -def test_squares_properly(): - assert tests.lang.foo.square - assert tests.lang.foo.square(2) == 4 - for x in range(0, 10): - tests.lang.foo.square(x) diff --git a/tests/lang/test_kwargs.py b/tests/lang/test_kwargs.py deleted file mode 100644 index 1462c54..0000000 --- a/tests/lang/test_kwargs.py +++ /dev/null @@ -1,18 +0,0 @@ -import hy.lang.importer - - -def shim(*args, **kwargs): - return {"a": args, - "k": kwargs} - - -def test_kwargs_proper(): - import tests.lang.kwargs - val = tests.lang.kwargs.kiwi() - assert val == { - "a": ('one', 'two'), - "k": { - "three": "three", - "four": "four" - } - } diff --git a/tests/lang/test_map.py b/tests/lang/test_map.py deleted file mode 100644 index b94604a..0000000 --- a/tests/lang/test_map.py +++ /dev/null @@ -1,15 +0,0 @@ -from hy.lex.tokenize import tokenize - -def test_map_lex(): - assert tokenize('(def {"foo" "bar"})') == [['def', {'foo': 'bar'}]] - - -def test_map_lex(): - assert tokenize('(def {"foo" "bar" "baz" {"one" "two"}})') == [ - ['def', { - 'foo': 'bar', - 'baz': { - "one": "two" - } - }] - ] diff --git a/tests/lang/test_types_as_fn.py b/tests/lang/test_types_as_fn.py deleted file mode 100644 index d942d5a..0000000 --- a/tests/lang/test_types_as_fn.py +++ /dev/null @@ -1,7 +0,0 @@ -import tests.lang.colls - -def test_map_index(): - assert tests.lang.colls.test_map_index() == "bar" - -def test_list_index(): - assert tests.lang.colls.test_list_index() == "second" diff --git a/tests/lexer/__init__.py b/tests/lexer/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/lexer/test_basic_lexing.py b/tests/lexer/test_basic_lexing.py deleted file mode 100644 index 86e8fcd..0000000 --- a/tests/lexer/test_basic_lexing.py +++ /dev/null @@ -1,80 +0,0 @@ -from hy.lex.tokenize import tokenize - - -def test_simple_tokenize(): - """Checking we can still handle something simple.""" - - assert [["+", 1, 1]] == tokenize("(+ 1 1)") - - -def test_double_tokenize(): - """Checking if we can lex two things at once.""" - - assert [ - ["+", 1, 2], - ["-", 1, 1] - ] == tokenize("(+ 1 2) (- 1 1)") - - -def test_simple_recurse(): - """ Test recursion """ - assert [ - ['fn', - 'one', - ['fn', 'two'], - ] - ] == tokenize("(fn one (fn two))") - - -def test_mid_recurse(): - """ Test some crazy recursion """ - - assert [ - ['fn', - 'one', - ['fn', 'two'], - ['fn', 'three'], - ] - ] == tokenize("(fn one (fn two)(fn three))") - - -def test_mid_recurse_comment(): - """ Test some crazy recursion with a comment """ - - assert [ - ['fn', - 'one', - ['fn', 'two'], - ['fn', 'three'], - ] - ] == tokenize(""" -(fn one ; this is a test - (fn two)(fn three)) ; and so is this -""") - - -def test_full_recurse(): - """ Test something we could see for real """ - assert [ - ['fn', - 'el', - ['+', - 1, - 2, - ['==', - 1, - 20 - ], - ['-', - 1, - 1 - ], - ] - ], - ['fn1', 'foo', 'bar'] - ] == tokenize("(fn el (+ 1 2 (== 1 20) (- 1 1)))(fn1 foo bar)") - - -def test_string(): - """ Lex a lone string """ - assert ['"a string"'] == tokenize('"a string"') diff --git a/tests/lexer/test_list_lexing.py b/tests/lexer/test_list_lexing.py deleted file mode 100644 index 51fe318..0000000 --- a/tests/lexer/test_list_lexing.py +++ /dev/null @@ -1,44 +0,0 @@ -from hy.lex.tokenize import tokenize - - -def test_list_lex(): - """test basic lexing of lists""" - fn = tokenize("(fn [1 2 3 4])")[0] - assert fn == [ - "fn", [1, 2, 3, 4] - ] - - -def test_list_recurse(): - """ test we can recurse lists """ - fn = tokenize("(fn [1 2 3 4 [5 6 7]])")[0] - assert fn == [ - "fn", [1, 2, 3, 4, [5, 6, 7]] - ] - - -def test_double_rainbow(): - """ DOUBLE LISTS """ - fn = tokenize("(fn [1 2 3 4] [5 6 7])")[0] - assert fn == [ - "fn", [1, 2, 3, 4], [5, 6, 7] - ] - - -def test_string_in_list(): - """ String in list """ - fn = tokenize('(fn [1 2 "three four" 5])')[0] - assert fn == [ - "fn", [1, 2, "three four", 5] - ] - - -def test_list_recurse_with_comment(): - """ test we can recurse lists """ - fn = tokenize(""" -(fn [1 ; this is a test - 2 3 4 [5 6 7]]) -""")[0] - assert fn == [ - "fn", [1, 2, 3, 4, [5, 6, 7]] - ] diff --git a/tox.ini b/tox.ini deleted file mode 100644 index ba3898e..0000000 --- a/tox.ini +++ /dev/null @@ -1,7 +0,0 @@ -[tox] -envlist = py27,pypy,py32 -[testenv] -commands = nosetests -deps = - nose - setuptools