-/* $Id: libmdoc.h,v 1.6 2009/04/12 19:45:26 kristaps Exp $ */
+/* $Id: libmdoc.h,v 1.14 2009/07/07 09:29:15 kristaps Exp $ */
/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
+ * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
struct mdoc_cb cb;
void *htab;
int flags;
-#define MDOC_HALT (1 << 0)
-#define MDOC_LITERAL (1 << 1)
+#define MDOC_HALT (1 << 0) /* Error in parse. Halt. */
+#define MDOC_LITERAL (1 << 1) /* In a literal scope. */
+#define MDOC_PBODY (1 << 2) /* In the document body. */
int pflags;
enum mdoc_next next;
struct mdoc_node *last;
enum mdoc_sec lastsec;
};
+enum merr {
+ ETAILWS = 0,
+ ECOLEMPTY,
+ EARGVPARM,
+ EQUOTPARM,
+ EQUOTTERM,
+ EMALLOC,
+ EARGVAL,
+ ENOCALL,
+ EBODYPROL,
+ EPROLBODY,
+ ETEXTPROL,
+ ENOBLANK,
+ ETOOLONG,
+ EESCAPE,
+ EPRINT,
+ ENODAT,
+ ENOPROLOGUE,
+ ELINE,
+ EATT,
+ ENAME,
+ ELISTTYPE,
+ EDISPTYPE,
+ EMULTIDISP,
+ EMULTILIST,
+ ESECNAME,
+ ENAMESECINC,
+ EARGREP,
+ EBOOL,
+ ECOLMIS,
+ ENESTDISP,
+ EMISSWIDTH,
+ EWRONGMSEC,
+ ESECOOO,
+ ESECREP,
+ EBADSTAND,
+ ENOMULTILINE,
+ EMULTILINE,
+ ENOLINE,
+ EPROLOOO,
+ EPROLREP,
+ EBADMSEC,
+ EBADSEC,
+ EFONT,
+ EBADDATE,
+ ENUMFMT,
+ ENOWIDTH,
+ EUTSNAME,
+ EOBS,
+ EMACPARM,
+ EIMPBRK,
+ EIGNE,
+ EOPEN,
+ EQUOTPHR,
+ ENOCTX,
+ ESPACE,
+ MERRMAX
+};
#define MACRO_PROT_ARGS struct mdoc *mdoc, int tok, int line, \
int ppos, int *pos, char *buf
/* Reserved words in arguments treated as text. */
};
-#define mdoc_nwarn(mdoc, node, type, fmt, ...) \
- mdoc_vwarn((mdoc), (node)->line, \
- (node)->pos, (type), (fmt), ##__VA_ARGS__)
-
-#define mdoc_nerr(mdoc, node, fmt, ...) \
- mdoc_verr((mdoc), (node)->line, \
- (node)->pos, (fmt), ##__VA_ARGS__)
-
-#define mdoc_warn(mdoc, type, fmt, ...) \
- mdoc_vwarn((mdoc), (mdoc)->last->line, \
- (mdoc)->last->pos, (type), (fmt), ##__VA_ARGS__)
-
-#define mdoc_err(mdoc, fmt, ...) \
- mdoc_verr((mdoc), (mdoc)->last->line, \
- (mdoc)->last->pos, (fmt), ##__VA_ARGS__)
-
-#define mdoc_msg(mdoc, fmt, ...) \
- mdoc_vmsg((mdoc), (mdoc)->last->line, \
- (mdoc)->last->pos, (fmt), ##__VA_ARGS__)
-
-#define mdoc_pmsg(mdoc, line, pos, fmt, ...) \
- mdoc_vmsg((mdoc), (line), \
- (pos), (fmt), ##__VA_ARGS__)
-
-#define mdoc_pwarn(mdoc, line, pos, type, fmt, ...) \
- mdoc_vwarn((mdoc), (line), \
- (pos), (type), (fmt), ##__VA_ARGS__)
-
-#define mdoc_perr(mdoc, line, pos, fmt, ...) \
- mdoc_verr((mdoc), (line), \
- (pos), (fmt), ##__VA_ARGS__)
-
extern const struct mdoc_macro *const mdoc_macros;
__BEGIN_DECLS
-int mdoc_vwarn(struct mdoc *, int, int,
- enum mdoc_warn, const char *, ...);
-void mdoc_vmsg(struct mdoc *, int, int,
- const char *, ...);
-int mdoc_verr(struct mdoc *, int, int,
- const char *, ...);
+#define mdoc_perr(m, l, p, t) \
+ mdoc_err((m), (l), (p), 1, (t))
+#define mdoc_pwarn(m, l, p, t) \
+ mdoc_err((m), (l), (p), 0, (t))
+#define mdoc_nerr(m, n, t) \
+ mdoc_err((m), (n)->line, (n)->pos, 0, (t))
+#define mdoc_nwarn(m, n, t) \
+ mdoc_err((m), (n)->line, (n)->pos, 1, (t))
+
+int mdoc_err(struct mdoc *, int, int, int, enum merr);
+int mdoc_verr(struct mdoc *, int, int, const char *, ...);
+int mdoc_vwarn(struct mdoc *, int, int, const char *, ...);
+
int mdoc_macro(MACRO_PROT_ARGS);
int mdoc_word_alloc(struct mdoc *,
int, int, const char *);