//////////////////////////////
// Swig
//  - A Gulp Plugin
//
// Builds Swig to HTML
//////////////////////////////
'use strict';

//////////////////////////////
// Variables
//////////////////////////////
var through = require('through2'),
    gutil = require('gulp-util'),
    swig = require('swig'),
    PluginError = gutil.PluginError,
    PLUGIN_NAME = 'swig';

//////////////////////////////
// Set Swig stuff
//////////////////////////////
swig.setDefaults({
  'loader': swig.loaders.fs(process.cwd() + '/templates')
});

//////////////////////////////
// Export
//////////////////////////////
module.exports = function (options) {
  options = options || {};

  //////////////////////////////
  // Command line arguments for each option
  //////////////////////////////
  process.argv.forEach(function (val, index, array) {
    if (index >= 3) {
      switch (val) {
        case '--fail': options.failOnError = true; break;
      }
    }
  });

  //////////////////////////////
  // Through Object
  //////////////////////////////
  var compile = through.obj(function (file, encoding, cb) {
    /////////////////////////////
    // Default plugin issues
    //////////////////////////////
    if (file.isNull()) {
      return cb();
    }
    if (file.isStream()) {
      this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!'));
      return cb();
    }

    //////////////////////////////
    // Manipulate Files
    //////////////////////////////
    console.log(file.meta);
    if (file.meta) {
      file.meta.filename = file.path;

      if (file.meta.template) {
        file.contents = new Buffer(swig.render(
          '{% extends "' + file.meta.template + '" %}' +
          '{% block title %}' + file.meta.title + '{% endblock %}' +
          '{% block content %}' + file.contents.toString() + '{% endblock %}'
          , file.meta)
        );
      }
      else {
        file.contents = new Buffer(swig.render(file.contents.toString(), file.meta));
      }


    }

    //////////////////////////////
    // Push the file back to the stream!
    //////////////////////////////
    this.push(file);

    //////////////////////////////
    // Callback to tell us we're done
    //////////////////////////////
    cb();
  })

  return compile;
}

@@ -272,20 +272,20 @@
 '),%0A    
-swig
+path
  = requi
@@ -288,20 +288,20 @@
 equire('
-swig
+path
 '),%0A    
@@ -357,16 +357,30 @@
 = 'swig'
+,%0A    gulpSwig
 ;%0A%0A/////
@@ -458,88 +458,8 @@
 ///%0A
-swig.setDefaults(%7B%0A  'loader': swig.loaders.fs(process.cwd() + '/templates')%0A%7D);
 %0A%0A//
@@ -532,22 +532,16 @@
 ///%0A
-module.exports
+gulpSwig
  = f
@@ -588,16 +588,157 @@
 %7C%7C %7B%7D;%0A%0A
+  var swig = gulpSwig.compiler;%0A%0A  swig.setDefaults(%7B%0A    'loader': swig.loaders.fs(process.cwd() + '/templates'),%0A    'cache': false%0A  %7D);%0A%0A
   //////
@@ -1157,24 +1157,86 @@
 ding, cb) %7B%0A
+    var ext = path.extname(file.path),%0A        context = %7B%7D;%0A%0A
     ////////
@@ -1612,32 +1612,33 @@
     
-console.log(file.meta);%0A
+if (ext === '.html') %7B%0A  
     
@@ -1664,41 +1664,169 @@
     
-file.meta.filename = file.path;%0A%0A
+  context.locals = file.meta;%0A        context.filename = file.path;%0A%0A        // If a template exists in the meta info, build a content block and extend for it%0A  
     
@@ -1849,24 +1849,26 @@
 template) %7B%0A
+  
         file
@@ -1903,16 +1903,18 @@
 render(%0A
+  
         
@@ -1968,75 +1968,8 @@
 +%0A  
-        '%7B%25 block title %25%7D' + file.meta.title + '%7B%25 endblock %25%7D' +%0A
     
@@ -2056,21 +2056,23 @@
     
-, file.meta)%0A
+  , context)%0A  
     
@@ -2078,24 +2078,26 @@
      );%0A
+  
       %7D%0A
       el
@@ -2084,24 +2084,64 @@
 ;%0A        %7D%0A
+        // Otherwise, just render it!%0A  
       else %7B
@@ -2141,16 +2141,18 @@
  else %7B%0A
+  
         
@@ -2220,20 +2220,28 @@
 (), 
-file.meta));
+context));%0A        %7D
 %0A   
@@ -2245,18 +2245,16 @@
       %7D%0A
-%0A%0A
     %7D%0A%0A 
@@ -2529,8 +2529,73 @@
 pile;%0A%7D%0A
+%0AgulpSwig.compiler = require('swig');%0A%0Amodule.exports = gulpSwig;

Make recompiling work