X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/d7482997dd1ca71b70df43c15dd5956f435a1a7e..f4551933f1b39e3d017ce964cd3284193fb34cbe:/halibut.h diff --git a/halibut.h b/halibut.h index c948624..24ad3a5 100644 --- a/halibut.h +++ b/halibut.h @@ -4,6 +4,7 @@ #include #include #include +#include #ifdef __GNUC__ #define NORETURN __attribute__((__noreturn__)) @@ -101,13 +102,18 @@ enum { para_BiblioCited, /* ... into this paragraph type */ para_Bullet, para_NumberedList, + para_DescribedThing, + para_Description, para_Code, para_Copyright, - para_Preamble, para_NoCite, para_Title, para_VersionID, para_Config, /* configuration directive */ + para_LcontPush, /* begin continuation of list item */ + para_LcontPop, /* end continuation of list item */ + para_QuotePush, /* begin block quote */ + para_QuotePop, /* end block quote */ para_NotParaType /* placeholder value */ }; @@ -121,6 +127,8 @@ struct word_Tag { int breaks; /* can a line break after it? */ wchar_t *text; filepos fpos; + + void *private_data; /* for temp use in backends */ }; enum { /* ORDERING CONSTRAINT: these normal-word types ... */ @@ -197,6 +205,7 @@ enum { err_commenteof, /* EOF inside braced comment */ err_kwexprbr, /* expected `}' after cross-ref */ err_missingrbrace, /* unclosed braces at end of para */ + err_missingrbrace2, /* unclosed braces at end of file */ err_nestedstyles, /* unable to nest text styles */ err_nestedindex, /* unable to nest `\i' thingys */ err_nosuchkw, /* unresolved cross-reference */ @@ -207,6 +216,11 @@ enum { err_sectjump, /* jump a heading level, eg \C -> \S */ err_winhelp_ctxclash, /* WinHelp context ID hash clash */ 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_infoindexcolon, /* colon in index term in info */ + err_infonodechar, /* colon/comma in node name in info */ err_whatever /* random error of another type */ }; @@ -240,10 +254,14 @@ char *dupstr(char *s); */ wchar_t *ustrdup(wchar_t *s); char *ustrtoa(wchar_t *s, char *outbuf, int size); -int ustrlen(wchar_t *s); +wchar_t *ustrfroma(char *s, wchar_t *outbuf, int size); +char *utoa_dup(wchar_t *s); +wchar_t *ufroma_dup(char *s); +int ustrlen(wchar_t const *s); wchar_t *uadv(wchar_t *s); -wchar_t *ustrcpy(wchar_t *dest, wchar_t *source); +wchar_t *ustrcpy(wchar_t *dest, wchar_t const *source); wchar_t utolower(wchar_t); +int uisalpha(wchar_t); int ustrcmp(wchar_t *lhs, wchar_t *rhs); int ustricmp(wchar_t *lhs, wchar_t *rhs); int utoi(wchar_t *); @@ -277,6 +295,7 @@ stack stk_new(void); void stk_free(stack); void stk_push(stack, void *); void *stk_pop(stack); +void *stk_top(stack); typedef struct tagRdstring rdstring; struct tagRdstring { @@ -291,10 +310,10 @@ struct tagRdstringc { extern const rdstring empty_rdstring; extern const rdstringc empty_rdstringc; void rdadd(rdstring *rs, wchar_t c); -void rdadds(rdstring *rs, wchar_t *p); +void rdadds(rdstring *rs, wchar_t const *p); wchar_t *rdtrim(rdstring *rs); void rdaddc(rdstringc *rs, char c); -void rdaddsc(rdstringc *rs, char *p); +void rdaddsc(rdstringc *rs, char const *p); char *rdtrimc(rdstringc *rs); int compare_wordlists(word *a, word *b); @@ -356,7 +375,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 */ @@ -368,13 +389,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); @@ -384,7 +406,7 @@ indextag *index_findtag(indexdata *idx, wchar_t *name); */ numberstate *number_init(void); void number_cfg(numberstate *, paragraph *); -word *number_mktext(numberstate *, paragraph *, wchar_t *, int , int *); +word *number_mktext(numberstate *, paragraph *, wchar_t *, int *, int *); void number_free(numberstate *); /* @@ -402,15 +424,30 @@ struct userstyle_Tag { * bk_text.c */ void text_backend(paragraph *, keywordlist *, indexdata *); +paragraph *text_config_filename(char *filename); /* * bk_xhtml.c */ void xhtml_backend(paragraph *, keywordlist *, indexdata *); +paragraph *xhtml_config_filename(char *filename); /* * bk_whlp.c */ void whlp_backend(paragraph *, keywordlist *, indexdata *); +paragraph *whlp_config_filename(char *filename); + +/* + * bk_man.c + */ +void man_backend(paragraph *, keywordlist *, indexdata *); +paragraph *man_config_filename(char *filename); + +/* + * bk_info.c + */ +void info_backend(paragraph *, keywordlist *, indexdata *); +paragraph *info_config_filename(char *filename); #endif