![]() ![]() | ![]() |
version 1.40, 2010/06/27 16:18:13 | version 1.51, 2011/03/23 15:33:57 | ||
---|---|---|---|
|
|
||
/* $Id$ */ | /* $Id$ */ | ||
/* | /* | ||
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv> | * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> | ||
* | * | ||
* Permission to use, copy, modify, and distribute this software for any | * Permission to use, copy, modify, and distribute this software for any | ||
* purpose with or without fee is hereby granted, provided that the above | * purpose with or without fee is hereby granted, provided that the above | ||
|
|
||
#ifndef LIBMAN_H | #ifndef LIBMAN_H | ||
#define LIBMAN_H | #define LIBMAN_H | ||
#include "regs.h" | |||
#include "man.h" | |||
enum man_next { | enum man_next { | ||
MAN_NEXT_SIBLING = 0, | MAN_NEXT_SIBLING = 0, | ||
MAN_NEXT_CHILD | MAN_NEXT_CHILD | ||
}; | }; | ||
struct man { | struct man { | ||
void *data; /* private application data */ | struct mparse *parse; /* parse pointer */ | ||
mandocmsg msg; /* output message handler */ | |||
int pflags; /* parse flags (see man.h) */ | |||
int flags; /* parse flags */ | int flags; /* parse flags */ | ||
#define MAN_HALT (1 << 0) /* badness happened: die */ | #define MAN_HALT (1 << 0) /* badness happened: die */ | ||
#define MAN_ELINE (1 << 1) /* Next-line element scope. */ | #define MAN_ELINE (1 << 1) /* Next-line element scope. */ | ||
|
|
||
#define MAN_ILINE (1 << 3) /* Ignored in next-line scope. */ | #define MAN_ILINE (1 << 3) /* Ignored in next-line scope. */ | ||
#define MAN_LITERAL (1 << 4) /* Literal input. */ | #define MAN_LITERAL (1 << 4) /* Literal input. */ | ||
#define MAN_BPLINE (1 << 5) | #define MAN_BPLINE (1 << 5) | ||
#define MAN_NEWLINE (1 << 6) /* first macro/text in a line */ | |||
enum man_next next; /* where to put the next node */ | enum man_next next; /* where to put the next node */ | ||
struct man_node *last; /* the last parsed node */ | struct man_node *last; /* the last parsed node */ | ||
struct man_node *first; /* the first parsed node */ | struct man_node *first; /* the first parsed node */ | ||
|
|
||
__BEGIN_DECLS | __BEGIN_DECLS | ||
#define man_pmsg(m, l, p, t) \ | #define man_pmsg(m, l, p, t) \ | ||
(*(m)->msg)((t), (m)->data, (l), (p), NULL) | mandoc_msg((t), (m)->parse, (l), (p), NULL) | ||
#define man_nmsg(m, n, t) \ | #define man_nmsg(m, n, t) \ | ||
(*(m)->msg)((t), (m)->data, (n)->line, (n)->pos, NULL) | mandoc_msg((t), (m)->parse, (n)->line, (n)->pos, NULL) | ||
int man_word_alloc(struct man *, int, int, const char *); | int man_word_alloc(struct man *, int, int, const char *); | ||
int man_block_alloc(struct man *, int, int, enum mant); | int man_block_alloc(struct man *, int, int, enum mant); | ||
int man_head_alloc(struct man *, int, int, enum mant); | int man_head_alloc(struct man *, int, int, enum mant); | ||
int man_tail_alloc(struct man *, int, int, enum mant); | |||
int man_body_alloc(struct man *, int, int, enum mant); | int man_body_alloc(struct man *, int, int, enum mant); | ||
int man_elem_alloc(struct man *, int, int, enum mant); | int man_elem_alloc(struct man *, int, int, enum mant); | ||
void man_node_delete(struct man *, struct man_node *); | void man_node_delete(struct man *, struct man_node *); | ||
void man_hash_init(void); | void man_hash_init(void); | ||
enum mant man_hash_find(const char *); | enum mant man_hash_find(const char *); | ||
int man_macroend(struct man *); | int man_macroend(struct man *); | ||
int man_args(struct man *, int, int *, char *, char **); | |||
#define ARGS_ERROR (-1) | |||
#define ARGS_EOLN (0) | |||
#define ARGS_WORD (1) | |||
#define ARGS_QWORD (1) | |||
int man_vmsg(struct man *, enum mandocerr, | |||
int, int, const char *, ...); | |||
int man_valid_post(struct man *); | int man_valid_post(struct man *); | ||
int man_valid_pre(struct man *, struct man_node *); | int man_valid_pre(struct man *, struct man_node *); | ||
int man_action_post(struct man *); | |||
int man_action_pre(struct man *, struct man_node *); | |||
int man_unscope(struct man *, | int man_unscope(struct man *, | ||
const struct man_node *, enum mandocerr); | const struct man_node *, enum mandocerr); | ||