Skip to content

Instantly share code, notes, and snippets.

@nakosung
Created September 6, 2015 14:11
Show Gist options
  • Save nakosung/247e0a45baca57d1e2e7 to your computer and use it in GitHub Desktop.
Save nakosung/247e0a45baca57d1e2e7 to your computer and use it in GitHub Desktop.
'use strict';
var fs = require('fs');
var lex = require('jade-lexer');
var stripComments = require('jade-strip-comments');
var parse = require('jade-parser');
var load = require('jade-load');
var filters = require('jade-filters');
var link = require('jade-linker');
function test(str,options) {
var debug_sources = {};
debug_sources[options.filename] = str;
var dependencies = [];
try {
var ast = load.string(str, options.filename, {
lex: lex,
parse: function (tokens, filename) {
tokens = stripComments(tokens, { filename: filename });
return parse(tokens, filename);
},
resolve: function (filename, source) {
filename = filename.trim();
if (filename[0] !== '/' && !source)
throw new Error('the "filename" option is required to use includes and extends with "relative" paths');
if (filename[0] === '/' && !options.basedir)
throw new Error('the "basedir" option is required to use includes and extends with "absolute" paths');
filename = path.join(filename[0] === '/' ? options.basedir : path.dirname(source), filename);
if (path.basename(filename).indexOf('.') === -1) filename += '.jade';
return filename;
},
read: function (filename) {
dependencies.push(filename);
var str = fs.readFileSync(filename, 'utf8');
debug_sources[filename] = str;
return str;
}
});
ast = link(ast);
ast = filters.handleFilters(ast, exports.filters);
visit(ast)
} catch (err) {
if (err.code && typeof err.code === 'string' && err.code.substr(0, 4) === 'JADE') {
runtime.rethrow(
new Error(err.msg),
err.filename,
err.line,
options.filename === err.filename ? str : (options.compileDebug ? debug_sources[err.filename] : undefined)
);
}
throw err;
}
}
test(fs.readFileSync('test.jade').toString(),{})
function visit(node,indent) {
console.log(JSON.stringify(node,'',2))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment