summaryrefslogtreecommitdiffstats
path: root/mdoc.h
diff options
context:
space:
mode:
Diffstat (limited to 'mdoc.h')
-rw-r--r--mdoc.h289
1 files changed, 289 insertions, 0 deletions
diff --git a/mdoc.h b/mdoc.h
new file mode 100644
index 00000000..7dca294c
--- /dev/null
+++ b/mdoc.h
@@ -0,0 +1,289 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2008 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 copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef MDOC_H
+#define MDOC_H
+
+#define MDOC_LINEARG_MAX 9
+
+#define MDOC___ 0
+#define MDOC_Dd 1
+#define MDOC_Dt 2
+#define MDOC_Os 3
+#define MDOC_Sh 4
+#define MDOC_Ss 5
+#define MDOC_Pp 6
+#define MDOC_D1 7
+#define MDOC_Dl 8
+#define MDOC_Bd 9
+#define MDOC_Ed 10
+#define MDOC_Bl 11
+#define MDOC_El 12
+#define MDOC_It 13
+#define MDOC_Ad 14
+#define MDOC_An 15
+#define MDOC_Ar 16
+#define MDOC_Cd 17
+#define MDOC_Cm 18
+#define MDOC_Dv 19
+#define MDOC_Er 20
+#define MDOC_Ev 21
+#define MDOC_Ex 22
+#define MDOC_Fa 23
+#define MDOC_Fd 24
+#define MDOC_Fl 25
+#define MDOC_Fn 26
+#define MDOC_Ft 27
+#define MDOC_Ic 28
+#define MDOC_In 29
+#define MDOC_Li 30
+#define MDOC_Nd 31
+#define MDOC_Nm 32
+#define MDOC_Op 33
+#define MDOC_Ot 34
+#define MDOC_Pa 35
+#define MDOC_Rv 36
+#define MDOC_St 37
+#define MDOC_Va 38
+#define MDOC_Vt 39
+#define MDOC_Xr 40
+#define MDOC__A 41
+#define MDOC__B 42
+#define MDOC__D 43
+#define MDOC__I 44
+#define MDOC__J 45
+#define MDOC__N 46
+#define MDOC__O 47
+#define MDOC__P 48
+#define MDOC__R 49
+#define MDOC__T 50
+#define MDOC__V 51
+#define MDOC_Ac 52
+#define MDOC_Ao 53
+#define MDOC_Aq 54
+#define MDOC_At 55
+#define MDOC_Bc 56
+#define MDOC_Bf 57
+#define MDOC_Bo 58
+#define MDOC_Bq 59
+#define MDOC_Bsx 60
+#define MDOC_Bx 61
+#define MDOC_Db 62
+#define MDOC_Dc 63
+#define MDOC_Do 64
+#define MDOC_Dq 65
+#define MDOC_Ec 66
+#define MDOC_Ef 67
+#define MDOC_Em 68
+#define MDOC_Eo 69
+#define MDOC_Fx 70
+#define MDOC_Ms 71
+#define MDOC_No 72
+#define MDOC_Ns 73
+#define MDOC_Nx 74
+#define MDOC_Ox 75
+#define MDOC_Pc 76
+#define MDOC_Pf 77
+#define MDOC_Po 78
+#define MDOC_Pq 79
+#define MDOC_Qc 80
+#define MDOC_Ql 81
+#define MDOC_Qo 82
+#define MDOC_Qq 83
+#define MDOC_Re 84
+#define MDOC_Rs 85
+#define MDOC_Sc 86
+#define MDOC_So 87
+#define MDOC_Sq 88
+#define MDOC_Sm 89
+#define MDOC_Sx 90
+#define MDOC_Sy 91
+#define MDOC_Tn 92
+#define MDOC_Ux 93
+#define MDOC_Xc 94
+#define MDOC_Xo 95
+#define MDOC_Fo 96
+#define MDOC_Fc 97
+#define MDOC_Oo 98
+#define MDOC_Oc 99
+#define MDOC_Bk 100
+#define MDOC_Ek 101
+#define MDOC_Bt 102
+#define MDOC_Hf 103
+#define MDOC_Fr 104
+#define MDOC_Ud 105
+#define MDOC_MAX 106
+
+#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_p1003_1_88 21
+#define MDOC_p1003_1_90 22
+#define MDOC_p1003_1_96 23
+#define MDOC_p1003_1_2001 24
+#define MDOC_p1003_1_2004 25
+#define MDOC_p1003_1 26
+#define MDOC_p1003_1b 27
+#define MDOC_p1003_1b_93 28
+#define MDOC_p1003_1c_95 29
+#define MDOC_p1003_1g_2000 30
+#define MDOC_p1003_2_92 31
+#define MDOC_p1387_2_95 32
+#define MDOC_p1003_2 33
+#define MDOC_p1387_2 34
+#define MDOC_isoC_90 35
+#define MDOC_isoC_amd1 36
+#define MDOC_isoC_tcor1 37
+#define MDOC_isoC_tcor2 38
+#define MDOC_isoC_99 39
+#define MDOC_ansiC 40
+#define MDOC_ansiC_89 41
+#define MDOC_ansiC_99 42
+#define MDOC_ieee754 43
+#define MDOC_iso8802_3 44
+#define MDOC_xpg3 45
+#define MDOC_xpg4 46
+#define MDOC_xpg4_2 47
+#define MDOC_xpg4_3 48
+#define MDOC_xbd5 49
+#define MDOC_xcu5 50
+#define MDOC_xsh5 51
+#define MDOC_xns5 52
+#define MDOC_xns5_2d2_0 53
+#define MDOC_xcurses4_2 54
+#define MDOC_susv2 55
+#define MDOC_susv3 56
+#define MDOC_svid4 57
+#define MDOC_Filled 58
+#define MDOC_Words 59
+#define MDOC_ARG_MAX 60
+
+enum mdoc_err {
+ ERR_SYNTAX_QUOTE,
+ ERR_SYNTAX_WS,
+ ERR_MACRO_NOTSUP,
+ ERR_MACRO_NOTCALL,
+ ERR_SCOPE_BREAK,
+ ERR_ARGS_GE1
+};
+
+enum mdoc_warn {
+ WARN_SYNTAX_WS_EOLN,
+ WARN_SYNTAX_MACLIKE,
+ WARN_ARGS_GE1
+};
+
+struct mdoc_arg {
+ int arg;
+ size_t sz;
+ char **value;
+};
+
+enum mdoc_type {
+ MDOC_TEXT,
+ MDOC_ELEM,
+ MDOC_HEAD,
+ MDOC_BODY,
+ MDOC_BLOCK
+};
+
+struct mdoc_text {
+ char *string;
+};
+
+struct mdoc_block {
+ int tok;
+ size_t argc;
+ struct mdoc_arg *argv;
+};
+
+struct mdoc_head {
+ size_t sz;
+ char **args;
+ int tok;
+};
+
+struct mdoc_body {
+ int tok;
+};
+
+struct mdoc_elem {
+ size_t sz;
+ char **args;
+ int tok;
+ size_t argc;
+ struct mdoc_arg *argv;
+};
+
+union mdoc_data {
+ struct mdoc_text text;
+ struct mdoc_elem elem;
+ struct mdoc_body body;
+ struct mdoc_head head;
+ struct mdoc_block block;
+};
+
+struct mdoc_node {
+ struct mdoc_node *parent;
+ struct mdoc_node *child;
+ struct mdoc_node *next;
+ enum mdoc_type type;
+ union mdoc_data data;
+};
+
+struct mdoc_cb {
+ int (*mdoc_err)(void *, int, int, enum mdoc_err);
+ int (*mdoc_warn)(void *, int, int, enum mdoc_warn);
+ void (*mdoc_msg)(void *, int, const char *);
+};
+
+extern const char *const *mdoc_macronames;
+extern const char *const *mdoc_argnames;
+
+__BEGIN_DECLS
+
+struct mdoc;
+
+void mdoc_free(struct mdoc *);
+struct mdoc *mdoc_alloc(void *data, const struct mdoc_cb *);
+int mdoc_parseln(struct mdoc *, char *buf);
+
+const struct mdoc_node
+ *mdoc_result(struct mdoc *);
+
+__END_DECLS
+
+#endif /*!MDOC_H*/