Milkdrop EEL2 Parser
The `milkdrop-eel-parser` library provides a parser for the Nullsoft/Cockos EEL2 (Expression Evaluation Library 2) scripting language, primarily used in the Milkdrop music visualizer. It is designed to convert EEL2 equations into JavaScript, enabling their use in modern web-based visualizers like Butterchurn. Currently at version `0.0.4`, this project is predominantly written in ClojureScript and compiles to a JavaScript bundle. Its development appears to be in maintenance mode, with no significant updates in the last 7-8 years. Key differentiators include its niche focus on EEL2 parsing and its integration into the broader Butterchurn ecosystem, allowing developers to bring legacy Milkdrop preset logic to the browser environment.
Common errors
-
ReferenceError: MilkdropEELParser is not defined
cause The `milkdrop-eel-parser` library was not loaded via a script tag, or the script tag was placed incorrectly (e.g., after attempting to use the object).fixEnsure the `<script src="https://unpkg.com/milkdrop-eel-parser/release/md-parser.min.js"></script>` tag is included in your HTML before any code attempts to access `window.MilkdropEELParser`. -
Error: Must pass an expression string to parseExpression.
cause The `parseExpression` or `convertExpression` function was called without a string argument, or with a non-string argument.fixAlways pass a valid EEL2 expression as a string to the parsing and conversion functions, e.g., `window.MilkdropEELParser.parseExpression('vol = 0.5;')`.
Warnings
- gotcha This library is a ClojureScript compilation output and does not offer standard ES module (`import`) or CommonJS (`require`) exports. It exposes a global `window.MilkdropEELParser` object, requiring direct script inclusion in HTML.
- breaking The package version `0.0.4` indicates a very early development stage. While no formal breaking changes are documented, minor versions in this range often introduce API changes without adherence to strict semantic versioning.
- gotcha The project repository shows no significant commits in the last 7-8 years, implying it is largely unmaintained. Users should be aware that bug fixes, feature requests, or compatibility updates are unlikely.
- gotcha The `convertExpression` function generates a JavaScript string. Executing this string directly (e.g., with `eval` or `new Function()`) can pose security risks if the EEL2 input is untrusted or malformed. Ensure all EEL2 expressions are sanitized.
Install
-
npm install milkdrop-eel-parser -
yarn add milkdrop-eel-parser -
pnpm add milkdrop-eel-parser
Imports
- MilkdropEELParser
<!-- In HTML --> <script src="https://unpkg.com/milkdrop-eel-parser/release/md-parser.min.js"></script> <script> const parser = window.MilkdropEELParser; // ... use parser.parseExpression or parser.convertExpression </script>
- parseExpression
import { parseExpression } from 'milkdrop-eel-parser';const parsed = window.MilkdropEELParser.parseExpression('x + y'); - convertExpression
const convertExpression = require('milkdrop-eel-parser').convertExpression;const converted = window.MilkdropEELParser.convertExpression('x + y');
Quickstart
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Milkdrop EEL Parser Quickstart</title>
</head>
<body>
<h1>Milkdrop EEL2 Parser Example</h1>
<p>Original EEL2 Expression: <code>'x = x + 0.1;'</code></p>
<p>Parsed Output (console): <code id="parsedOutput"></code></p>
<p>Converted JavaScript (console): <code id="convertedOutput"></code></p>
<!-- Load the library via CDN -->
<script src="https://unpkg.com/milkdrop-eel-parser/release/md-parser.min.js"></script>
<script>
if (window.MilkdropEELParser) {
const eelExpression = 'x = x + 0.1;';
// Parse the EEL2 expression
const parsedAst = window.MilkdropEELParser.parseExpression(eelExpression);
document.getElementById('parsedOutput').textContent = 'Check console for AST';
console.log('Parsed AST:', parsedAst);
// Convert the EEL2 expression to JavaScript
const jsFunctionString = window.MilkdropEELParser.convertExpression(eelExpression);
document.getElementById('convertedOutput').textContent = jsFunctionString;
console.log('Converted JavaScript function string:', jsFunctionString);
// Example of executing the converted JS (for demonstration, be careful with eval in prod)
// Note: `x` would typically be part of a larger state object in a real visualizer
let x = 0;
const fn = new Function('x', 'return (' + jsFunctionString + ');');
console.log('Initial x:', x);
for (let i = 0; i < 5; i++) {
x = fn(x);
console.log(`x after iteration ${i + 1}:`, x);
}
} else {
console.error('MilkdropEELParser not found. Is the script loaded correctly?');
}
</script>
</body>
</html>