#include "doc_extract.h"
#include "tools.h"
-static char **grab_doc(char **lines, unsigned int **linemap)
+static char **grab_doc(char **lines, unsigned int **linemap,
+ const char *file)
{
char **ret;
unsigned int i, num;
ret[num++] = talloc_strdup(ret, lines[i]+3);
else if (strstarts(lines[i], " *"))
ret[num++] = talloc_strdup(ret, lines[i]+2);
- else
- errx(1, "Malformed line %u", i);
+ else {
+ /* Weird, malformed? */
+ static bool warned;
+ if (!warned) {
+ warnx("%s:%u:"
+ " Expected ' *' in comment.",
+ file, i+1);
+ warned++;
+ }
+ ret[num++] = talloc_strdup(ret, lines[i]);
+ if (strstr(lines[i], "*/"))
+ printing = false;
+ }
(*linemap)[num-1] = i;
}
}
{
unsigned int id_len;
- id_len = strspn(line, IDENT_CHARS" ");
+ /* We allow /, because it can be in (nested) module names. */
+ id_len = strspn(line, IDENT_CHARS" /");
if (id_len == 0)
return 0;
if (strspn(line, " ") == id_len)
static void trim_lines(struct doc_section *curr)
{
unsigned int i, trim = -1;
+ int last_non_empty = -1;
/* Get minimum whitespace prefix. */
for (i = 0; i < curr->num_lines; i++) {
curr->lines[i] += prefix;
else
curr->lines[i] += trim;
+
+ /* All blank? Potential to trim. */
+ if (curr->lines[i][strspn(curr->lines[i], " \t")] != '\0')
+ last_non_empty = i;
}
+
+ /* Remove trailing blank lines. */
+ curr->num_lines = last_non_empty + 1;
}
-struct list_head *extract_doc_sections(char **rawlines)
+struct list_head *extract_doc_sections(char **rawlines, const char *file)
{
unsigned int *linemap;
- char **lines = grab_doc(rawlines, &linemap);
+ char **lines = grab_doc(rawlines, &linemap, file);
const char *function = NULL;
struct doc_section *curr = NULL;
unsigned int i;