gulp-file-include
Version:
A gulp plugin for file include
52 lines (40 loc) • 1.29 kB
JavaScript
const balanced = require('balanced-match')
module.exports = function(content, opts) {
var result = ''
var reStart = new RegExp(opts.prefix + '[ ]*' + opts.name + '\\(')
var reEnd = new RegExp('^[ ]*' + opts.suffix)
var matchStart
var matchArg
var matchEnd
var safeStart
var before
var replacement
while (matchStart = reStart.exec(content)) { // eslint-disable-line
safeStart = matchStart.index + matchStart[0].length - 1
matchArg = balanced('(', ')', content.slice(safeStart))
if (matchArg && matchArg.start === 0) {
if (opts.suffix) {
matchEnd = reEnd.exec(matchArg.post)
}
matchEnd = matchEnd ? matchEnd.index + matchEnd[0].length : 0
if (!opts.suffix || matchEnd) {
before = content.slice(0, matchStart.index)
replacement = opts.handler({
before: before,
args: matchArg.body,
sourceFile: opts.sourceFile
})
if (replacement !== undefined) {
result += before + replacement.toString()
content = content.slice(safeStart + matchArg.end + 1 + matchEnd)
continue
}
}
}
result += content.slice(0, safeStart)
content = content.slice(safeStart)
}
result += content
return result
}