text: 
  /**
   * Module dependencies.
   */
  
  var fs = require('fs');
  
  /**
   * Arguments.
   */
  
  var args = process.argv.slice(2)
    , pending = args.length
    , files = {};
  
  console.log('');
  
  // parse arguments
  
  args.forEach(function(file){
    var mod = file.replace('src/', '');
    fs.readFile(file, 'utf8', function(err, js){
      if (err) throw err;
      console.log('  \033[90mcompile : \033[0m\033[36m%s\033[0m', file);
      files[file] = parse(js);
      --pending || compile();
    });
  });
  
  /**
   * Parse the given `js`.
   */
  
  function parse(js) {
    return parseInheritance(parseConditionals(js));
  }
  
  /**
   * Parse __proto__.
   */
  
  function parseInheritance(js) {
    return js
      .replace(/^ *(\w+)\.prototype\.__proto__ * = *(\w+)\.prototype *;?/gm, function(_, child, parent){
        return child + '.prototype = new ' + parent + ';\n'
          + child + '.prototype.constructor = '+ child + ';\n';
      });
  }
  
  /**
   * Parse the given `js`, currently supporting:
   * 
   *    'if' ['node' | 'browser']
   *    'end'
   * 
   */
  
  function parseConditionals(js) {
    var lines = js.split('\n')
      , len = lines.length
      , buffer = true
      , browser = false
      , buf = []
      , line
      , cond;
  
    for (var i = 0; i < len; ++i) {
      line = lines[i];
      if (/^ *\/\/ *if *(node|browser)/gm.exec(line)) {
        cond = RegExp.$1;
        buffer = browser = 'browser' == cond;
      } else if (/^ *\/\/ *end/.test(line)) {
        buffer = true;
        browser = false;
      } else if (browser) {
        buf.push(line.replace(/^( *)\/\//, '$1'));
      } else if (buffer) {
        buf.push(line);
      }
    }
  
    return buf.join('\n');
  }
  
  /**
   * Compile the files.
   */
  
  function compile() {
    var buf = '';
    buf += 'atpl = (function(){\n';
    buf += '\n// CommonJS require()\n\n';
    buf += browser.require + '\n\n';
    buf += 'require.modules = {};\n\n';
    buf += 'require.resolve = ' + browser.resolve + ';\n\n';
    buf += 'require.register = ' + browser.register + ';\n\n';
    buf += 'require.relative = ' + browser.relative + ';\n\n';
    args.forEach(function(file){
      var js = files[file];
      file = file.replace('src/', '');
      buf += '\nrequire.register("' + file + '", function(module, exports, require){\n';
      buf += js;
      buf += '\n}); // module: ' + file + '\n';
    });
    buf += '\n return require("atpl");\n})();';
    fs.writeFile('atpl.js', buf, function(err){
      if (err) throw err;
      console.log('  \033[90m create : \033[0m\033[36m%s\033[0m', 'atpl.js');
      console.log();
    });
  }
  
  // refactored version of weepy's
  // https://github.com/weepy/brequire/blob/master/browser/brequire.js
  
  var browser = {
    
    /**
     * Require a module.
     */
    
    require: function require(p){
      if ('fs' == p) return {};
      if ('path' == p) return {};
      var path = require.resolve(p)
        , mod = require.modules[path];
      if (!mod) throw new Error('failed to require "' + p + '"');
      if (!mod.exports) {
        mod.exports = {};
        mod.call(mod.exports, mod, mod.exports, require.relative(path));
      }
      return mod.exports;
    },
    
    /**
     * Resolve module path.
     */
  
    resolve: function(path){
      var orig = path
        , reg = path + '.js'
        , index = path + '/index.js';
      return require.modules[reg] && reg
        || require.modules[index] && index
        || orig;
    },
    
    /**
     * Return relative require().
     */
  
    relative: function(parent) {
      return function(p){
        if ('.' != p.substr(0, 1)) return require(p);
        
        var path = parent.split('/')
          , segs = p.split('/');
        path.pop();
        
        for (var i = 0; i < segs.length; i++) {
          var seg = segs[i];
          if ('..' == seg) path.pop();
          else if ('.' != seg) path.push(seg);
        }
  
        return require(path.join('/'));
      };
    },
    
    /**
     * Register a module.
     */
  
    register: function(path, fn){
      require.modules[path] = fn;
    }
  };
  