=================================================================== RCS file: /cvs/mandoc/Attic/libmdocml.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -p -r1.3 -r1.4 --- mandoc/Attic/libmdocml.c 2008/11/22 20:15:34 1.3 +++ mandoc/Attic/libmdocml.c 2008/11/23 11:05:25 1.4 @@ -1,4 +1,4 @@ -/* $Id: libmdocml.c,v 1.3 2008/11/22 20:15:34 kristaps Exp $ */ +/* $Id: libmdocml.c,v 1.4 2008/11/23 11:05:25 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -73,6 +73,8 @@ static int md_run_leave(const struct md_args *, static ssize_t md_buf_fill(struct md_rbuf *); static int md_buf_flush(struct md_mbuf *); static int md_buf_putchar(struct md_mbuf *, char); +static int md_buf_putstring(struct md_mbuf *, + const char *); static int md_buf_puts(struct md_mbuf *, const char *, size_t); @@ -129,6 +131,13 @@ md_buf_putchar(struct md_mbuf *buf, char c) static int +md_buf_putstring(struct md_mbuf *buf, const char *p) +{ + return(md_buf_puts(buf, p, strlen(p))); +} + + +static int md_buf_puts(struct md_mbuf *buf, const char *p, size_t sz) { size_t ssz; @@ -299,35 +308,90 @@ md_line_dummy(const struct md_args *args, struct md_mb static int -md_exit_html4_strict(const struct md_args *args, struct md_mbuf *p) +md_exit_html4_strict(const struct md_args *args, struct md_mbuf *out) { + char *tail; - assert(p); + assert(out); assert(args); + + tail = " \n" + " \n" + "\n"; + + if ( ! md_buf_putstring(out, tail)) + return(0); + return(1); } static int -md_init_html4_strict(const struct md_args *args, struct md_mbuf *p) +md_init_html4_strict(const struct md_args *args, struct md_mbuf *out) { + char *head; - assert(p); + assert(out); assert(args); + + head = "\n" + " \n" + " Manual Page\n" + " \n" + " \n" + "
\n";
+
+	if ( ! md_buf_putstring(out, head))
+		return(0);
+
 	return(1);
 }
 
 
+struct md_roff_macro {
+	char		 name[2];
+	int		 flags;
+#define	MD_PARSED	(1 << 0)
+#define	MD_CALLABLE	(1 << 1)
+#define	MD_TITLE	(1 << 2)
+};
+
+struct md_roff_macro[] = {
+	{ "Dd",		MD_TITLE 	},
+	{ "Dt",		MD_TITLE 	},
+	{ "Os",		MD_TITLE 	},
+	{ "Sh",		MD_PARSED 	},
+};
+
+
 static int
+md_roff(struct md_mbuf *out, const struct md_rbuf *in, 
+		const char *buf, size_t sz)
+{
+
+	assert(out);
+	assert(in);
+	assert(buf);
+	assert(sz >= 1);
+}
+
+
+static int
 md_line_html4_strict(const struct md_args *args, struct md_mbuf *out, 
 		const struct md_rbuf *in, const char *buf, size_t sz)
 {
 
 	assert(args);
-	assert(buf);
-	assert(out);
 	assert(in);
-	(void)sz;
 
-	return(1);
+	if (0 == sz) {
+		warnx("%s: blank line (line %zu)", in->name, in->line);
+		return(0);
+	}
+
+	if ('.' == *buf) {
+		return(1);
+	}
+	
+	return(md_buf_puts(out, buf, sz));
 }