regexper-static/src/js/parser/javascript.js

62 lines
1.1 KiB
JavaScript
Raw Normal View History

import Q from 'q';
import Snap from 'snapsvg';
import javascript from './javascript/parser.js';
export default class Parser {
constructor() {
this.state = {
groupCounter: 1,
renderCounter: 0,
maxCounter: 0,
cancelRender: false
};
}
parse(expression) {
var deferred = Q.defer();
setTimeout(() => {
2014-12-20 15:47:41 +00:00
try {
javascript.Parser.SyntaxNode.state = this.state;
this.parsed = javascript.parse(expression.replace(/\n/g, '\\n'));
deferred.resolve(this);
}
catch(e) {
deferred.reject(e);
}
});
return deferred.promise;
}
render(svgElement, styles) {
var svg;
svgElement.innerHTML = [
'<style type="text/css">',
styles,
'</style>'
].join('');
svg = Snap(svgElement);
return this.parsed.render(svg.group())
.then(result => {
var box = result.getBBox();
result.transform(Snap.matrix()
.translate(10 - box.x, 10 - box.y));
svg.attr({
width: box.width + 20,
height: box.height + 20
});
});
}
cancel() {
this.state.cancelRender = true;
}
}