Created
May 27, 2014 04:08
-
-
Save tedzhou/eca5a7e4c8b45df3c031 to your computer and use it in GitHub Desktop.
合并同一目录的文件,简单处理依赖
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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