reclass-doc
Version:
Reclass model documentation generator.
111 lines (110 loc) • 3.88 kB
JavaScript
;
/**
* Reclass doc generator
*
* @author Jiri Hybek <jiri@hybek.cz>
* @license Apache-2.0 (c) 2017 Jiri Hybek
*/
Object.defineProperty(exports, "__esModule", { value: true });
var yaml_js_1 = require("yaml-js");
var TOKEN_TYPE;
(function (TOKEN_TYPE) {
TOKEN_TYPE[TOKEN_TYPE["MAP"] = 0] = "MAP";
TOKEN_TYPE[TOKEN_TYPE["SEQUENCE"] = 1] = "SEQUENCE";
TOKEN_TYPE[TOKEN_TYPE["VALUE"] = 2] = "VALUE";
})(TOKEN_TYPE = exports.TOKEN_TYPE || (exports.TOKEN_TYPE = {}));
/**
* YAML tokenizer calss
*/
var YamlTokenizer = (function () {
function YamlTokenizer() {
}
/**
* Parse yaml from string
*
* @param src Source
*/
YamlTokenizer.prototype.parse = function (src) {
var ast = yaml_js_1.compose(src);
var lastPointer = 0;
var parseNode = function (node, path, skipComments) {
if (path === void 0) { path = null; }
if (skipComments === void 0) { skipComments = false; }
if (!node)
return null;
var token = {
path: path,
tag: node.tag,
type: null,
comment: [],
value: null,
line: node.start_mark.line,
column: node.start_mark.column,
pointer: node.start_mark.pointer
};
//Parse comments
if (!skipComments) {
var haystack = src.substr(lastPointer, node.start_mark.pointer - lastPointer);
var _lines_1 = haystack.split("\n");
for (var i = 0; i < _lines_1.length; i++) {
var _line = _lines_1[i];
if (_line.trim().substr(0, 1) == "#")
token.comment.push(_line.trim().substr(1).trim());
}
lastPointer = node.start_mark.pointer;
}
//Parse value
if (node.tag == 'tag:yaml.org,2002:map') {
token.type = TOKEN_TYPE.MAP;
token.value = {};
for (var i = 0; i < node.value.length; i++) {
var key = parseNode(node.value[i][0], path + "." + i + "$");
var value = parseNode(node.value[i][1], path + '.' + key.value, true);
value.comment = key.comment.concat(value.comment);
token.value[key.value] = value;
}
}
else if (node.tag == 'tag:yaml.org,2002:seq') {
token.type = TOKEN_TYPE.SEQUENCE;
token.value = [];
for (var i = 0; i < node.value.length; i++) {
var value = parseNode(node.value[i], path + "." + i);
token.value.push(value);
}
}
else {
token.type = TOKEN_TYPE.VALUE;
token.value = node.value;
}
return token;
};
//Parse document comments
var _lines = src.split("\n");
var _docComment = [];
var _breaked = false;
for (var i = 0; i < _lines.length; i++) {
var _line = _lines[i];
if (_line.trim().substr(0, 1) == "#") {
_docComment.push(_line.trim().substr(1).trim());
lastPointer += _line.length + 1;
}
else if (_line.trim() == "") {
_breaked = true;
break;
}
else {
break;
}
}
if (!_breaked)
lastPointer = 0;
var rootNode = parseNode(ast, 'root', true);
if (!rootNode)
return null;
if (_breaked)
rootNode.comment = _docComment.concat(rootNode.comment);
return rootNode;
};
return YamlTokenizer;
}());
exports.YamlTokenizer = YamlTokenizer;