-/* $Id: mdoc.h,v 1.95 2010/06/29 19:20:38 schwarze Exp $ */
+/* $Id: mdoc.h,v 1.103 2010/08/20 01:02:07 schwarze Exp $ */
/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
+ * 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
/* What follows is a list of ALL possible macro arguments. */
-/* FIXME: make this into an enum. */
-#define MDOC_Split 0
-#define MDOC_Nosplit 1
-#define MDOC_Ragged 2
-#define MDOC_Unfilled 3
-#define MDOC_Literal 4
-#define MDOC_File 5
-#define MDOC_Offset 6
-#define MDOC_Bullet 7
-#define MDOC_Dash 8
-#define MDOC_Hyphen 9
-#define MDOC_Item 10
-#define MDOC_Enum 11
-#define MDOC_Tag 12
-#define MDOC_Diag 13
-#define MDOC_Hang 14
-#define MDOC_Ohang 15
-#define MDOC_Inset 16
-#define MDOC_Column 17
-#define MDOC_Width 18
-#define MDOC_Compact 19
-#define MDOC_Std 20
-#define MDOC_Filled 21
-#define MDOC_Words 22
-#define MDOC_Emphasis 23
-#define MDOC_Symbolic 24
-#define MDOC_Nested 25
-#define MDOC_Centred 26
-#define MDOC_ARG_MAX 27
+enum mdocargt {
+ MDOC_Split,
+ MDOC_Nosplit,
+ MDOC_Ragged,
+ MDOC_Unfilled,
+ MDOC_Literal,
+ MDOC_File,
+ MDOC_Offset,
+ MDOC_Bullet,
+ MDOC_Dash,
+ MDOC_Hyphen,
+ MDOC_Item,
+ MDOC_Enum,
+ MDOC_Tag,
+ MDOC_Diag,
+ MDOC_Hang,
+ MDOC_Ohang,
+ MDOC_Inset,
+ MDOC_Column,
+ MDOC_Width,
+ MDOC_Compact,
+ MDOC_Std,
+ MDOC_Filled,
+ MDOC_Words,
+ MDOC_Emphasis,
+ MDOC_Symbolic,
+ MDOC_Nested,
+ MDOC_Centred,
+ MDOC_ARG_MAX
+};
/* Type of a syntax node. */
enum mdoc_type {
/* An argument to a macro (multiple values = `It -column'). */
struct mdoc_argv {
- int arg;
+ enum mdocargt arg;
int line;
int pos;
size_t sz;
enum mdoc_endbody {
ENDBODY_NOT = 0,
ENDBODY_SPACE,
- ENDBODY_NOSPACE,
+ ENDBODY_NOSPACE
};
enum mdoc_list {
DISP_literal
};
+enum mdoc_auth {
+ AUTH__NONE = 0,
+ AUTH_split,
+ AUTH_nosplit
+};
+
+enum mdoc_font {
+ FONT__NONE = 0,
+ FONT_Em,
+ FONT_Li,
+ FONT_Sy
+};
+
struct mdoc_bd {
const char *offs; /* -offset */
enum mdoc_disp type; /* -ragged, etc. */
const char *offs; /* -offset */
enum mdoc_list type; /* -tag, -enum, etc. */
int comp; /* -compact */
+ size_t ncols; /* -column arg count */
+ const char **cols; /* -column val ptr */
+};
+
+struct mdoc_bf {
+ enum mdoc_font font; /* font */
+};
+
+struct mdoc_an {
+ enum mdoc_auth auth; /* -split, etc. */
};
/* Node in AST. */
enum mdoc_endbody end; /* BODY */
union {
- struct mdoc_bl Bl;
- struct mdoc_bd Bd;
+ struct mdoc_an An;
+ struct mdoc_bd *Bd;
+ struct mdoc_bf *Bf;
+ struct mdoc_bl *Bl;
} data;
};
-#define MDOC_IGN_SCOPE (1 << 0) /* Ignore scope violations. */
-#define MDOC_IGN_ESCAPE (1 << 1) /* Ignore bad escape sequences. */
-#define MDOC_IGN_MACRO (1 << 2) /* Ignore unknown macros. */
-
/* See mdoc.3 for documentation. */
extern const char *const *mdoc_macronames;
/* See mdoc.3 for documentation. */
void mdoc_free(struct mdoc *);
-struct mdoc *mdoc_alloc(struct regset *, void *, int, mandocmsg);
+struct mdoc *mdoc_alloc(struct regset *, void *, mandocmsg);
void mdoc_reset(struct mdoc *);
int mdoc_parseln(struct mdoc *, int, char *, int);
const struct mdoc_node *mdoc_node(const struct mdoc *);