物管理前端
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 line
2.5 KiB

  1. var l={};function c(t,e){for(var n=0;n<e.length;n++)l[e[n]]=t}var f=["true","false"],k=["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],h=["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","nl","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"];c("atom",f);c("keyword",k);c("builtin",h);function d(t,e){if(t.eatSpace())return null;var n=t.sol(),r=t.next();if(r==="\\")return t.next(),null;if(r==="'"||r==='"'||r==="`")return e.tokens.unshift(a(r,r==="`"?"quote":"string")),u(t,e);if(r==="#")return n&&t.eat("!")?(t.skipToEnd(),"meta"):(t.skipToEnd(),"comment");if(r==="$")return e.tokens.unshift(p),u(t,e);if(r==="+"||r==="=")return"operator";if(r==="-")return t.eat("-"),t.eatWhile(/\w/),"attribute";if(r=="<"){if(t.match("<<"))return"operator";var i=t.match(/^<-?\s*(?:['"]([^'"]*)['"]|([^'"\s]*))/);if(i)return e.tokens.unshift(m(i[1]||i[2])),"string.special"}if(/\d/.test(r)&&(t.eatWhile(/\d/),t.eol()||!/\w/.test(t.peek())))return"number";t.eatWhile(/[\w-]/);var s=t.current();return t.peek()==="="&&/\w+/.test(s)?"def":l.hasOwnProperty(s)?l[s]:null}function a(t,e){var n=t=="("?")":t=="{"?"}":t;return function(r,i){for(var s,o=!1;(s=r.next())!=null;){if(s===n&&!o){i.tokens.shift();break}else if(s==="$"&&!o&&t!=="'"&&r.peek()!=n){o=!0,r.backUp(1),i.tokens.unshift(p);break}else{if(!o&&t!==n&&s===t)return i.tokens.unshift(a(t,e)),u(r,i);if(!o&&/['"]/.test(s)&&!/['"]/.test(t)){i.tokens.unshift(g(s,"string")),r.backUp(1);break}}o=!o&&s==="\\"}return e}}function g(t,e){return function(n,r){return r.tokens[0]=a(t,e),n.next(),u(n,r)}}var p=function(t,e){e.tokens.length>1&&t.eat("$");var n=t.next();return/['"({]/.test(n)?(e.tokens[0]=a(n,n=="("?"quote":n=="{"?"def":"string"),u(t,e)):(/\d/.test(n)||t.eatWhile(/\w/),e.tokens.shift(),"def")};function m(t){return function(e,n){return e.sol()&&e.string==t&&n.tokens.shift(),e.skipToEnd(),"string.special"}}function u(t,e){return(e.tokens[0]||d)(t,e)}const w={name:"shell",startState:function(){return{tokens:[]}},token:function(t,e){return u(t,e)},languageData:{autocomplete:f.concat(k,h),closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}};export{w as shell};