motion
Version:
motion - moving development forward
33 lines (28 loc) • 1.12 kB
JavaScript
// Copyright 2014, 2015 Simon Lydell
// X11 (“MIT”) Licensed. (See LICENSE.)
var leftPad = require("left-pad")
function get(options, key, defaultValue) {
return (key in options ? options[key] : defaultValue)
}
function lineNumbers(code, options) {
var getOption = get.bind(null, options || {})
var transform = getOption("transform", Function.prototype)
var padding = getOption("padding", " ")
var before = getOption("before", " ")
var after = getOption("after", " | ")
var start = getOption("start", 1)
var isArray = Array.isArray(code)
var lines = (isArray ? code : code.split("\n"))
var end = start + lines.length - 1
var width = String(end).length
var numbered = lines.map(function(line, index) {
var number = start + index
var params = {before: before, number: number, width: width, after: after,
line: line}
transform(params)
return params.before + leftPad(params.number, width, padding) +
params.after + params.line
})
return (isArray ? numbered : numbered.join("\n"))
}
module.exports = lineNumbers