Фрагмент Javascript для преобразования комментария в стиле doxygen в HTML
-
12-09-2019 - |
Вопрос
По отношению к этот вопрос, Мне было интересно, знает ли кто-нибудь фрагмент кода javascript / библиотеку для преобразования одного комментария doxygen в HTML?
Например,
/** This is a comment block
*
* \b bold text
* \i italic text
*/
было бы преобразовано во что-то вроде:
<p>This is a comment block</p>
<p><b>bold</b> text</p>
<p><i>italic</i> text</p>
Аналогично для всех других тегов doxygen, связанных с форматированием.
Я нашел это уже, что, кажется, является хорошей отправной точкой, если мне придется реализовать это самому, но, возможно, мне не хватает завершенного проекта :-)
Итак, предложения приветствуются!
Решение
Использование существующего инструмента / кодовой базы, которая выполняет по крайней мере часть то, чего вы хотите, - это ваш лучший выбор.Синтаксический анализ - непростая задача, особенно поиск комментариев doxygen в коде, особенно если вы работаете с несколькими языками.Быстрый поиск не выявил никаких особо очевидных проектов, но если вы готовы создать свой собственный, если потребуется, я бы посоветовал начать с самой базы кода doxygen.Это открытый исходный код, и он доступен через SVN или прямая загрузка.Имейте в виду, что doxygen написан на C ++, но если вы сможете следить за действиями синтаксического анализатора (возможно, только для определенного языка), это может сэкономить вам массу работы и предотвратить пропуск угловых регистров и т.д.Все зависит от того, насколько надежным вы хотите видеть свое решение, и будете ли им пользоваться только вы, или в конечном итоге вам придется поддерживать его для других.Удачи вам!
Другие советы
function commentToTag(comment) {
var header = null;
var commentHtml = '';
comment.split('\n').forEach(function (i) {
var array = i.split(' ');
do {
var index = array.indexOf('');
if (index !== -1) array.splice(index, 1);
index = array.indexOf('');
} while (index !== -1);
do {
var index = array.indexOf('*');
if (index !== -1) array.splice(index, 1);
index = array.indexOf('*');
} while (index !== -1);
do {
var index = array.indexOf('/**');
if (index !== -1) array.splice(index, 3);
index = array.indexOf('/**');
} while (index !== -1);
do {
var index = array.indexOf('*/');
if (index !== -1) array.splice(index, 2);
index = array.indexOf('*/');
} while (index !== -1);
if (array.length === 0) return;
if (header === null) {
header = "<p>" + array.join(' ') + "</p>\n";
return;
}
const tag = array.splice(0, 1);
commentHtml += "<p><"+tag + ">"+array.splice(0,1)+"</" +tag+ ">" + array.join(' ') + '</p>\n';
});
return header + commentHtml;
}
var comment = `/** This is a comment block
*
* \i bold text
* \i italic text
*/`;
console.log(commentToTag(comment));