mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
101 lines
3.8 KiB
JavaScript
101 lines
3.8 KiB
JavaScript
var xpath = require('xpath');
|
|
var dom = require('xmldom').DOMParser;
|
|
var fs = require('fs');
|
|
var _ = require('underscore');
|
|
var async = require('async');
|
|
|
|
function generate(directory, primary_callback) {
|
|
var modules = [];
|
|
return fs.readFile(directory + 'index.xml', 'utf8', (err, xml) => {
|
|
if (err) throw err;
|
|
var doc = new dom().parseFromString(xml);
|
|
var nodes = xpath.select('/doxygenindex/compound[@kind="dir"]', doc);
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
var refid = nodes[i].getAttribute('refid');
|
|
var name = nodes[i].firstChild.firstChild.toString();
|
|
modules.push({name: name, refid: refid});
|
|
}
|
|
const root_module = _.find(modules, (module) => {
|
|
return _.last(module.name.split('/')) == 'xlnt';
|
|
});
|
|
const root_name = root_module.name;
|
|
modules = _.filter(modules, (module) => {
|
|
return module.name.indexOf(root_name) >= 0 && module.name !== root_name;
|
|
});
|
|
return async.mapSeries(modules, (module, module_callback) => {
|
|
return fs.readFile(directory + module.refid + '.xml', 'utf8', (err, xml) => {
|
|
if (err) throw err;
|
|
var doc = new dom().parseFromString(xml);
|
|
var nodes = xpath.select('/doxygen/compounddef/innerfile', doc);
|
|
module.source_files = [];
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
var refid = nodes[i].getAttribute('refid');
|
|
var name = nodes[i].firstChild.toString();
|
|
module.source_files.push({name: name, refid: refid});
|
|
}
|
|
return async.map(module.source_files, (source_file, source_file_callback) => {
|
|
return fs.readFile(directory + source_file.refid + '.xml', 'utf8', (err, xml) => {
|
|
if (err) throw err;
|
|
var doc = new dom().parseFromString(xml);
|
|
var nodes = xpath.select('/doxygen/compounddef/innerclass', doc);
|
|
module.class_files = [];
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
var refid = nodes[i].getAttribute('refid');
|
|
var name = nodes[i].firstChild.toString();
|
|
module.class_files.push({name: name, refid: refid});
|
|
}
|
|
return async.map(module.class_files, (class_file, class_file_callback) => {
|
|
return fs.readFile(directory + class_file.refid + '.xml', 'utf8', (err, xml) => {
|
|
if (err) throw err;
|
|
var doc = new dom().parseFromString(xml);
|
|
var nodes = xpath.select('/doxygen/compounddef/sectiondef/memberdef[@prot="public"]', doc);
|
|
var members = [];
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
var member_data = {id: nodes[i].getAttribute('id')};
|
|
var child = nodes[i].firstChild;
|
|
while (child != nodes[i].lastChild) {
|
|
if (child.textContent.trim()) {
|
|
member_data[child.nodeName] = child.textContent.trim();
|
|
}
|
|
child = child.nextSibling;
|
|
}
|
|
members.push(member_data);
|
|
}
|
|
class_file.members = members;
|
|
return class_file_callback(null, class_file);
|
|
});
|
|
}, (err, data) => {
|
|
return source_file_callback(null, _.flatten(data, true));
|
|
});
|
|
});
|
|
}, (err, data) => {
|
|
module.classes = _.flatten(data, true);
|
|
return module_callback(null, module);
|
|
});
|
|
});
|
|
}, (err, data) => {
|
|
return primary_callback(null, _.flatten(data, true));
|
|
});
|
|
});
|
|
}
|
|
|
|
generate('doxyxml/', function(err, data) {
|
|
console.log('# API Reference');
|
|
for (var i = 0; i < data.length; i++) {
|
|
var module = data[i];
|
|
var module_name = _.last(module.name.split('/'));
|
|
console.log('##', module_name.charAt(0).toUpperCase() + module_name.slice(1), 'Module');
|
|
for (var j = 0; j < module.classes.length; j++) {
|
|
var class_ = module.classes[j];
|
|
console.log('###', _.last(class_.name.split('::')));
|
|
for (var k = 0; k < class_.members.length; k++) {
|
|
var member = class_.members[k];
|
|
console.log('####', '```' + member.definition + member.argsstring + '```');
|
|
if (member.briefdescription) {
|
|
console.log(member.briefdescription);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|