From de0e1bda2f6b08ca6dc084e73144e096d2fbdaaf Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Thu, 15 Aug 2013 15:11:18 +0400 Subject: [PATCH] api: new methods --- lib/bemhtml/api.js | 8 ++++++++ lib/bemhtml/compiler.js | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/bemhtml/api.js b/lib/bemhtml/api.js index b76c606e..ff0509a2 100644 --- a/lib/bemhtml/api.js +++ b/lib/bemhtml/api.js @@ -1,9 +1,17 @@ var bemhtml = require('../bemhtml'); +exports.pretranslate = function pretranslate(ast, options) { + return new bemhtml.Compiler(options).pretranslate(ast); +}; + exports.translate = function translate(ast, options) { return new bemhtml.Compiler(options).translate(ast); }; +exports.pregenerate = function pregenerate(code, options) { + return new bemhtml.Compiler(options).pregenerate(code); +}; + exports.generate = function generate(code, options) { return new bemhtml.Compiler(options).generate(code); }; diff --git a/lib/bemhtml/compiler.js b/lib/bemhtml/compiler.js index de0cbf4e..b1fa3560 100644 --- a/lib/bemhtml/compiler.js +++ b/lib/bemhtml/compiler.js @@ -23,7 +23,7 @@ function Compiler(options) { }; exports.Compiler = Compiler; -Compiler.prototype.translate = function translate(ast) { +Compiler.prototype.pretranslate = function pretranslate(ast) { // Ok, I admit it. Translation process is a bit fucked. var self = this; var allowed = { @@ -72,6 +72,11 @@ Compiler.prototype.translate = function translate(ast) { i += exprs.length - 1; } + return ast; +}; + +Compiler.prototype.translate = function translate(ast) { + ast = this.pretranslate(ast); return xjst.translate(ast, this.options); }; @@ -589,6 +594,14 @@ Compiler.prototype.traceChanges = function traceChanges(changes, expr) { }; }; +Compiler.prototype.pregenerate = function pregenerate(code) { + var ast = esprima.parse(code); + + ast = this.pretranslate(ast); + + return uglify.AST_Node.from_mozilla_ast(ast).print_to_string(); +}; + Compiler.prototype.generate = function generate(code) { if (this.options['no-opt'] || this.options.optimize === false) { return xjst.generate('\n' +