1*7295610fSBaptiste Daroussin /* $Id: mdoc.h,v 1.146 2018/12/30 00:49:55 schwarze Exp $ */ 261d06d6bSBaptiste Daroussin /* 361d06d6bSBaptiste Daroussin * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 461d06d6bSBaptiste Daroussin * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> 561d06d6bSBaptiste Daroussin * 661d06d6bSBaptiste Daroussin * Permission to use, copy, modify, and distribute this software for any 761d06d6bSBaptiste Daroussin * purpose with or without fee is hereby granted, provided that the above 861d06d6bSBaptiste Daroussin * copyright notice and this permission notice appear in all copies. 961d06d6bSBaptiste Daroussin * 1061d06d6bSBaptiste Daroussin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 1161d06d6bSBaptiste Daroussin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1261d06d6bSBaptiste Daroussin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR 1361d06d6bSBaptiste Daroussin * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1461d06d6bSBaptiste Daroussin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1561d06d6bSBaptiste Daroussin * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1661d06d6bSBaptiste Daroussin * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1761d06d6bSBaptiste Daroussin */ 1861d06d6bSBaptiste Daroussin 19*7295610fSBaptiste Daroussin struct roff_node; 20*7295610fSBaptiste Daroussin struct roff_man; 21*7295610fSBaptiste Daroussin 2261d06d6bSBaptiste Daroussin enum mdocargt { 2361d06d6bSBaptiste Daroussin MDOC_Split, /* -split */ 2461d06d6bSBaptiste Daroussin MDOC_Nosplit, /* -nospli */ 2561d06d6bSBaptiste Daroussin MDOC_Ragged, /* -ragged */ 2661d06d6bSBaptiste Daroussin MDOC_Unfilled, /* -unfilled */ 2761d06d6bSBaptiste Daroussin MDOC_Literal, /* -literal */ 2861d06d6bSBaptiste Daroussin MDOC_File, /* -file */ 2961d06d6bSBaptiste Daroussin MDOC_Offset, /* -offset */ 3061d06d6bSBaptiste Daroussin MDOC_Bullet, /* -bullet */ 3161d06d6bSBaptiste Daroussin MDOC_Dash, /* -dash */ 3261d06d6bSBaptiste Daroussin MDOC_Hyphen, /* -hyphen */ 3361d06d6bSBaptiste Daroussin MDOC_Item, /* -item */ 3461d06d6bSBaptiste Daroussin MDOC_Enum, /* -enum */ 3561d06d6bSBaptiste Daroussin MDOC_Tag, /* -tag */ 3661d06d6bSBaptiste Daroussin MDOC_Diag, /* -diag */ 3761d06d6bSBaptiste Daroussin MDOC_Hang, /* -hang */ 3861d06d6bSBaptiste Daroussin MDOC_Ohang, /* -ohang */ 3961d06d6bSBaptiste Daroussin MDOC_Inset, /* -inset */ 4061d06d6bSBaptiste Daroussin MDOC_Column, /* -column */ 4161d06d6bSBaptiste Daroussin MDOC_Width, /* -width */ 4261d06d6bSBaptiste Daroussin MDOC_Compact, /* -compact */ 4361d06d6bSBaptiste Daroussin MDOC_Std, /* -std */ 4461d06d6bSBaptiste Daroussin MDOC_Filled, /* -filled */ 4561d06d6bSBaptiste Daroussin MDOC_Words, /* -words */ 4661d06d6bSBaptiste Daroussin MDOC_Emphasis, /* -emphasis */ 4761d06d6bSBaptiste Daroussin MDOC_Symbolic, /* -symbolic */ 4861d06d6bSBaptiste Daroussin MDOC_Nested, /* -nested */ 4961d06d6bSBaptiste Daroussin MDOC_Centred, /* -centered */ 5061d06d6bSBaptiste Daroussin MDOC_ARG_MAX 5161d06d6bSBaptiste Daroussin }; 5261d06d6bSBaptiste Daroussin 5361d06d6bSBaptiste Daroussin /* 5461d06d6bSBaptiste Daroussin * An argument to a macro (multiple values = `-column xxx yyy'). 5561d06d6bSBaptiste Daroussin */ 5661d06d6bSBaptiste Daroussin struct mdoc_argv { 5761d06d6bSBaptiste Daroussin enum mdocargt arg; /* type of argument */ 5861d06d6bSBaptiste Daroussin int line; 5961d06d6bSBaptiste Daroussin int pos; 6061d06d6bSBaptiste Daroussin size_t sz; /* elements in "value" */ 6161d06d6bSBaptiste Daroussin char **value; /* argument strings */ 6261d06d6bSBaptiste Daroussin }; 6361d06d6bSBaptiste Daroussin 6461d06d6bSBaptiste Daroussin /* 6561d06d6bSBaptiste Daroussin * Reference-counted macro arguments. These are refcounted because 6661d06d6bSBaptiste Daroussin * blocks have multiple instances of the same arguments spread across 6761d06d6bSBaptiste Daroussin * the HEAD, BODY, TAIL, and BLOCK node types. 6861d06d6bSBaptiste Daroussin */ 6961d06d6bSBaptiste Daroussin struct mdoc_arg { 7061d06d6bSBaptiste Daroussin size_t argc; 7161d06d6bSBaptiste Daroussin struct mdoc_argv *argv; 7261d06d6bSBaptiste Daroussin unsigned int refcnt; 7361d06d6bSBaptiste Daroussin }; 7461d06d6bSBaptiste Daroussin 7561d06d6bSBaptiste Daroussin enum mdoc_list { 7661d06d6bSBaptiste Daroussin LIST__NONE = 0, 7761d06d6bSBaptiste Daroussin LIST_bullet, /* -bullet */ 7861d06d6bSBaptiste Daroussin LIST_column, /* -column */ 7961d06d6bSBaptiste Daroussin LIST_dash, /* -dash */ 8061d06d6bSBaptiste Daroussin LIST_diag, /* -diag */ 8161d06d6bSBaptiste Daroussin LIST_enum, /* -enum */ 8261d06d6bSBaptiste Daroussin LIST_hang, /* -hang */ 8361d06d6bSBaptiste Daroussin LIST_hyphen, /* -hyphen */ 8461d06d6bSBaptiste Daroussin LIST_inset, /* -inset */ 8561d06d6bSBaptiste Daroussin LIST_item, /* -item */ 8661d06d6bSBaptiste Daroussin LIST_ohang, /* -ohang */ 8761d06d6bSBaptiste Daroussin LIST_tag, /* -tag */ 8861d06d6bSBaptiste Daroussin LIST_MAX 8961d06d6bSBaptiste Daroussin }; 9061d06d6bSBaptiste Daroussin 9161d06d6bSBaptiste Daroussin enum mdoc_disp { 9261d06d6bSBaptiste Daroussin DISP__NONE = 0, 9361d06d6bSBaptiste Daroussin DISP_centered, /* -centered */ 9461d06d6bSBaptiste Daroussin DISP_ragged, /* -ragged */ 9561d06d6bSBaptiste Daroussin DISP_unfilled, /* -unfilled */ 9661d06d6bSBaptiste Daroussin DISP_filled, /* -filled */ 9761d06d6bSBaptiste Daroussin DISP_literal /* -literal */ 9861d06d6bSBaptiste Daroussin }; 9961d06d6bSBaptiste Daroussin 10061d06d6bSBaptiste Daroussin enum mdoc_auth { 10161d06d6bSBaptiste Daroussin AUTH__NONE = 0, 10261d06d6bSBaptiste Daroussin AUTH_split, /* -split */ 10361d06d6bSBaptiste Daroussin AUTH_nosplit /* -nosplit */ 10461d06d6bSBaptiste Daroussin }; 10561d06d6bSBaptiste Daroussin 10661d06d6bSBaptiste Daroussin enum mdoc_font { 10761d06d6bSBaptiste Daroussin FONT__NONE = 0, 10861d06d6bSBaptiste Daroussin FONT_Em, /* Em, -emphasis */ 10961d06d6bSBaptiste Daroussin FONT_Li, /* Li, -literal */ 11061d06d6bSBaptiste Daroussin FONT_Sy /* Sy, -symbolic */ 11161d06d6bSBaptiste Daroussin }; 11261d06d6bSBaptiste Daroussin 11361d06d6bSBaptiste Daroussin struct mdoc_bd { 11461d06d6bSBaptiste Daroussin const char *offs; /* -offset */ 11561d06d6bSBaptiste Daroussin enum mdoc_disp type; /* -ragged, etc. */ 11661d06d6bSBaptiste Daroussin int comp; /* -compact */ 11761d06d6bSBaptiste Daroussin }; 11861d06d6bSBaptiste Daroussin 11961d06d6bSBaptiste Daroussin struct mdoc_bl { 12061d06d6bSBaptiste Daroussin const char *width; /* -width */ 12161d06d6bSBaptiste Daroussin const char *offs; /* -offset */ 12261d06d6bSBaptiste Daroussin enum mdoc_list type; /* -tag, -enum, etc. */ 12361d06d6bSBaptiste Daroussin int comp; /* -compact */ 12461d06d6bSBaptiste Daroussin size_t ncols; /* -column arg count */ 12561d06d6bSBaptiste Daroussin const char **cols; /* -column val ptr */ 12661d06d6bSBaptiste Daroussin int count; /* -enum counter */ 12761d06d6bSBaptiste Daroussin }; 12861d06d6bSBaptiste Daroussin 12961d06d6bSBaptiste Daroussin struct mdoc_bf { 13061d06d6bSBaptiste Daroussin enum mdoc_font font; /* font */ 13161d06d6bSBaptiste Daroussin }; 13261d06d6bSBaptiste Daroussin 13361d06d6bSBaptiste Daroussin struct mdoc_an { 13461d06d6bSBaptiste Daroussin enum mdoc_auth auth; /* -split, etc. */ 13561d06d6bSBaptiste Daroussin }; 13661d06d6bSBaptiste Daroussin 13761d06d6bSBaptiste Daroussin struct mdoc_rs { 13861d06d6bSBaptiste Daroussin int quote_T; /* whether to quote %T */ 13961d06d6bSBaptiste Daroussin }; 14061d06d6bSBaptiste Daroussin 14161d06d6bSBaptiste Daroussin /* 14261d06d6bSBaptiste Daroussin * Consists of normalised node arguments. These should be used instead 14361d06d6bSBaptiste Daroussin * of iterating through the mdoc_arg pointers of a node: defaults are 14461d06d6bSBaptiste Daroussin * provided, etc. 14561d06d6bSBaptiste Daroussin */ 14661d06d6bSBaptiste Daroussin union mdoc_data { 14761d06d6bSBaptiste Daroussin struct mdoc_an An; 14861d06d6bSBaptiste Daroussin struct mdoc_bd Bd; 14961d06d6bSBaptiste Daroussin struct mdoc_bf Bf; 15061d06d6bSBaptiste Daroussin struct mdoc_bl Bl; 15161d06d6bSBaptiste Daroussin struct roff_node *Es; 15261d06d6bSBaptiste Daroussin struct mdoc_rs Rs; 15361d06d6bSBaptiste Daroussin }; 15461d06d6bSBaptiste Daroussin 15561d06d6bSBaptiste Daroussin /* Names of macro args. Index is enum mdocargt. */ 15661d06d6bSBaptiste Daroussin extern const char *const *mdoc_argnames; 15761d06d6bSBaptiste Daroussin 15861d06d6bSBaptiste Daroussin void mdoc_validate(struct roff_man *); 159