Skip to content

Instantly share code, notes, and snippets.

@tedzhou
Created May 27, 2014 04:08
Show Gist options
  • Save tedzhou/eca5a7e4c8b45df3c031 to your computer and use it in GitHub Desktop.
Save tedzhou/eca5a7e4c8b45df3c031 to your computer and use it in GitHub Desktop.
合并同一目录的文件,简单处理依赖
#!/usr/bin/env node
var fs = require('fs');
var root = process.argv[2] || __dirname;
var reg = /#import "(.*?.).h"/;
function getAllFiles() {
var dictionaries = {};
var files = fs.readdirSync(root);
files.forEach(function (dictionary) {
var pathName = root + '/' + dictionary;
var stat = fs.lstatSync(pathName);
if (stat.isDirectory()) {
// 这个协议有几个子文件
dictionaries[dictionary] = fs.readdirSync(pathName).filter(function (subFile) {
return subFile.indexOf(dictionary) < 0 && subFile.indexOf('.h') > 0;
}).map(function (subFile) {
return subFile.replace('.h', '');
});
}
});
return dictionaries;
}
function getFileMap (protocols) {
var filesInDictionary = {};
for(var protocol in protocols) {
var subFiles = protocols[protocol];
subFiles.forEach(function(subFile){
// 这个子文件在哪个协议里
filesInDictionary[subFile] = protocol;
});
}
return filesInDictionary;
}
function combineHeader(dictionarys, filesInDictionary) {
for(var dict in dictionarys) {
var importSet = {};
var atClassSet = [];
var str = [];
var basePath = root +'/'+dict;
//header
dictionarys[dict].forEach(function(subFile){
var fileStr = fs.readFileSync(basePath + '/'+subFile+'.h', {
encoding:'utf8'
});
var fileStrArr = fileStr.split('\n');
fileStrArr = fileStrArr.filter(function(line){
var matchArr = line.match(reg);
var dependenceClass = matchArr && matchArr[1];
if(dependenceClass){
if(filesInDictionary[dependenceClass+'.h'] == dict){
atClassSet[dependenceClass] = true;
} else{
importSet[dependenceClass] = true;
}
return false;
} else {
return true;
}
});
str.push(fileStrArr.join('\n'));
});
var final = [];
for(var im in importSet){
final.push('#import "'+im+'.h"');
}
for(var cls in atClassSet){
final.push('@class '+ cls + ";");
}
console.log('file:'+dict+'.h');
fs.writeFileSync(basePath+'/'+dict+'.h',final.concat(str).join('\n'));
}
}
function combineImp(dictionaries)
{
for(var dict in dictionaries) {
var str = ['#import "'+dict+'.h"'];
var basePath = root +'/'+dict;
dictionaries[dict].forEach(function (subFile) {
var fileStr = fs.readFileSync(basePath + '/' + subFile + '.m',{
encoding:'utf8'
});
var fileStrArr = fileStr.split('\n');
fileStrArr = fileStrArr.filter(function (line) {
var matchArr = line.match(reg);
var dependenceClass = matchArr && matchArr[1];
if (dependenceClass) {
return false;
} else {
return true;
}
});
str.push(fileStrArr.join('\n'));
});
console.log('file:'+dict+'.m');
fs.writeFileSync(basePath+'/'+dict+'.m', str.join('\n'));
}
}
function start(){
var dictionaries = getAllFiles();
var filesInDicts = getFileMap(dictionaries);
combineHeader(dictionaries, filesInDicts);
combineImp(dictionaries);
}
start();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment