UNPKG

sif-scanner

Version:

Scans sif files to match a line header, parses content between line headers as an object, applies filter on objects to match a predicate.

73 lines (61 loc) 2.02 kB
var rl = require("./readLine.js"); module.exports = function(input, pattern, groupPattern, eachBlockCallback, doneCallback) { var currentBlock = null; var currentChildBlock = null; if (groupPattern && !Array.isArray(groupPattern)) { groupPattern = [groupPattern]; } rl(input, line, done); function line(l) { if (pattern.test(l)) { if (currentBlock) { currentBlock = addChildBlock(currentBlock, currentChildBlock); eachBlockCallback(null, currentBlock); currentBlock = {}; currentChildBlock = null; } else { currentBlock = {}; } } addLine(groupPattern, l); } function done() { currentBlock = addChildBlock(currentBlock, currentChildBlock); eachBlockCallback(null, currentBlock); doneCallback(); } function addChildBlock(parent, child) { if (child) { if (!parent.groups) { parent.groups = []; } parent.groups.push(child); } return parent; } function addLine(patterns, line) { if (patterns) { patterns.forEach(function(pattern) { if (pattern.test(line)) { if (!currentChildBlock) { currentChildBlock = {}; } else { currentBlock = addChildBlock(currentBlock, currentChildBlock); currentChildBlock = {}; } } }); } var match = /^(\w+)\=(.+)/.exec(line); if (match) { if (currentChildBlock) { currentChildBlock[match[1]] = match[2]; } else if(currentBlock) { currentBlock[match[1]] = match[2]; } } } };