-/* $Id: libmdoc.h,v 1.48 2010/05/17 22:11:42 kristaps Exp $ */
+/* $Id: libmdoc.h,v 1.62 2010/08/20 01:02:07 schwarze Exp $ */
/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
+ * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
* 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 {
- void *data;
- mandocmsg msg;
+ void *data; /* private application data */
+ mandocmsg msg; /* message callback */
int flags;
#define MDOC_HALT (1 << 0) /* error in parse: halt */
#define MDOC_LITERAL (1 << 1) /* in a literal scope */
#define MDOC_NEWLINE (1 << 3) /* first macro/text in a line */
#define MDOC_PHRASELIT (1 << 4) /* literal within a partila phrase */
#define MDOC_PPHRASE (1 << 5) /* within a partial phrase */
- int pflags;
- enum mdoc_next next;
- struct mdoc_node *last;
- struct mdoc_node *first;
- struct mdoc_meta meta;
+#define MDOC_FREECOL (1 << 6) /* `It' invocation should close */
+#define MDOC_SYNOPSIS (1 << 7) /* SYNOPSIS-style formatting */
+ enum mdoc_next next; /* where to put the next node */
+ struct mdoc_node *last; /* the last node parsed */
+ struct mdoc_node *first; /* the first node parsed */
+ struct mdoc_meta meta; /* document meta-data */
enum mdoc_sec lastnamed;
enum mdoc_sec lastsec;
+ struct regset *regs; /* registers */
};
-enum merr {
- ETAILWS = 0,
- EQUOTPARM,
- EQUOTTERM,
- EARGVAL,
- 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,
- EFONT,
- EBADDATE,
- ENUMFMT,
- ENOWIDTH,
- EUTSNAME,
- EOBS,
- EIMPBRK,
- EIGNE,
- EOPEN,
- EQUOTPHR,
- ENOCTX,
- ELIB,
- EBADCHILD,
- ENOTYPE,
- EBADCOMMENT,
- MERRMAX
-};
-
-#define MACRO_PROT_ARGS struct mdoc *m, enum mdoct tok, \
- int line, int ppos, int *pos, char *buf
+#define MACRO_PROT_ARGS struct mdoc *m, \
+ enum mdoct tok, \
+ int line, \
+ int ppos, \
+ int *pos, \
+ char *buf
struct mdoc_macro {
int (*fp)(MACRO_PROT_ARGS);
int mdoc_head_alloc(struct mdoc *, int, int, enum mdoct);
int mdoc_tail_alloc(struct mdoc *, int, int, enum mdoct);
int mdoc_body_alloc(struct mdoc *, int, int, enum mdoct);
+int mdoc_endbody_alloc(struct mdoc *m, int line, int pos,
+ enum mdoct tok, struct mdoc_node *body,
+ enum mdoc_endbody end);
void mdoc_node_delete(struct mdoc *, struct mdoc_node *);
void mdoc_hash_init(void);
enum mdoct mdoc_hash_find(const char *);
const char *mdoc_a2arch(const char *);
const char *mdoc_a2vol(const char *);
const char *mdoc_a2msec(const char *);
-int mdoc_valid_pre(struct mdoc *,
- const struct mdoc_node *);
+int mdoc_valid_pre(struct mdoc *, struct mdoc_node *);
int mdoc_valid_post(struct mdoc *);
int mdoc_action_pre(struct mdoc *,
- const struct mdoc_node *);
+ struct mdoc_node *);
int mdoc_action_post(struct mdoc *);
enum margverr mdoc_argv(struct mdoc *, int, enum mdoct,
struct mdoc_arg **, int *, char *);