You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			197 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			197 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
| "use strict";
 | |
| (self["webpackChunk_JUPYTERLAB_CORE_OUTPUT"] = self["webpackChunk_JUPYTERLAB_CORE_OUTPUT"] || []).push([[4038],{
 | |
| 
 | |
| /***/ 44038:
 | |
| /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 | |
| 
 | |
| __webpack_require__.r(__webpack_exports__);
 | |
| /* harmony export */ __webpack_require__.d(__webpack_exports__, {
 | |
| /* harmony export */   yacas: () => (/* binding */ yacas)
 | |
| /* harmony export */ });
 | |
| function words(str) {
 | |
|   var obj = {}, words = str.split(" ");
 | |
|   for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
 | |
|   return obj;
 | |
| }
 | |
| 
 | |
| var bodiedOps = words("Assert BackQuote D Defun Deriv For ForEach FromFile " +
 | |
|                       "FromString Function Integrate InverseTaylor Limit " +
 | |
|                       "LocalSymbols Macro MacroRule MacroRulePattern " +
 | |
|                       "NIntegrate Rule RulePattern Subst TD TExplicitSum " +
 | |
|                       "TSum Taylor Taylor1 Taylor2 Taylor3 ToFile " +
 | |
|                       "ToStdout ToString TraceRule Until While");
 | |
| 
 | |
| // patterns
 | |
| var pFloatForm  = "(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)";
 | |
| var pIdentifier = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)";
 | |
| 
 | |
| // regular expressions
 | |
| var reFloatForm    = new RegExp(pFloatForm);
 | |
| var reIdentifier   = new RegExp(pIdentifier);
 | |
| var rePattern      = new RegExp(pIdentifier + "?_" + pIdentifier);
 | |
| var reFunctionLike = new RegExp(pIdentifier + "\\s*\\(");
 | |
| 
 | |
| function tokenBase(stream, state) {
 | |
|   var ch;
 | |
| 
 | |
|   // get next character
 | |
|   ch = stream.next();
 | |
| 
 | |
|   // string
 | |
|   if (ch === '"') {
 | |
|     state.tokenize = tokenString;
 | |
|     return state.tokenize(stream, state);
 | |
|   }
 | |
| 
 | |
|   // comment
 | |
|   if (ch === '/') {
 | |
|     if (stream.eat('*')) {
 | |
|       state.tokenize = tokenComment;
 | |
|       return state.tokenize(stream, state);
 | |
|     }
 | |
|     if (stream.eat("/")) {
 | |
|       stream.skipToEnd();
 | |
|       return "comment";
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // go back one character
 | |
|   stream.backUp(1);
 | |
| 
 | |
|   // update scope info
 | |
|   var m = stream.match(/^(\w+)\s*\(/, false);
 | |
|   if (m !== null && bodiedOps.hasOwnProperty(m[1]))
 | |
|     state.scopes.push('bodied');
 | |
| 
 | |
|   var scope = currentScope(state);
 | |
| 
 | |
|   if (scope === 'bodied' && ch === '[')
 | |
|     state.scopes.pop();
 | |
| 
 | |
|   if (ch === '[' || ch === '{' || ch === '(')
 | |
|     state.scopes.push(ch);
 | |
| 
 | |
|   scope = currentScope(state);
 | |
| 
 | |
|   if (scope === '[' && ch === ']' ||
 | |
|       scope === '{' && ch === '}' ||
 | |
|       scope === '(' && ch === ')')
 | |
|     state.scopes.pop();
 | |
| 
 | |
|   if (ch === ';') {
 | |
|     while (scope === 'bodied') {
 | |
|       state.scopes.pop();
 | |
|       scope = currentScope(state);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // look for ordered rules
 | |
|   if (stream.match(/\d+ *#/, true, false)) {
 | |
|     return 'qualifier';
 | |
|   }
 | |
| 
 | |
|   // look for numbers
 | |
|   if (stream.match(reFloatForm, true, false)) {
 | |
|     return 'number';
 | |
|   }
 | |
| 
 | |
|   // look for placeholders
 | |
|   if (stream.match(rePattern, true, false)) {
 | |
|     return 'variableName.special';
 | |
|   }
 | |
| 
 | |
|   // match all braces separately
 | |
|   if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) {
 | |
|     return 'bracket';
 | |
|   }
 | |
| 
 | |
|   // literals looking like function calls
 | |
|   if (stream.match(reFunctionLike, true, false)) {
 | |
|     stream.backUp(1);
 | |
|     return 'variableName.function';
 | |
|   }
 | |
| 
 | |
|   // all other identifiers
 | |
|   if (stream.match(reIdentifier, true, false)) {
 | |
|     return 'variable';
 | |
|   }
 | |
| 
 | |
|   // operators; note that operators like @@ or /; are matched separately for each symbol.
 | |
|   if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%|#)/, true, false)) {
 | |
|     return 'operator';
 | |
|   }
 | |
| 
 | |
|   // everything else is an error
 | |
|   return 'error';
 | |
| }
 | |
| 
 | |
| function tokenString(stream, state) {
 | |
|   var next, end = false, escaped = false;
 | |
|   while ((next = stream.next()) != null) {
 | |
|     if (next === '"' && !escaped) {
 | |
|       end = true;
 | |
|       break;
 | |
|     }
 | |
|     escaped = !escaped && next === '\\';
 | |
|   }
 | |
|   if (end && !escaped) {
 | |
|     state.tokenize = tokenBase;
 | |
|   }
 | |
|   return 'string';
 | |
| };
 | |
| 
 | |
| function tokenComment(stream, state) {
 | |
|   var prev, next;
 | |
|   while((next = stream.next()) != null) {
 | |
|     if (prev === '*' && next === '/') {
 | |
|       state.tokenize = tokenBase;
 | |
|       break;
 | |
|     }
 | |
|     prev = next;
 | |
|   }
 | |
|   return 'comment';
 | |
| }
 | |
| 
 | |
| function currentScope(state) {
 | |
|   var scope = null;
 | |
|   if (state.scopes.length > 0)
 | |
|     scope = state.scopes[state.scopes.length - 1];
 | |
|   return scope;
 | |
| }
 | |
| 
 | |
| const yacas = {
 | |
|   name: "yacas",
 | |
|   startState: function() {
 | |
|     return {
 | |
|       tokenize: tokenBase,
 | |
|       scopes: []
 | |
|     };
 | |
|   },
 | |
|   token: function(stream, state) {
 | |
|     if (stream.eatSpace()) return null;
 | |
|     return state.tokenize(stream, state);
 | |
|   },
 | |
|   indent: function(state, textAfter, cx) {
 | |
|     if (state.tokenize !== tokenBase && state.tokenize !== null)
 | |
|       return null;
 | |
| 
 | |
|     var delta = 0;
 | |
|     if (textAfter === ']' || textAfter === '];' ||
 | |
|         textAfter === '}' || textAfter === '};' ||
 | |
|         textAfter === ');')
 | |
|       delta = -1;
 | |
| 
 | |
|     return (state.scopes.length + delta) * cx.unit;
 | |
|   },
 | |
| 
 | |
|   languageData: {
 | |
|     electricInput: /[{}\[\]()\;]/,
 | |
|     commentTokens: {line: "//", block: {open: "/*", close: "*/"}}
 | |
|   }
 | |
| };
 | |
| 
 | |
| 
 | |
| /***/ })
 | |
| 
 | |
| }]);
 | |
| //# sourceMappingURL=4038.edb04f3d9d68204491ba.js.map?v=edb04f3d9d68204491ba
 |