#include "doc_extract.h"
#include "tools.h"
-static char **grab_doc(char **lines, unsigned int num)
+static char **grab_doc(char **lines, unsigned int **linemap)
{
char **ret;
- unsigned int i;
+ unsigned int i, num;
bool printing = false;
- ret = talloc_array(NULL, char *, num+1);
+ ret = talloc_array(NULL, char *, talloc_array_length(lines));
+ *linemap = talloc_array(ret, unsigned int, talloc_array_length(lines));
num = 0;
for (i = 0; lines[i]; i++) {
ret[num++] = talloc_strdup(ret, lines[i]+2);
else
errx(1, "Malformed line %u", i);
+ (*linemap)[num-1] = i;
}
}
ret[num] = NULL;
static struct doc_section *new_section(struct list_head *list,
const char *function,
- const char *type)
+ const char *type,
+ unsigned int srcline)
{
struct doc_section *d;
char *lowertype;
d->type = lowertype;
d->lines = NULL;
d->num_lines = 0;
+ d->srcline = srcline;
list_add_tail(list, &d->list);
return d;
curr->lines[curr->num_lines++] = talloc_strdup(curr->lines, line);
}
-struct list_head *extract_doc_sections(char **rawlines, unsigned int num)
+struct list_head *extract_doc_sections(char **rawlines)
{
- char **lines = grab_doc(rawlines, num);
+ unsigned int *linemap;
+ char **lines = grab_doc(rawlines, &linemap);
const char *function = NULL;
struct doc_section *curr = NULL;
unsigned int i;
funclen = is_summary_line(lines[i]);
if (funclen) {
function = talloc_strndup(list, lines[i], funclen);
- curr = new_section(list, function, "summary");
+ curr = new_section(list, function, "summary",
+ linemap[i]);
add_line(curr, lines[i] + funclen + 3);
- curr = new_section(list, function, "description");
+ curr = new_section(list, function, "description",
+ linemap[i]);
} else if ((type = is_section(list, lines[i], &extra)) != NULL){
- curr = new_section(list, function, type);
+ curr = new_section(list, function, type, linemap[i]);
if (!streq(extra, "")) {
add_line(curr, extra);
curr = NULL;