diff --git a/format.c b/format.c
index ef96dad..62657a2 100644
--- a/format.c
+++ b/format.c
@@ -93,18 +93,40 @@ internal_implicit_link_p(FILE *input)
return ret;
}
+void
+get_linkname(FILE *input, char *out)
+{
+ char c;
+ while ((c = fgetc(input)) != '}') {
+ if (c == EOF)
+ die("End of file encountered while parsing link name.");
+ else if (c == '\n')
+ c = ' ';
+ *(out++) = c;
+ }
+ *out = '\0';
+}
+
+void
+get_link(FILE *input, char *out)
+{
+ char c;
+ while (((c = fgetc(input)) != ' ') && c != '\n') {
+ if (c == EOF)
+ die("End of file encountered while parsing link.");
+ *(out)++ = c;
+ }
+ *out = '\0';
+}
+
void
emit_external_link(FILE *input, FILE *output)
{
- char link[1024] = {0};
- char *link_ptr = link;
- while ((*(link_ptr++) = fgetc(input)) != ' ');
- *(link_ptr - 1) = '\0';
+ char link[1024];
+ get_link(input, link);
- char linkname[1024] = {0};
- char *linkname_ptr = linkname;
- while ((*(linkname_ptr++) = fgetc(input)) != '}');
- *(linkname_ptr - 1) = '\0';
+ char linkname[1024];
+ get_linkname(input, linkname);
fprintf(output, "[%s]", link, linkname);
}
@@ -114,7 +136,7 @@ emit_internal_implicit_link(FILE *input, FILE *output)
{
fseek(input, -1, SEEK_CUR);
- char page[1024] = {0};
+ char page[1024];
char *page_ptr = page;
while ((*(page_ptr++) = fgetc(input)) != '}');
@@ -128,16 +150,11 @@ emit_internal_explicit_link(FILE *input, FILE *output)
{
fseek(input, -1, SEEK_CUR);
- char page[1024] = {0};
- char *page_ptr = page;
+ char page[1024];
+ get_link(input, page);
- while ((*(page_ptr++) = fgetc(input)) != ' ');
- *(page_ptr - 1) = '\0';
-
- char linkname[1024] = {0};
- char *linkname_ptr = linkname;
- while ((*(linkname_ptr++) = fgetc(input)) != '}');
- *(linkname_ptr - 1) = '\0';
+ char linkname[1024];
+ get_linkname(input, linkname);
fprintf(output, "{%s}", page, linkname);
}