#include <stdio.h>
#include <wchar.h>
#include <time.h>
+#include <string.h>
+
+#include "charset.h"
#ifdef __GNUC__
#define NORETURN __attribute__((__noreturn__))
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[] */
};
/*
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 */
+ /*
+ * Back ends may define their own paragraph types beyond here,
+ * in case they need to use them internally.
+ */
para_NotParaType /* placeholder value */
};
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 ... */
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 {
err_winhelp_ctxclash, /* WinHelp context ID hash clash */
err_multikw, /* keyword clash in sections */
err_misplacedlcont, /* \lcont not after a list item */
- err_sectmarkerinlcont, /* section marker appeared in \lcont */
+ 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 */
};
*/
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 *);
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);
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 *);
/*
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 */
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);
/*
* 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 *);
+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