UNPKG

@loftysoul/soul

Version:

The professional Content Management System, based ghost

38 lines (37 loc) 6.23 kB
(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})((function(e){"use strict" e.defineMode("julia",(function(t,n){function r(e,t){return void 0===t&&(t="\\b"),new RegExp("^(("+e.join(")|(")+"))"+t)}var i=n.operators||r(["[<>]:","[<>=]=","<<=?",">>>?=?","=>","->","\\/\\/","[\\\\%*+\\-<>!=\\/^|&\\u00F7\\u22BB]=?","\\?","\\$","~",":","\\u00D7","\\u2208","\\u2209","\\u220B","\\u220C","\\u2218","\\u221A","\\u221B","\\u2229","\\u222A","\\u2260","\\u2264","\\u2265","\\u2286","\\u2288","\\u228A","\\u22C5","\\b(in|isa)\\b(?!.?\\()"],""),a=n.delimiters||/^[;,()[\]{}]/,o=n.identifiers||/^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/,s=r(["\\\\[0-7]{1,3}","\\\\x[A-Fa-f0-9]{1,2}","\\\\[abefnrtv0%?'\"\\\\]","([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"],"'"),c=["if","else","elseif","while","for","begin","let","end","do","try","catch","finally","return","break","continue","global","local","const","export","import","importall","using","function","where","macro","module","baremodule","struct","type","mutable","immutable","quote","typealias","abstract","primitive","bitstype"],u=["true","false","nothing","NaN","Inf"] e.registerHelper("hintWords","julia",c.concat(u)) var f=r(["begin","function","type","struct","immutable","let","macro","for","while","quote","if","else","elseif","try","finally","catch","do"]),l=r(["end","else","elseif","catch","finally"]),m=r(c),p=r(u),d=/^@[_A-Za-z][\w]*/,h=/^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,k=/^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/ function b(e){return e.nestedArrays>0}function v(e,t){return void 0===t&&(t=0),e.scopes.length<=t?null:e.scopes[e.scopes.length-(t+1)]}function F(e,t){if(e.match(/^#=/,!1))return t.tokenize=x,t.tokenize(e,t) var n=t.leavingExpr if(e.sol()&&(n=!1),t.leavingExpr=!1,n&&e.match(/^'+/))return"operator" if(e.match(/\.{4,}/))return"error" if(e.match(/\.{1,3}/))return"operator" if(e.eatSpace())return null var r,s=e.peek() if("#"===s)return e.skipToEnd(),"comment" if("["===s&&(t.scopes.push("["),t.nestedArrays++),"("===s&&(t.scopes.push("("),t.nestedGenerators++),b(t)&&"]"===s){for("if"===v(t)&&t.scopes.pop();"for"===v(t);)t.scopes.pop() t.scopes.pop(),t.nestedArrays--,t.leavingExpr=!0}if(function(e){return e.nestedGenerators>0}(t)&&")"===s){for("if"===v(t)&&t.scopes.pop();"for"===v(t);)t.scopes.pop() t.scopes.pop(),t.nestedGenerators--,t.leavingExpr=!0}if(b(t)){if("end"==t.lastToken&&e.match(/^:/))return"operator" if(e.match(/^end/))return"number"}if((r=e.match(f,!1))&&t.scopes.push(r[0]),e.match(l,!1)&&t.scopes.pop(),e.match(/^::(?![:\$])/))return t.tokenize=A,t.tokenize(e,t) if(!n&&e.match(h)||e.match(/:([<>]:|<<=?|>>>?=?|->|\/\/|\.{2,3}|[\.\\%*+\-<>!\/^|&]=?|[~\?\$])/))return"builtin" if(e.match(i))return"operator" if(e.match(/^\.?\d/,!1)){var c=RegExp(/^im\b/),u=!1 if(e.match(/^\d*\.(?!\.)\d*([Eef][\+\-]?\d+)?/i)&&(u=!0),e.match(/^\d+\.(?!\.)\d*/)&&(u=!0),e.match(/^\.\d+/)&&(u=!0),e.match(/^0x\.[0-9a-f]+p[\+\-]?\d+/i)&&(u=!0),e.match(/^0x[0-9a-f]+/i)&&(u=!0),e.match(/^0b[01]+/i)&&(u=!0),e.match(/^0o[0-7]+/i)&&(u=!0),e.match(/^[1-9]\d*(e[\+\-]?\d+)?/)&&(u=!0),e.match(/^0(?![\dx])/i)&&(u=!0),u)return e.match(c),t.leavingExpr=!0,"number"}if(e.match(/^'/))return t.tokenize=z,t.tokenize(e,t) if(e.match(k))return t.tokenize=function(e){'"""'===e.substr(-3)?e='"""':'"'===e.substr(-1)&&(e='"') return function(t,n){if(t.eat("\\"))t.next() else{if(t.match(e))return n.tokenize=F,n.leavingExpr=!0,"string" t.eat(/[`"]/)}return t.eatWhile(/[^\\`"]/),"string"}}(e.current()),t.tokenize(e,t) if(e.match(d))return"meta" if(e.match(a))return null if(e.match(m))return"keyword" if(e.match(p))return"builtin" var y=t.isDefinition||"function"==t.lastToken||"macro"==t.lastToken||"type"==t.lastToken||"struct"==t.lastToken||"immutable"==t.lastToken return e.match(o)?y?"."===e.peek()?(t.isDefinition=!0,"variable"):(t.isDefinition=!1,"def"):e.match(/^({[^}]*})*\(/,!1)?(t.tokenize=g,t.tokenize(e,t)):(t.leavingExpr=!0,"variable"):(e.next(),"error")}function g(e,t){var n=e.match(/^(\(\s*)/) if(n&&(t.firstParenPos<0&&(t.firstParenPos=t.scopes.length),t.scopes.push("("),t.charsAdvanced+=n[1].length),"("==v(t)&&e.match(/^\)/)&&(t.scopes.pop(),t.charsAdvanced+=1,t.scopes.length<=t.firstParenPos)){var r=e.match(/^(\s*where\s+[^\s=]+)*\s*?=(?!=)/,!1) return e.backUp(t.charsAdvanced),t.firstParenPos=-1,t.charsAdvanced=0,t.tokenize=F,r?"def":"builtin"}if(e.match(/^$/g,!1)){for(e.backUp(t.charsAdvanced);t.scopes.length>t.firstParenPos;)t.scopes.pop() return t.firstParenPos=-1,t.charsAdvanced=0,t.tokenize=F,"builtin"}return t.charsAdvanced+=e.match(/^([^()]*)/)[1].length,t.tokenize(e,t)}function A(e,t){return e.match(/.*?(?=,|;|{|}|\(|\)|=|$|\s)/),e.match(/^{/)?t.nestedParameters++:e.match(/^}/)&&t.nestedParameters>0&&t.nestedParameters--,t.nestedParameters>0?e.match(/.*?(?={|})/)||e.next():0==t.nestedParameters&&(t.tokenize=F),"builtin"}function x(e,t){return e.match(/^#=/)&&t.nestedComments++,e.match(/.*?(?=(#=|=#))/)||e.skipToEnd(),e.match(/^=#/)&&(t.nestedComments--,0==t.nestedComments&&(t.tokenize=F)),"comment"}function z(e,t){var n,r=!1 if(e.match(s))r=!0 else if(n=e.match(/\\u([a-f0-9]{1,4})(?=')/i)){((i=parseInt(n[1],16))<=55295||i>=57344)&&(r=!0,e.next())}else if(n=e.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)){var i;(i=parseInt(n[1],16))<=1114111&&(r=!0,e.next())}return r?(t.leavingExpr=!0,t.tokenize=F,"string"):(e.match(/^[^']+(?=')/)||e.skipToEnd(),e.match(/^'/)&&(t.tokenize=F),"error")}return{startState:function(){return{tokenize:F,scopes:[],lastToken:null,leavingExpr:!1,isDefinition:!1,nestedArrays:0,nestedComments:0,nestedGenerators:0,nestedParameters:0,charsAdvanced:0,firstParenPos:-1}},token:function(e,t){var n=t.tokenize(e,t),r=e.current() return r&&n&&(t.lastToken=r),n},indent:function(e,n){var r=0 return"]"!==n&&")"!==n&&"end"!==n&&"else"!==n&&"catch"!==n&&"elseif"!==n&&"finally"!==n||(r=-1),(e.scopes.length+r)*t.indentUnit},electricInput:/\b(end|else|catch|finally)\b/,blockCommentStart:"#=",blockCommentEnd:"=#",lineComment:"#",closeBrackets:'()[]{}""',fold:"indent"}})),e.defineMIME("text/x-julia","julia")}))