Annotation of mandoc/mdoc.h, Revision 1.1
1.1 ! kristaps 1: /* $Id: roff.h,v 1.10 2008/12/10 17:31:57 kristaps Exp $ */
! 2: /*
! 3: * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
! 4: *
! 5: * Permission to use, copy, modify, and distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the
! 7: * above copyright notice and this permission notice appear in all
! 8: * copies.
! 9: *
! 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
! 11: * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
! 12: * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
! 13: * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
! 14: * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
! 15: * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
! 16: * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
! 17: * PERFORMANCE OF THIS SOFTWARE.
! 18: */
! 19: #ifndef MDOC_H
! 20: #define MDOC_H
! 21:
! 22: #define MDOC_LINEARG_MAX 9
! 23:
! 24: #define MDOC___ 0
! 25: #define MDOC_Dd 1
! 26: #define MDOC_Dt 2
! 27: #define MDOC_Os 3
! 28: #define MDOC_Sh 4
! 29: #define MDOC_Ss 5
! 30: #define MDOC_Pp 6
! 31: #define MDOC_D1 7
! 32: #define MDOC_Dl 8
! 33: #define MDOC_Bd 9
! 34: #define MDOC_Ed 10
! 35: #define MDOC_Bl 11
! 36: #define MDOC_El 12
! 37: #define MDOC_It 13
! 38: #define MDOC_Ad 14
! 39: #define MDOC_An 15
! 40: #define MDOC_Ar 16
! 41: #define MDOC_Cd 17
! 42: #define MDOC_Cm 18
! 43: #define MDOC_Dv 19
! 44: #define MDOC_Er 20
! 45: #define MDOC_Ev 21
! 46: #define MDOC_Ex 22
! 47: #define MDOC_Fa 23
! 48: #define MDOC_Fd 24
! 49: #define MDOC_Fl 25
! 50: #define MDOC_Fn 26
! 51: #define MDOC_Ft 27
! 52: #define MDOC_Ic 28
! 53: #define MDOC_In 29
! 54: #define MDOC_Li 30
! 55: #define MDOC_Nd 31
! 56: #define MDOC_Nm 32
! 57: #define MDOC_Op 33
! 58: #define MDOC_Ot 34
! 59: #define MDOC_Pa 35
! 60: #define MDOC_Rv 36
! 61: #define MDOC_St 37
! 62: #define MDOC_Va 38
! 63: #define MDOC_Vt 39
! 64: #define MDOC_Xr 40
! 65: #define MDOC__A 41
! 66: #define MDOC__B 42
! 67: #define MDOC__D 43
! 68: #define MDOC__I 44
! 69: #define MDOC__J 45
! 70: #define MDOC__N 46
! 71: #define MDOC__O 47
! 72: #define MDOC__P 48
! 73: #define MDOC__R 49
! 74: #define MDOC__T 50
! 75: #define MDOC__V 51
! 76: #define MDOC_Ac 52
! 77: #define MDOC_Ao 53
! 78: #define MDOC_Aq 54
! 79: #define MDOC_At 55
! 80: #define MDOC_Bc 56
! 81: #define MDOC_Bf 57
! 82: #define MDOC_Bo 58
! 83: #define MDOC_Bq 59
! 84: #define MDOC_Bsx 60
! 85: #define MDOC_Bx 61
! 86: #define MDOC_Db 62
! 87: #define MDOC_Dc 63
! 88: #define MDOC_Do 64
! 89: #define MDOC_Dq 65
! 90: #define MDOC_Ec 66
! 91: #define MDOC_Ef 67
! 92: #define MDOC_Em 68
! 93: #define MDOC_Eo 69
! 94: #define MDOC_Fx 70
! 95: #define MDOC_Ms 71
! 96: #define MDOC_No 72
! 97: #define MDOC_Ns 73
! 98: #define MDOC_Nx 74
! 99: #define MDOC_Ox 75
! 100: #define MDOC_Pc 76
! 101: #define MDOC_Pf 77
! 102: #define MDOC_Po 78
! 103: #define MDOC_Pq 79
! 104: #define MDOC_Qc 80
! 105: #define MDOC_Ql 81
! 106: #define MDOC_Qo 82
! 107: #define MDOC_Qq 83
! 108: #define MDOC_Re 84
! 109: #define MDOC_Rs 85
! 110: #define MDOC_Sc 86
! 111: #define MDOC_So 87
! 112: #define MDOC_Sq 88
! 113: #define MDOC_Sm 89
! 114: #define MDOC_Sx 90
! 115: #define MDOC_Sy 91
! 116: #define MDOC_Tn 92
! 117: #define MDOC_Ux 93
! 118: #define MDOC_Xc 94
! 119: #define MDOC_Xo 95
! 120: #define MDOC_Fo 96
! 121: #define MDOC_Fc 97
! 122: #define MDOC_Oo 98
! 123: #define MDOC_Oc 99
! 124: #define MDOC_Bk 100
! 125: #define MDOC_Ek 101
! 126: #define MDOC_Bt 102
! 127: #define MDOC_Hf 103
! 128: #define MDOC_Fr 104
! 129: #define MDOC_Ud 105
! 130: #define MDOC_MAX 106
! 131:
! 132: #define MDOC_Split 0
! 133: #define MDOC_Nosplit 1
! 134: #define MDOC_Ragged 2
! 135: #define MDOC_Unfilled 3
! 136: #define MDOC_Literal 4
! 137: #define MDOC_File 5
! 138: #define MDOC_Offset 6
! 139: #define MDOC_Bullet 7
! 140: #define MDOC_Dash 8
! 141: #define MDOC_Hyphen 9
! 142: #define MDOC_Item 10
! 143: #define MDOC_Enum 11
! 144: #define MDOC_Tag 12
! 145: #define MDOC_Diag 13
! 146: #define MDOC_Hang 14
! 147: #define MDOC_Ohang 15
! 148: #define MDOC_Inset 16
! 149: #define MDOC_Column 17
! 150: #define MDOC_Width 18
! 151: #define MDOC_Compact 19
! 152: #define MDOC_Std 20
! 153: #define MDOC_p1003_1_88 21
! 154: #define MDOC_p1003_1_90 22
! 155: #define MDOC_p1003_1_96 23
! 156: #define MDOC_p1003_1_2001 24
! 157: #define MDOC_p1003_1_2004 25
! 158: #define MDOC_p1003_1 26
! 159: #define MDOC_p1003_1b 27
! 160: #define MDOC_p1003_1b_93 28
! 161: #define MDOC_p1003_1c_95 29
! 162: #define MDOC_p1003_1g_2000 30
! 163: #define MDOC_p1003_2_92 31
! 164: #define MDOC_p1387_2_95 32
! 165: #define MDOC_p1003_2 33
! 166: #define MDOC_p1387_2 34
! 167: #define MDOC_isoC_90 35
! 168: #define MDOC_isoC_amd1 36
! 169: #define MDOC_isoC_tcor1 37
! 170: #define MDOC_isoC_tcor2 38
! 171: #define MDOC_isoC_99 39
! 172: #define MDOC_ansiC 40
! 173: #define MDOC_ansiC_89 41
! 174: #define MDOC_ansiC_99 42
! 175: #define MDOC_ieee754 43
! 176: #define MDOC_iso8802_3 44
! 177: #define MDOC_xpg3 45
! 178: #define MDOC_xpg4 46
! 179: #define MDOC_xpg4_2 47
! 180: #define MDOC_xpg4_3 48
! 181: #define MDOC_xbd5 49
! 182: #define MDOC_xcu5 50
! 183: #define MDOC_xsh5 51
! 184: #define MDOC_xns5 52
! 185: #define MDOC_xns5_2d2_0 53
! 186: #define MDOC_xcurses4_2 54
! 187: #define MDOC_susv2 55
! 188: #define MDOC_susv3 56
! 189: #define MDOC_svid4 57
! 190: #define MDOC_Filled 58
! 191: #define MDOC_Words 59
! 192: #define MDOC_ARG_MAX 60
! 193:
! 194: enum mdoc_err {
! 195: ERR_SYNTAX_QUOTE,
! 196: ERR_SYNTAX_WS,
! 197: ERR_MACRO_NOTSUP,
! 198: ERR_MACRO_NOTCALL,
! 199: ERR_SCOPE_BREAK,
! 200: ERR_ARGS_GE1
! 201: };
! 202:
! 203: enum mdoc_warn {
! 204: WARN_SYNTAX_WS_EOLN,
! 205: WARN_SYNTAX_MACLIKE,
! 206: WARN_ARGS_GE1
! 207: };
! 208:
! 209: struct mdoc_arg {
! 210: int arg;
! 211: size_t sz;
! 212: char **value;
! 213: };
! 214:
! 215: enum mdoc_type {
! 216: MDOC_TEXT,
! 217: MDOC_ELEM,
! 218: MDOC_HEAD,
! 219: MDOC_BODY,
! 220: MDOC_BLOCK
! 221: };
! 222:
! 223: struct mdoc_text {
! 224: char *string;
! 225: };
! 226:
! 227: struct mdoc_block {
! 228: int tok;
! 229: size_t argc;
! 230: struct mdoc_arg *argv;
! 231: };
! 232:
! 233: struct mdoc_head {
! 234: size_t sz;
! 235: char **args;
! 236: int tok;
! 237: };
! 238:
! 239: struct mdoc_body {
! 240: int tok;
! 241: };
! 242:
! 243: struct mdoc_elem {
! 244: size_t sz;
! 245: char **args;
! 246: int tok;
! 247: size_t argc;
! 248: struct mdoc_arg *argv;
! 249: };
! 250:
! 251: union mdoc_data {
! 252: struct mdoc_text text;
! 253: struct mdoc_elem elem;
! 254: struct mdoc_body body;
! 255: struct mdoc_head head;
! 256: struct mdoc_block block;
! 257: };
! 258:
! 259: struct mdoc_node {
! 260: struct mdoc_node *parent;
! 261: struct mdoc_node *child;
! 262: struct mdoc_node *next;
! 263: enum mdoc_type type;
! 264: union mdoc_data data;
! 265: };
! 266:
! 267: struct mdoc_cb {
! 268: int (*mdoc_err)(void *, int, int, enum mdoc_err);
! 269: int (*mdoc_warn)(void *, int, int, enum mdoc_warn);
! 270: void (*mdoc_msg)(void *, int, const char *);
! 271: };
! 272:
! 273: extern const char *const *mdoc_macronames;
! 274: extern const char *const *mdoc_argnames;
! 275:
! 276: __BEGIN_DECLS
! 277:
! 278: struct mdoc;
! 279:
! 280: void mdoc_free(struct mdoc *);
! 281: struct mdoc *mdoc_alloc(void *data, const struct mdoc_cb *);
! 282: int mdoc_parseln(struct mdoc *, char *buf);
! 283:
! 284: const struct mdoc_node
! 285: *mdoc_result(struct mdoc *);
! 286:
! 287: __END_DECLS
! 288:
! 289: #endif /*!MDOC_H*/
CVSweb