UNPKG

reclass-doc

Version:

Reclass model documentation generator.

111 lines (110 loc) 3.88 kB
"use strict"; /** * 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;