Skip to content

Commit

Permalink
optimze the lookup logic
Browse files Browse the repository at this point in the history
  • Loading branch information
2betop committed Apr 14, 2014
1 parent e51308c commit b8e3109
Showing 1 changed file with 41 additions and 10 deletions.
51 changes: 41 additions & 10 deletions compile.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
/**
* 接管sass的@import内嵌,通过fis来内嵌,能得到更好的效果。
* 这样不仅可以内嵌sass格式的,还可内嵌其他语法格式的css文件。
* 接管sass的@import内嵌,让fis-sass支持sass语法内嵌。
*
* 目前fis-sass无法改动libsass(第三方库)内部的代码以至于无法支持sass格式的文件`@import`内嵌。
*
* 所以这里接管内嵌,让fis-sass不处理`@import`内嵌代码。
*/
var map = (function() {
return {
Expand All @@ -12,6 +15,7 @@ var map = (function() {
}
})();

// 匹配sass内嵌代码:@import 'xxx'
function _process( content ) {
var reg = /@import\s*('|")?(.+?)\1(?:;)?$/img;
var rUrl = /^url/i;
Expand All @@ -27,20 +31,46 @@ function _process( content ) {
});
}

// 查找文件。
function lookup( name, ext, paths ) {
var files = [],
filename = name,
basename = filename,
dirname = '',
mapping,
i, j, len, len2, path, info;

// 自动加后缀。
if ( !/\.\w+$/.exec( filename ) ) {
filename = name + ext;
files.push( filename );

if ( /^(.*(?:\/|\\))([^\/\\]*?)$/.exec( filename ) ) {
dirname = RegExp.$1;
basename = RegExp.$2;
}

files.push( filename );
// 自动加后缀。
if ( !/\.\w+$/.exec( basename ) ) {
filename = dirname + basename + ext;
files.push( filename );

if ( !/^\_/.exec( filename ) ) {
files.push( '_' + filename );
if ( !/^_/.exec( basename ) ) {
filename = dirname + '_' + basename + ext;
files.push( filename );
}

mapping = {
'.sass': '.scss',
'.scss': '.sass'
};

if ( mapping[ ext ] ) {
filename = dirname + basename + mapping[ ext ];
files.push( filename );

if ( !/^_/.exec( basename ) ) {
filename = dirname + '_' + basename + mapping[ ext ];
files.push( filename );
}
}
}

len = files.length;
Expand All @@ -59,12 +89,13 @@ function lookup( name, ext, paths ) {
}
}

exports.before = function( content, ext, paths ) {
var compile = exports.before = function( content, ext, paths ) {
return _process( content ).replace( map.reg, function( all, value ) {
var file = lookup( value, ext, paths );

if ( file ) {
return file.getContent();
// @todo 祈祷,不要循环内嵌吧。
return compile( file.getContent(), file.ext, [ file.dirname ].concat( paths ) );

This comment has been minimized.

Copy link
@qdsang

qdsang Apr 15, 2014

[ file.dirname ].concat( paths )

这个地方得排重下,不能直接硬合并

This comment has been minimized.

Copy link
@2betop

2betop Apr 15, 2014

Author Contributor

恩。

} else {
fis.log.error( value + ' not found!' );
return '';
Expand Down

0 comments on commit b8e3109

Please sign in to comment.