mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
/**
|
|
* @author Titus Wormer
|
|
* @copyright 2015 Titus Wormer
|
|
* @license MIT
|
|
* @module remark:parse:parse
|
|
* @fileoverview Parse the document
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var xtend = require('xtend');
|
|
var removePosition = require('unist-util-remove-position');
|
|
|
|
module.exports = parse;
|
|
|
|
var C_NEWLINE = '\n';
|
|
var EXPRESSION_LINE_BREAKS = /\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(EXPRESSION_LINE_BREAKS, C_NEWLINE);
|
|
|
|
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;
|
|
}
|
|
|