You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
6.2 KiB
1 lines
6.2 KiB
var E="builtin",s="comment",g="string",x="symbol",c="atom",b="number",v="bracket",S=2;function w(e){for(var t={},a=e.split(" "),r=0;r<a.length;++r)t[a[r]]=!0;return t}var k=w("λ case-lambda call/cc class cond-expand define-class define-values exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"),q=w("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless");function Q(e,t,a){this.indent=e,this.type=t,this.prev=a}function u(e,t,a){e.indentStack=new Q(t,a,e.indentStack)}function C(e){e.indentStack=e.indentStack.prev}var $=new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i),R=new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i),U=new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i),I=new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i);function W(e){return e.match($)}function z(e){return e.match(R)}function m(e,t){return t===!0&&e.backUp(1),e.match(I)}function B(e){return e.match(U)}function y(e,t){for(var a,r=!1;(a=e.next())!=null;){if(a==t.token&&!r){t.state.mode=!1;break}r=!r&&a=="\\"}}const T={name:"scheme",startState:function(){return{indentStack:null,indentation:0,mode:!1,sExprComment:!1,sExprQuote:!1}},token:function(e,t){if(t.indentStack==null&&e.sol()&&(t.indentation=e.indentation()),e.eatSpace())return null;var a=null;switch(t.mode){case"string":y(e,{token:'"',state:t}),a=g;break;case"symbol":y(e,{token:"|",state:t}),a=x;break;case"comment":for(var r,p=!1;(r=e.next())!=null;){if(r=="#"&&p){t.mode=!1;break}p=r=="|"}a=s;break;case"s-expr-comment":if(t.mode=!1,e.peek()=="("||e.peek()=="[")t.sExprComment=0;else{e.eatWhile(/[^\s\(\)\[\]]/),a=s;break}default:var n=e.next();if(n=='"')t.mode="string",a=g;else if(n=="'")e.peek()=="("||e.peek()=="["?(typeof t.sExprQuote!="number"&&(t.sExprQuote=0),a=c):(e.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/),a=c);else if(n=="|")t.mode="symbol",a=x;else if(n=="#")if(e.eat("|"))t.mode="comment",a=s;else if(e.eat(/[tf]/i))a=c;else if(e.eat(";"))t.mode="s-expr-comment",a=s;else{var i=null,o=!1,f=!0;e.eat(/[ei]/i)?o=!0:e.backUp(1),e.match(/^#b/i)?i=W:e.match(/^#o/i)?i=z:e.match(/^#x/i)?i=B:e.match(/^#d/i)?i=m:e.match(/^[-+0-9.]/,!1)?(f=!1,i=m):o||e.eat("#"),i!=null&&(f&&!o&&e.match(/^#[ei]/i),i(e)&&(a=b))}else if(/^[-+0-9.]/.test(n)&&m(e,!0))a=b;else if(n==";")e.skipToEnd(),a=s;else if(n=="("||n=="["){for(var l="",d=e.column(),h;(h=e.eat(/[^\s\(\[\;\)\]]/))!=null;)l+=h;l.length>0&&q.propertyIsEnumerable(l)?u(t,d+S,n):(e.eatSpace(),e.eol()||e.peek()==";"?u(t,d+1,n):u(t,d+e.current().length,n)),e.backUp(e.current().length-1),typeof t.sExprComment=="number"&&t.sExprComment++,typeof t.sExprQuote=="number"&&t.sExprQuote++,a=v}else n==")"||n=="]"?(a=v,t.indentStack!=null&&t.indentStack.type==(n==")"?"(":"[")&&(C(t),typeof t.sExprComment=="number"&&--t.sExprComment==0&&(a=s,t.sExprComment=!1),typeof t.sExprQuote=="number"&&--t.sExprQuote==0&&(a=c,t.sExprQuote=!1))):(e.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/),k&&k.propertyIsEnumerable(e.current())?a=E:a="variable")}return typeof t.sExprComment=="number"?s:typeof t.sExprQuote=="number"?c:a},indent:function(e){return e.indentStack==null?e.indentation:e.indentStack.indent},languageData:{closeBrackets:{brackets:["(","[","{",'"']},commentTokens:{line:";;"}}};export{T as scheme};
|