initi.doc/templates/initi/static/scripts/parse_complex_type.js

103 lines
2.4 KiB
JavaScript

/**
* Created by Aleksey Chichenkov <a.chichenkov@initi.ru> on 9/20/18.
*/
var helper = require('jsdoc/util/templateHelper');
// var linkto = helper.linkto;
var test_0 = "v2.map(v2.map(v2.string, v2.list(v2.integer)), v2.list(v2.pair(v2.list(v2.map(v2.map(v2.string, v2.list(v2.integer)), v2.list(v2.pair(v2.string, v2.vc)))), v2.vc)))";
var test_1 = "v2.map(v2.map(v2.string, v2.list(v2.integer)), v2.list(v2.pair(v2.string, v2.vc)))";
var test_2 = "v2.string";
var test_3 = "v2.string()";
var test_4 = "v2.string(v2.map)";
var split_args = function (_str) {
var delta = 0;
var found = 0;
for (var a = 0; a < _str.length; a++) {
var char = _str[a];
switch (char) {
case "(":
delta++;
break;
case ")":
delta--;
break;
case ",":
found = delta == 0;
break;
}
if (found) break;
}
if (found) {
var left = _str.substring(0, a);
var right = _str.substring(a + 1, _str.length);
return [left, right]
}
return [_str];
};
var recursive = function (_str, _class, _alias) {
var _id = _str.replace(" ", "");
var rx = /(.*?)\((.*)\)/im;
var res = _id.match(rx);
var _full_id = replace_type_def(_id);
if(res == null) return helper.linkto(_full_id, (_alias ? _alias : _id), _class);
//if (res == null) return _id;
var first = res[1];
var second = res[2];
var result = helper.linkto(first, _alias, _class);
//var result = first;
if (second === "") return result;
var args = split_args(second);
result += "(";
if (args[0]) result += recursive(args[0], _class);
if (args[1]){
result += ", ";
result += recursive(args[1], _class);
}
result += ")";
return result;
};
var linkto = function (_id, _alias, _class) {
return recursive(_id, _class, _alias);
};
var replace_type_def = function(_ln){
var td = typedefs[_ln];
if(!td) return _ln;
var link = td.type.names[0];
return link;
}
var replace_enters_to_br = function(_str){
// console.log(_str)
var out = _str;
while(out.match("\n")) out = out.replace("\n", "<br>");
// console.log(out);
return out;
}
module.exports = {
linkto: linkto,
replace_enters_to_br: replace_enters_to_br,
replace_type_def: replace_type_def
};