X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/5dd44dceca3dd3c1a4886dd6a7bdf05924e3447f..e34ba5c3b8a7bcb8fceb437125da3a6a6f6d2dba:/halibut.h diff --git a/halibut.h b/halibut.h index 3e600c7..9aa2c59 100644 --- a/halibut.h +++ b/halibut.h @@ -6,6 +6,8 @@ #include #include +#include "charset.h" + #ifdef __GNUC__ #define NORETURN __attribute__((__noreturn__)) #else @@ -66,6 +68,10 @@ struct input_Tag { filepos pos; int reportcols; /* report column numbers in errors */ macrostack *stack; /* macro expansions in force */ + int defcharset, charset; /* character sets for input files */ + charset_state csstate; + wchar_t wc[16]; /* wide chars from input conversion */ + int nwc, wcpos; /* size of, and position in, wc[] */ }; /* @@ -114,6 +120,10 @@ enum { para_LcontPop, /* end continuation of list item */ para_QuotePush, /* begin block quote */ para_QuotePop, /* end block quote */ + /* + * Back ends may define their own paragraph types beyond here, + * in case they need to use them internally. + */ para_NotParaType /* placeholder value */ }; @@ -153,7 +163,12 @@ enum { word_XrefEnd, /* (invisible; no text) */ word_IndexRef, /* (always an invisible one) */ word_HyperLink, /* (invisible) */ - word_HyperEnd /* (also invisible; no text) */ + word_HyperEnd, /* (also invisible; no text) */ + /* + * Back ends may define their own word types beyond here, in + * case they need to use them internally. + */ + word_NotWordType /* placeholder value */ }; /* aux values for attributed words */ enum { @@ -218,6 +233,8 @@ enum { err_multikw, /* keyword clash in sections */ err_misplacedlcont, /* \lcont not after a list item */ err_sectmarkerinblock, /* section marker appeared in block */ + err_infodirentry, /* \cfg{info-dir-entry} missing param */ + err_infonodechar, /* colon/comma in node name in info */ err_whatever /* random error of another type */ }; @@ -324,7 +341,7 @@ struct tagWrappedLine { int nspaces; /* number of whitespaces in line */ int shortfall; /* how much shorter than max width */ }; -wrappedline *wrap_para(word *, int, int, int (*)(word *)); +wrappedline *wrap_para(word *, int, int, int (*)(void *, word *), void *, int); void wrap_free(wrappedline *); /* @@ -372,7 +389,9 @@ struct indexdata_Tag { struct indextag_Tag { wchar_t *name; word *implicit_text; + filepos implicit_fpos; word **explicit_texts; + filepos *explicit_fpos; int nexplicit, explicit_size; int nrefs; indexentry **refs; /* array of entries referenced by tag */ @@ -384,13 +403,14 @@ struct indextag_Tag { struct indexentry_Tag { word *text; void *backend_data; /* private to back end */ + filepos fpos; }; indexdata *make_index(void); void cleanup_index(indexdata *); /* index_merge takes responsibility for freeing arg 3 iff implicit; never * takes responsibility for arg 2 */ -void index_merge(indexdata *, int is_explicit, wchar_t *, word *); +void index_merge(indexdata *, int is_explicit, wchar_t *, word *, filepos *); void build_index(indexdata *); void index_debug(indexdata *); indextag *index_findtag(indexdata *idx, wchar_t *name); @@ -417,31 +437,48 @@ struct userstyle_Tag { /* * bk_text.c */ -void text_backend(paragraph *, keywordlist *, indexdata *); +void text_backend(paragraph *, keywordlist *, indexdata *, void *); paragraph *text_config_filename(char *filename); /* * bk_xhtml.c */ -void xhtml_backend(paragraph *, keywordlist *, indexdata *); +void xhtml_backend(paragraph *, keywordlist *, indexdata *, void *); paragraph *xhtml_config_filename(char *filename); /* * bk_whlp.c */ -void whlp_backend(paragraph *, keywordlist *, indexdata *); +void whlp_backend(paragraph *, keywordlist *, indexdata *, void *); paragraph *whlp_config_filename(char *filename); /* * bk_man.c */ -void man_backend(paragraph *, keywordlist *, indexdata *); +void man_backend(paragraph *, keywordlist *, indexdata *, void *); paragraph *man_config_filename(char *filename); /* * bk_info.c */ -void info_backend(paragraph *, keywordlist *, indexdata *); +void info_backend(paragraph *, keywordlist *, indexdata *, void *); paragraph *info_config_filename(char *filename); +/* + * bk_paper.c + */ +void *paper_pre_backend(paragraph *, keywordlist *, indexdata *); + +/* + * bk_ps.c + */ +void ps_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *ps_config_filename(char *filename); + +/* + * bk_pdf.c + */ +void pdf_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *pdf_config_filename(char *filename); + #endif