1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- var util = require('util')
- var INDENT_START = /[\{\[]/
- var INDENT_END = /[\}\]]/
- module.exports = function() {
- var lines = []
- var indent = 0
- var push = function(str) {
- var spaces = ''
- while (spaces.length < indent*2) spaces += ' '
- lines.push(spaces+str)
- }
- var line = function(fmt) {
- if (!fmt) return line
- if (INDENT_END.test(fmt.trim()[0]) && INDENT_START.test(fmt[fmt.length-1])) {
- indent--
- push(util.format.apply(util, arguments))
- indent++
- return line
- }
- if (INDENT_START.test(fmt[fmt.length-1])) {
- push(util.format.apply(util, arguments))
- indent++
- return line
- }
- if (INDENT_END.test(fmt.trim()[0])) {
- indent--
- push(util.format.apply(util, arguments))
- return line
- }
- push(util.format.apply(util, arguments))
- return line
- }
- line.toString = function() {
- return lines.join('\n')
- }
- line.toFunction = function(scope) {
- var src = 'return ('+line.toString()+')'
- var keys = Object.keys(scope || {}).map(function(key) {
- return key
- })
- var vals = keys.map(function(key) {
- return scope[key]
- })
- return Function.apply(null, keys.concat(src)).apply(null, vals)
- }
- if (arguments.length) line.apply(null, arguments)
- return line
- }
|