43 lines
900 B
JavaScript
43 lines
900 B
JavaScript
'use strict'
|
|
|
|
var xtend = require('xtend')
|
|
var removePosition = require('unist-util-remove-position')
|
|
|
|
module.exports = parse
|
|
|
|
var lineFeed = '\n'
|
|
var lineBreaksExpression = /\r\n|\r/g
|
|
|
|
// Parse the bound file.
|
|
function parse() {
|
|
var self = this
|
|
var value = String(self.file)
|
|
var start = {line: 1, column: 1, offset: 0}
|
|
var content = xtend(start)
|
|
var node
|
|
|
|
// Clean non-unix newlines: `\r\n` and `\r` are all changed to `\n`.
|
|
// This should not affect positional information.
|
|
value = value.replace(lineBreaksExpression, lineFeed)
|
|
|
|
// BOM.
|
|
if (value.charCodeAt(0) === 0xfeff) {
|
|
value = value.slice(1)
|
|
|
|
content.column++
|
|
content.offset++
|
|
}
|
|
|
|
node = {
|
|
type: 'root',
|
|
children: self.tokenizeBlock(value, content),
|
|
position: {start: start, end: self.eof || xtend(start)}
|
|
}
|
|
|
|
if (!self.options.position) {
|
|
removePosition(node, true)
|
|
}
|
|
|
|
return node
|
|
}
|