@visbot/codemirror-avs
Version:
Winamp AVS mode for CodeMirror 5
3 lines (2 loc) • 6.77 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("codemirror")):"function"==typeof define&&define.amd?define(["codemirror"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CodeMirror)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e);
/*! codemirror-avs | MIT License | github.com/visbot/codemirror-avs */function i(e,t,n,i,a,r){this.indented=e,this.column=t,this.type=n,this.info=i,this.align=a,this.prev=r}function a(e,t,n,a){let r=e.indented;return e.context&&"statement"==e.context.type&&"statement"!=n&&(r=e.context.indented),e.context=new i(r,t,n,a,null,e.context)}function r(e){let t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function s(e,t,n){return"variable"==t.prevToken||"type"==t.prevToken||(!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||(!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0))}function o(e){for(;;){if(!e||"top"==e.type)return!0;if("}"==e.type&&"namespace"!=e.prev.info)return!1;e=e.prev}}function l(e){let t={},n=e.split(" ");for(let e=0;e<n.length;++e)t[n[e]]=!0;return t}function u(e,t){return"function"==typeof e?e(t):Object.prototype.propertyIsEnumerable.call(e,t)}function d(e,t){"string"==typeof e&&(e=[e]);let i=[];function a(e){if(e)for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&i.push(t)}a(t.variables),a(t.builtin),a(t.constants),i.length&&(t.helperType=e[0],n.default.registerHelper("hintWords",e[0],i));for(let i=0;i<e.length;++i)n.default.defineMIME(e[i],t)}n.default.defineMode("avs",(function(e,t){let l,d,f=e.indentUnit,c=t.statementIndentUnit||f,p=t.dontAlignCalls,m=t.keywords||{},b=t.builtin||{},v=t.blockKeywords||{},y=t.defKeywords||{},h=t.types||{},x=t.constants||{},w=t.variables||{},g=t.hooks||{},k=t.multiLineStrings,z=!1!==t.indentStatements,S=t.namespaceSeparator,C=t.isPunctuationChar||/[[\]{}(),;:.]/,O=t.numberStart||/[\d.]/,$=t.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,I=t.isOperatorChar||/[+\-*&%=<>!?|/]/,L=t.isIdentifierChar||/[\w$_\xa1-\uffff]/;function T(e,t){let n=e.next();if(g[n]){let i=g[n](e,t);if(!1!==i)return i}if('"'==n||"'"==n)return t.tokenize=(i=n,function(e,t){let n,a=!1,r=!1;for(;null!=(n=e.next());){if(n==i&&!a){r=!0;break}a=!a&&"\\"==n}return(r||!a&&!k)&&(t.tokenize=null),"string"}),t.tokenize(e,t);var i;if(C.test(n))return l=n,null;if(O.test(n)){if(e.backUp(1),e.match($))return"number";e.next()}if("/"==n){if(e.eat("*"))return t.tokenize=E,E(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(I.test(n))return"operator";if(e.eatWhile(L),S)for(;e.match(S);)e.eatWhile(L);let a=e.current();return u(m,a)?(u(v,a)&&(l="newstatement"),u(y,a)&&(d=!0),"keyword"):u(h,a)?"type":u(b,a)?(u(v,a)&&(l="newstatement"),"builtin"):u(w,a)?"variable":u(x,a)?"variable-2":"keyword"}function E(e,t){let n,i=!1;for(;n=e.next();){if("/"==n&&i){t.tokenize=null;break}i="*"==n}return"comment"}function q(e,n){t.typeFirstDefinitions&&e.eol()&&o(n.context)&&(n.typeAtEndOfLine=s(e,n,e.pos))}return{startState:function(e){return{tokenize:null,context:new i((e||0)-f,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,n){let i=n.context;if(e.sol()&&(null==i.align&&(i.align=!1),n.indented=e.indentation(),n.startOfLine=!0),e.eatSpace())return q(e,n),null;l=d=null;let u=(n.tokenize||T)(e,n);if("comment"==u||"meta"==u)return u;if(null==i.align&&(i.align=!0),";"==l||":"==l||","==l&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==n.context.type;)r(n);else if("{"==l)a(n,e.column(),"}");else if("["==l)a(n,e.column(),"]");else if("("==l)a(n,e.column(),")");else if("}"==l){for(;"statement"==i.type;)i=r(n);for("}"==i.type&&(i=r(n));"statement"==i.type;)i=r(n)}else l==i.type?r(n):z&&(("}"==i.type||"top"==i.type)&&";"!=l||"statement"==i.type&&"newstatement"==l)&&a(n,e.column(),"statement",e.current());if("variable"==u&&("def"==n.prevToken||t.typeFirstDefinitions&&s(e,n,e.start)&&o(n.context)&&e.match(/^\s*\(/,!1))&&(u="def"),g.token){let t=g.token(e,n,u);void 0!==t&&(u=t)}return"def"==u&&!1===t.styleDefs&&(u="variable"),n.startOfLine=!1,n.prevToken=d?"def":u||l,q(e,n),u},indent:function(e,i){if(e.tokenize!=T&&null!=e.tokenize||e.typeAtEndOfLine)return n.default.Pass;let a=e.context,r=i&&i.charAt(0);if("statement"==a.type&&"}"==r&&(a=a.prev),t.dontIndentStatements)for(;"statement"==a.type&&t.dontIndentStatements.test(a.info);)a=a.prev;if(g.indent){let t=g.indent(e,a,i);if("number"==typeof t)return t}let s=r==a.type,o=a.prev&&"switch"==a.prev.info;if(t.allmanIndentation&&/[{(]/.test(r)){for(;"top"!=a.type&&"}"!=a.type;)a=a.prev;return a.indented}return"statement"==a.type?a.indented+("{"==r?0:c):!a.align||p&&")"==a.type?")"!=a.type||s?a.indented+(s?0:f)+(s||!o||/^(?:case|default)\b/.test(i)?0:f):a.indented+c:a.column+(s?0:1)},blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//"}}));let f=l("abs sin cos tan asin acos atan atan2 sqr sqrt invsqrt pow exp log log10 floor ceil sign min max sigmoid rand band bor bnot if assign exec2 equal above below getosc getspec gettime getkbmouse megabuf gmegabuf loop"),c=l("$e $phi $pi $E $PHI $PI"),p=!1;d(["avs/bump"],{name:"avs",variables:l("x y isBeat isLBeat bi"),builtin:f,constants:c,indentSwitch:p}),d(["avs/color-modifier","avs/cm"],{name:"avs",variables:l("red green blue"),builtin:f,constants:c,indentSwitch:p}),d(["avs/dynamic-distance-modifier","avs/ddm"],{name:"avs",variables:l("d"),builtin:f,constants:c,indentSwitch:p}),d(["avs/dynamic-movement","avs/dm"],{name:"avs",variables:l("x y w h r d alpha"),builtin:f,constants:c,indentSwitch:p}),d(["avs/dynamic-shift","avs/ds"],{name:"avs",variables:l("x y w h b alpha"),builtin:f,constants:c,indentSwitch:p}),d(["avs/effect-list","avs/el"],{name:"avs",variables:l("enabled beat clear alphain alphaout w h"),builtin:f,constants:c,indentSwitch:p}),d(["avs/movement","avs/mov"],{name:"avs",variables:l("r d x y sw sh"),builtin:f,constants:c,indentSwitch:p}),d(["avs/superscope","avs/ssc"],{name:"avs",variables:l("n x y i v b red green blue linesize skip drawmode w h"),builtin:f,constants:c,indentSwitch:p}),d(["avs/texer2","avs/t2"],{name:"avs",variables:l("n w h i x y v b iw ih sizex sizey red green blue skip"),builtin:f,constants:c,indentSwitch:p}),d(["avs/triangle","avs/tr"],{name:"avs",variables:l("n x1 x2 x3 y1 y2 y3 z1 skip red1 blue1 green1 w h zbclear zbuf"),builtin:f,constants:c,indentSwitch:p}),d(["text/x-avs","avs"],{name:"avs",variables:l("alpha alphain alphaout b beat bi blue blue1 clear d drawmode enabled green green1 h i ih isBeat isLBeat iw linesize n r red red1 sh sizex sizey skip sw v w x x1 x2 x3 y y1 y2 y3 z1 zbclear zbuf"),builtin:f,constants:c,indentSwitch:p})}));