UNPKG

passive-voice

Version:

detect passive voice

206 lines (200 loc) 2.65 kB
var irregulars = [ 'awoken', 'been', 'born', 'beat', 'become', 'begun', 'bent', 'beset', 'bet', 'bid', 'bidden', 'bound', 'bitten', 'bled', 'blown', 'broken', 'bred', 'brought', 'broadcast', 'built', 'burnt', 'burst', 'bought', 'cast', 'caught', 'chosen', 'clung', 'come', 'cost', 'crept', 'cut', 'dealt', 'dug', 'dived', 'done', 'drawn', 'dreamt', 'driven', 'drunk', 'eaten', 'fallen', 'fed', 'felt', 'fought', 'found', 'fit', 'fled', 'flung', 'flown', 'forbidden', 'forgotten', 'foregone', 'forgiven', 'forsaken', 'frozen', 'gotten', 'given', 'gone', 'ground', 'grown', 'hung', 'heard', 'hidden', 'hit', 'held', 'hurt', 'kept', 'knelt', 'knit', 'known', 'laid', 'led', 'leapt', 'learnt', 'left', 'lent', 'let', 'lain', 'lighted', 'lost', 'made', 'meant', 'met', 'misspelt', 'mistaken', 'mown', 'overcome', 'overdone', 'overtaken', 'overthrown', 'paid', 'pled', 'proven', 'put', 'quit', 'read', 'rid', 'ridden', 'rung', 'risen', 'run', 'sawn', 'said', 'seen', 'sought', 'sold', 'sent', 'set', 'sewn', 'shaken', 'shaven', 'shorn', 'shed', 'shone', 'shod', 'shot', 'shown', 'shrunk', 'shut', 'sung', 'sunk', 'sat', 'slept', 'slain', 'slid', 'slung', 'slit', 'smitten', 'sown', 'spoken', 'sped', 'spent', 'spilt', 'spun', 'spit', 'split', 'spread', 'sprung', 'stood', 'stolen', 'stuck', 'stung', 'stunk', 'stridden', 'struck', 'strung', 'striven', 'sworn', 'swept', 'swollen', 'swum', 'swung', 'taken', 'taught', 'torn', 'told', 'thought', 'thrived', 'thrown', 'thrust', 'trodden', 'understood', 'upheld', 'upset', 'woken', 'worn', 'woven', 'wed', 'wept', 'wound', 'won', 'withheld', 'withstood', 'wrung', 'written' ]; var exceptions = [ 'indeed', ]; var re = new RegExp('\\b(am|are|were|being|is|been|was|be)\\b\\s*([\\w]+ed|' + irregulars.join('|') + ')\\b', 'gi'); var byRe; // lazly construct module.exports = function (text, options) { var r = (options && options.by) ? (byRe || constructByRe()) : re; // not sorry var suggestions = []; while (match = r.exec(text)) { if (exceptions.indexOf(match[2].toLowerCase()) === -1) { suggestions.push({ index: match.index, offset: match[0].length }); } } return suggestions; } // lol function constructByRe () { return byRe = new RegExp(re.toString().slice(1, -3) + '\\s*by\\b', 'gi'); }