This repository has been archived on 2020-11-02. You can view files and clone it, but cannot push or open issues or pull requests.
TripSit_Suite/node_modules/vfile-location/index.js
2020-11-01 22:46:04 +00:00

77 lines
1.6 KiB
JavaScript

'use strict'
module.exports = factory
function factory(file) {
var contents = indices(String(file))
var toPoint = offsetToPointFactory(contents)
return {
toPoint: toPoint,
toPosition: toPoint,
toOffset: pointToOffsetFactory(contents)
}
}
// Factory to get the line and column-based `point` for `offset` in the bound
// indices.
function offsetToPointFactory(indices) {
return offsetToPoint
// Get the line and column-based `point` for `offset` in the bound indices.
function offsetToPoint(offset) {
var index = -1
var length = indices.length
if (offset < 0) {
return {}
}
while (++index < length) {
if (indices[index] > offset) {
return {
line: index + 1,
column: offset - (indices[index - 1] || 0) + 1,
offset: offset
}
}
}
return {}
}
}
// Factory to get the `offset` for a line and column-based `point` in the
// bound indices.
function pointToOffsetFactory(indices) {
return pointToOffset
// Get the `offset` for a line and column-based `point` in the bound
// indices.
function pointToOffset(point) {
var line = point && point.line
var column = point && point.column
if (!isNaN(line) && !isNaN(column) && line - 1 in indices) {
return (indices[line - 2] || 0) + column - 1 || 0
}
return -1
}
}
// Get indices of line-breaks in `value`.
function indices(value) {
var result = []
var index = value.indexOf('\n')
while (index !== -1) {
result.push(index + 1)
index = value.indexOf('\n', index + 1)
}
result.push(value.length + 1)
return result
}