[BACK]Return to libmandoc.h CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

File: [cvsweb.bsd.lv] / mandoc / libmandoc.h (download)

Revision 1.81, Sun Jan 5 16:58:22 2025 UTC (5 months, 1 week ago) by schwarze
Branch: MAIN
CVS Tags: HEAD
Changes since 1.80: +2 -1 lines

Add an additional argument to the functions implementing the roff(7)
numerical parser to select the default scaling unit for numbers not
followed by a scaling unit, rather than always using basic units ('u').

Expose roff_evalnum() via the internal parser API such that, in addition
to the roff(7) parser, other parsers become able to parse numerical
expressions, too.

This commit implies no functional change yet,
but prepares for adding new functionality in future commits.

/* $Id: libmandoc.h,v 1.81 2025/01/05 16:58:22 schwarze Exp $ */
/*
 * Copyright (c) 2013-2015,2017,2018,2020 Ingo Schwarze <schwarze@openbsd.org>
 * Copyright (c) 2009, 2010, 2011, 2012 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
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS 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.
 *
 * Internal interfaces for parser utilities needed by multiple parsers
 * and the top-level functions to call the mdoc, man, and roff parsers.
 */

/*
 * Return codes passed from the roff parser to the main parser.
 */

/* Main instruction: what to do with the returned line. */
#define	ROFF_IGN	0x000	/* Don't do anything with it. */
#define	ROFF_CONT	0x001	/* Give it to the high-level parser. */
#define	ROFF_RERUN	0x002	/* Re-run the roff parser with an offset. */
#define	ROFF_REPARSE	0x004	/* Recursively run the main parser on it. */
#define	ROFF_SO		0x008	/* Include the named file. */
#define	ROFF_MASK	0x00f	/* Only one of these bits should be set. */

/* Options for further parsing, to be OR'ed with the above. */
#define	ROFF_APPEND	0x010	/* Append the next line to this one. */
#define	ROFF_USERCALL	0x020	/* Start execution of a new macro. */
#define	ROFF_USERRET	0x040	/* Abort execution of the current macro. */
#define	ROFF_WHILE	0x100	/* Start a new .while loop. */
#define	ROFF_LOOPCONT	0x200	/* Iterate the current .while loop. */
#define	ROFF_LOOPEXIT	0x400	/* Exit the current .while loop. */
#define	ROFF_LOOPMASK	0xf00


struct	buf {
	char		*buf;
	size_t		 sz;
	struct buf	*next;
};


struct	roff;
struct	roff_man;
struct	roff_node;

char		*mandoc_normdate(struct roff_node *, struct roff_node *);
int		 mandoc_eos(const char *, size_t);
int		 mandoc_strntoi(const char *, size_t, int);
const char	*mandoc_a2msec(const char*);

int		 mdoc_parseln(struct roff_man *, int, char *, int);
void		 mdoc_endparse(struct roff_man *);

int		 man_parseln(struct roff_man *, int, char *, int);
void		 man_endparse(struct roff_man *);

int		 preconv_cue(const struct buf *, size_t);
int		 preconv_encode(const struct buf *, size_t *,
			struct buf *, size_t *, int *);

void		 roff_free(struct roff *);
struct roff	*roff_alloc(int);
void		 roff_reset(struct roff *);
void		 roff_man_free(struct roff_man *);
struct roff_man	*roff_man_alloc(struct roff *, const char *, int);
void		 roff_man_reset(struct roff_man *);
int		 roff_parseln(struct roff *, int, struct buf *, int *, size_t);
void		 roff_userret(struct roff *);
void		 roff_endparse(struct roff *);
void		 roff_setreg(struct roff *, const char *, int, char);
int		 roff_getreg(struct roff *, const char *);
int		 roff_evalnum(int, const char *, int *, int *, char, int);
char		*roff_strdup(const struct roff *, const char *);
char		*roff_getarg(struct roff *, char **, int, int *);
int		 roff_getcontrol(const struct roff *,
			const char *, int *);
int		 roff_getformat(const struct roff *);