updates
This commit is contained in:
parent
e9d3bb0b61
commit
776e9acd03
10 changed files with 1214 additions and 6 deletions
194
templates/initi/search_inheritance2.js
Normal file
194
templates/initi/search_inheritance2.js
Normal file
|
@ -0,0 +1,194 @@
|
|||
/**
|
||||
* Created by Aleksey Chichenkov <a.chichenkov@initi.ru> on 12/6/18.
|
||||
*/
|
||||
|
||||
var fs = require("fs");
|
||||
var path = require('jsdoc/path');
|
||||
|
||||
var rx_class_declarator_std = /var {1,}?(.*?) {1,}?= {1,}?(.*?)\.inherit\(\{/i;
|
||||
var rx_requires = /var {1,}?(.*?) {1,}?= {1,}?require\("(.*?)"\)/i;
|
||||
|
||||
var __tree_list = Object.create(null);
|
||||
var __root;
|
||||
var map = {};
|
||||
var destination;
|
||||
|
||||
|
||||
var find = function (_conf) {
|
||||
__root = new Node();
|
||||
|
||||
// console.log("start find");
|
||||
|
||||
destination = path.normalize(_conf.source.include_3[0]);
|
||||
|
||||
// console.log("=================");
|
||||
// console.log("===== START =====");
|
||||
// console.log("=================");
|
||||
// console.log("=================");
|
||||
// console.log("====== END ======");
|
||||
// console.log("=================");
|
||||
|
||||
recursive(destination);
|
||||
|
||||
|
||||
// console.log("=================================================");
|
||||
// console.log("var map = JSON.parse('%s');", JSON.stringify(map));
|
||||
// console.log("=================================================");
|
||||
|
||||
generate_tree();
|
||||
|
||||
// console.log("=================================================");
|
||||
// console.log("JSON.parse('%s');", JSON.stringify(__tree_list));
|
||||
// console.log("=================================================");
|
||||
|
||||
return __root.get_struct();
|
||||
};
|
||||
|
||||
var recursive = function(_path){
|
||||
|
||||
if(fs.lstatSync(_path).isDirectory()) {
|
||||
// console.log("DIRECTORY: ",_path);
|
||||
|
||||
var arr = fs.readdirSync(_path);
|
||||
|
||||
for (var a = 0; a < arr.length; a++) {
|
||||
var name = arr[a];
|
||||
recursive(_path + "/" + name);
|
||||
}
|
||||
} else {
|
||||
// console.log("FILE: ", _path);
|
||||
parse_file(_path);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var parse_file = function(_path){
|
||||
let info = Object.create(null);
|
||||
info.requires = Object.create(null);
|
||||
info.classes = Object.create(null);
|
||||
|
||||
var file = fs.readFileSync(_path, "utf8");
|
||||
var requires = exec_all(rx_requires, file);
|
||||
if(requires.length > 0) {
|
||||
for(var a = 0; a < requires.length; a++){
|
||||
info.requires[requires[a].subs[0]] = update_link_file(requires[a].subs[1])
|
||||
}
|
||||
}
|
||||
|
||||
var classes = exec_all(rx_class_declarator_std, file);
|
||||
if(classes.length > 0) {
|
||||
for(var a = 0; a < classes.length; a++){
|
||||
info.classes[classes[a].subs[0]] = classes[a].subs[1]
|
||||
}
|
||||
}
|
||||
|
||||
map[_path] = info;
|
||||
};
|
||||
|
||||
|
||||
var exec_all = function(_rx, _string){
|
||||
var out = [];
|
||||
var result;
|
||||
while(result = _string.match(_rx)){
|
||||
|
||||
result = convert_result(result);
|
||||
// console.log("result", result);
|
||||
|
||||
_string = _string.substring(result.index + result.match.length, _string.length);
|
||||
out.push(result);
|
||||
}
|
||||
return out
|
||||
};
|
||||
|
||||
var convert_result = function(_exec_result) {
|
||||
var info = Object.create(null);
|
||||
info.index = _exec_result.index;
|
||||
info.match = _exec_result[0];
|
||||
info.subs = [];
|
||||
|
||||
for (var a = 1; a < _exec_result.length; a++) {
|
||||
info.subs.push(_exec_result[a]);
|
||||
}
|
||||
|
||||
return info;
|
||||
};
|
||||
|
||||
var update_link_file = function (_path) {
|
||||
var arr = destination.split("/");
|
||||
// arr.pop();
|
||||
return arr.join("/") + "/" + _path + ".js"
|
||||
};
|
||||
|
||||
|
||||
var generate_tree = function() {
|
||||
__root.name = "BaseClass";
|
||||
|
||||
for (var path in map) {
|
||||
var file_info = map[path];
|
||||
recursive_tree(path, file_info);
|
||||
}
|
||||
|
||||
for(var name in __tree_list){
|
||||
var n = __tree_list[name];
|
||||
if(n.inherit === "base_class"){
|
||||
__root.children.push(n);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var recursive_tree = function (_file_name, _file_info, _child) {
|
||||
if(!_file_info){
|
||||
// console.log("ERROR: ", _file_name);
|
||||
return;
|
||||
}
|
||||
|
||||
var classes = _file_info.classes;
|
||||
var requires = _file_info.requires;
|
||||
|
||||
for(var name in classes){
|
||||
var path = _file_name + ":" + name;
|
||||
var node = __tree_list[path];
|
||||
if(!node){
|
||||
node = new Node();
|
||||
node.name = name;
|
||||
__tree_list[path] = node;
|
||||
}
|
||||
|
||||
var inheritance = classes[name];
|
||||
|
||||
var req = requires[inheritance];
|
||||
|
||||
// console.log("CLASS: %s, REQUIRE: %s", name, req);
|
||||
|
||||
if(req){
|
||||
if(_child && node.children.indexOf(_child) === -1){
|
||||
_child.inherit = name;
|
||||
node.children.push(_child);
|
||||
}
|
||||
|
||||
var fi = map[req];
|
||||
recursive_tree(req, fi, node);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var Node = function(){
|
||||
this.children = [];
|
||||
this.name = "";
|
||||
this.inherit = "base_class";
|
||||
};
|
||||
|
||||
Node.prototype = {
|
||||
get_struct: function () {
|
||||
var children = [];
|
||||
for(var a = 0; a < this.children.length; a++){
|
||||
children.push(this.children[a].get_struct());
|
||||
}
|
||||
return {
|
||||
name: this.name,
|
||||
children: children
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.find = find;
|
Loading…
Add table
Add a link
Reference in a new issue