This commit is contained in:
2023-12-20 00:50:50 +02:00
3 changed files with 14 additions and 60 deletions

View File

@ -113,7 +113,6 @@ export class UserAPI {
* function destined to the user should be placed here. * function destined to the user should be placed here.
*/ */
private variables: { [key: string]: any } = {};
public codeExamples: { [key: string]: string } = {}; public codeExamples: { [key: string]: string } = {};
private counters: { [key: string]: any } = {}; private counters: { [key: string]: any } = {};
private _drunk: DrunkWalk = new DrunkWalk(-100, 100, false); private _drunk: DrunkWalk = new DrunkWalk(-100, 100, false);
@ -131,9 +130,11 @@ export class UserAPI {
public onceEvaluator: boolean = true; public onceEvaluator: boolean = true;
load: samples; load: samples;
public global: { [key: string]: any };
constructor(public app: Editor) { constructor(public app: Editor) {
this.MidiConnection = new MidiConnection(this, app.settings); this.MidiConnection = new MidiConnection(this, app.settings);
this.global = {};
} }
_loadUniverseFromInterface = (universe: string) => { _loadUniverseFromInterface = (universe: string) => {
@ -1045,49 +1046,6 @@ export class UserAPI {
this._drunk.toggleWrap(wrap); this._drunk.toggleWrap(wrap);
}; };
// =============================================================
// Variable related functions
// =============================================================
public variable = (a: number | string, b?: any): any => {
/**
* Sets or returns the value of a variable internal to API.
*
* @param a - The name of the variable
* @param b - [optional] The value to set the variable to
* @returns The value of the variable
*/
if (typeof a === "string" && b === undefined) {
return this.variables[a];
} else {
this.variables[a] = b;
return this.variables[a];
}
};
v = this.variable;
public delete_variable = (name: string): void => {
/**
* Deletes a variable internal to API.
*
* @param name - The name of the variable to delete
*/
delete this.variables[name];
};
dv = this.delete_variable;
public clear_variables = (): void => {
/**
* Clears all variables internal to API.
*
* @remarks
* This function will delete all variables without warning.
* Use with caution.
*/
this.variables = {};
};
cv = this.clear_variables;
// ============================================================= // =============================================================
// Randomness functions // Randomness functions
// ============================================================= // =============================================================
@ -1749,7 +1707,7 @@ export class UserAPI {
for (let value = start; value <= end; value += step) { for (let value = start; value <= end; value += step) {
result.push(value); result.push(value);
} }
} else if((end > start && step < 0) || (end < start && step > 0)) { } else if ((end > start && step < 0) || (end < start && step > 0)) {
for (let value = start; value >= end; value -= step) { for (let value = start; value >= end; value -= step) {
result.push(parseFloat(value.toFixed(countPlaces(step)))); result.push(parseFloat(value.toFixed(countPlaces(step))));
} }

View File

@ -20,7 +20,7 @@ import {
HighlightStyle, HighlightStyle,
} from "@codemirror/language"; } from "@codemirror/language";
import { defaultKeymap, historyKeymap, history } from "@codemirror/commands"; import { defaultKeymap, historyKeymap, history } from "@codemirror/commands";
import { searchKeymap, highlightSelectionMatches } from "@codemirror/search"; import { highlightSelectionMatches } from "@codemirror/search";
import { import {
autocompletion, autocompletion,
closeBrackets, closeBrackets,
@ -259,7 +259,7 @@ export const editorSetup: Extension = (() => [
highlightActiveLine(), highlightActiveLine(),
highlightSelectionMatches(), highlightSelectionMatches(),
keymap.of([ keymap.of([
...searchKeymap, // ...searchKeymap,
...closeBracketsKeymap, ...closeBracketsKeymap,
...defaultKeymap, ...defaultKeymap,
...historyKeymap, ...historyKeymap,

View File

@ -7,20 +7,15 @@ export const variables = (application: Editor): string => {
# Variables # Variables
By default, each script is independant from each other. Scripts live in their own bubble and you cannot get or set variables affecting a script from any other script. By default, each script is independant from each other. The variables defined in **script 1** are not available in **script 2**, etc. Moreover, they are overriden everytime the file is evaluated. It means that you cannot store any state or share information. However, you can use global variables to make that possible.
**However**, everybody knows that global variables are cool and should be used everywhere. Global variables are an incredibely powerful tool to radically alter a composition in a few lines of code. There is a <ic>global</ic> object that you can use to store and retrieve information. It is a simple key/value store. You can store any type of data in it:
- <ic>variable(a: number | string, b?: any)</ic>: if only one argument is provided, the value of the variable will be returned through its name, denoted by the first argument. If a second argument is used, it will be saved as a global variable under the name of the first argument.
- <ic>delete_variable(name: string)</ic>: deletes a global variable from storage.
- <ic>clear_variables()</ic>: clear **ALL** variables. **This is a destructive operation**!
**Note:** since this example is running in the documentation, we cannot take advantage of the multiple scripts paradigm. Try to send a variable from the global file to the local file n°6.
${makeExample( ${makeExample(
"Setting a global variable", "Setting a global variable",
` `
v('my_cool_variable', 2) // This is script n°3
global.my_variable = 2
`, `,
true, true,
)} )}
@ -28,12 +23,13 @@ v('my_cool_variable', 2)
${makeExample( ${makeExample(
"Getting that variable back and printing!", "Getting that variable back and printing!",
` `
// Note that we just use one argument // This is script n°4
log(v('my_cool_variable')) log(global.my_variable)
`, `,
false, true,
)} )}
Now your scripts can share information with each other!
## Counter and iterators ## Counter and iterators