/**
 * css-stylus
 * ==========
 *
 * Собирает *css*-файлы вместе со *styl*-файлами по deps'ам, обрабатывает инклуды и ссылки, сохраняет в виде `?.css`.
 *
 * **Опции**
 *
 * * *String* **target** — Результирующий таргет. По умолчанию `?.css`.
 * * *Object* **variables** — Дополнительные переменные окружения для `stylus`.
 * * *String* **filesTarget** — files-таргет, на основе которого получается список исходных файлов
 *   (его предоставляет технология `files`). По умолчанию — `?.files`.
 *
 * **Пример**
 *
 * ```javascript
 * nodeConfig.addTech(require('enb-stylus/techs/css-stylus'));
 * ```
 */
var path = require('path'),
    vow = require('vow'),
    postcss = require('postcss'),
    atImport = require('postcss-import'),
    stylus = require('stylus');

module.exports = require('enb/lib/build-flow').create()
    .name('css-stylus')
    .target('target', '?.css')
    .defineOption('compress', false)
    .defineOption('prefix', '')
    .defineOption('variables')
    .useFileList(['css', 'styl'])
    .builder(function (sourceFiles) {
        var node = this.node,
            filename = node.resolvePath(path.basename(this._target)),
            defer = vow.defer(),
            css, renderer;

        css = sourceFiles.map(function (file) {
            var url = node.relativePath(file.fullname);

            if (file.name.indexOf('.styl') !== -1) {
                return '/* ' + url + ':begin */\n' +
                    '@import "' + url + '";\n' +
                    '/* ' + url + ':end */\n';
            } else {
                return '@import "' + url + '";';
            }
        }).join('\n');

        renderer = stylus(css, {
                compress: this._compress,
                prefix: this._prefix
            })
            .set('resolve url', true)
            .set('filename', filename)
            .define('url', stylus.resolver());

        if (this._variables) {
            var variables = this._variables;

            Object.keys(variables).forEach(function (key) {
                renderer.define(key, variables[key]);
            });
        }

        this._configureRenderer(renderer)
            .render(function (err, css) {
                if (err) {
                    defer.reject(err);
                } else {
                    defer.resolve(css);
                }
            });

        return defer.promise()
            .then(function (css) {
                return postcss()
                    .use(atImport({
                        transform: function (content, filename) {
                            var url = node.relativePath(filename),
                                pre = '/* ' + url + ': begin */ /**/\n',
                                post = '/* ' + url + ': end */ /**/\n',
                                res = pre + content + post;

                            return res.replace(/\n/g, '\n    ');
                        }
                    }))
                    .process(css, {
                        from: filename
                    })
                    .css;
            });
    })
    .methods({
        _configureRenderer: function (renderer) {
            return renderer;
        }
    })
    .createTech();

@@ -995,19 +995,19 @@
 t(%5B'
-css', 'styl
+styl', 'css
 '%5D)%0A
@@ -1177,16 +1177,40 @@
 efer(),%0A
+            added = %7B%7D,%0A
         
@@ -1254,16 +1254,325 @@
 rceFiles
+%0A            .filter(function (file) %7B%0A                var basename = file.fullname.slice(0, -(file.suffix.length + 1));%0A                if (added%5Bbasename%5D) %7B%0A                    return false;%0A                %7D%0A%0A                added%5Bbasename%5D = true;%0A                return true;%0A            %7D)%0A            
 .map(fun
@@ -1578,32 +1578,36 @@
 nction (file) %7B%0A
+    
             var 
@@ -1655,24 +1655,28 @@
             
+    
 if (file.nam
@@ -1676,36 +1676,25 @@
 ile.
-name.indexOf('.styl') !== -1
+suffix === 'styl'
 ) %7B%0A
@@ -1701,32 +1701,36 @@
                 
+    
 return '/* ' + u
@@ -1746,24 +1746,28 @@
 gin */%5Cn' +%0A
+    
             
@@ -1823,16 +1823,20 @@
         
+    
 '/* ' + 
@@ -1858,32 +1858,36 @@
 n';%0A            
+   
+ 
 %7D else %7B%0A       
@@ -1871,32 +1871,123 @@
        %7D else %7B%0A
+                    // postcss adds surrounding comments itself so don't add them here%0A    
                 
@@ -2023,34 +2023,42 @@
 ;';%0A            
-%7D%0A
+    %7D%0A    
         %7D).join(

Use only *.styl file if an entity has multiple files (close #73)