#include <time.h>
#include <string.h>
+#include "charset.h"
+
#ifdef __GNUC__
#define NORETURN __attribute__((__noreturn__))
#else
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[] */
+ char *pushback_chars; /* used to save input-encoding data */
};
/*
paragraph *next;
int type;
wchar_t *keyword; /* for most special paragraphs */
+ char *origkeyword; /* same again in original charset */
word *words; /* list of words in paragraph */
int aux; /* number, in a numbered paragraph
* or subsection level
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 */
};
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_sectmarkerinblock, /* section marker appeared in block */
err_infodirentry, /* \cfg{info-dir-entry} missing param */
err_infonodechar, /* colon/comma in node name in info */
+ err_text_codeline, /* \c line too long in text backend */
err_whatever /* random error of another type */
};
/*
* ustring.c
*/
-wchar_t *ustrdup(wchar_t *s);
-char *ustrtoa(wchar_t *s, char *outbuf, int size);
-wchar_t *ustrfroma(char *s, wchar_t *outbuf, int size);
-char *utoa_dup(wchar_t *s);
-wchar_t *ufroma_dup(char *s);
+wchar_t *ustrdup(wchar_t const *s);
+char *ustrtoa(wchar_t const *s, char *outbuf, int size, int charset);
+char *ustrtoa_careful(wchar_t const *s, char *outbuf, int size, int charset);
+wchar_t *ustrfroma(char const *s, wchar_t *outbuf, int size, int charset);
+char *utoa_dup(wchar_t const *s, int charset);
+char *utoa_dup_len(wchar_t const *s, int charset, int *len);
+char *utoa_careful_dup(wchar_t const *s, int charset);
+wchar_t *ufroma_dup(char const *s, int charset);
+char *utoa_locale_dup(wchar_t const *s);
+wchar_t *ufroma_locale_dup(char const *s);
int ustrlen(wchar_t const *s);
wchar_t *uadv(wchar_t *s);
wchar_t *ustrcpy(wchar_t *dest, wchar_t const *source);
+wchar_t *ustrncpy(wchar_t *dest, wchar_t const *source, int n);
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 *);
-int utob(wchar_t *);
+int ustricmp(wchar_t const *lhs, wchar_t const *rhs);
+int ustrnicmp(wchar_t const *lhs, wchar_t const *rhs, int maxlen);
+int utoi(wchar_t const *);
+double utof(wchar_t const *);
+int utob(wchar_t const *);
int uisdigit(wchar_t);
wchar_t *ustrlow(wchar_t *s);
-wchar_t *ustrftime(wchar_t *fmt, struct tm *timespec);
+wchar_t *ustrftime(const wchar_t *wfmt, const struct tm *timespec);
+int cvt_ok(int charset, const wchar_t *s);
+
+/*
+ * wcwidth.c
+ */
+int strwid(char const *s, int charset);
+int ustrwid(wchar_t const *s, int charset);
/*
* help.c
/*
* misc.c
*/
+char *adv(char *s);
+
typedef struct stackTag *stack;
stack stk_new(void);
void stk_free(stack);
int compare_wordlists(word *a, word *b);
-void mark_attr_ends(paragraph *sourceform);
+void mark_attr_ends(word *words);
typedef struct tagWrappedLine wrappedline;
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 *);
+void cmdline_cfg_add(paragraph *cfg, char *string);
+paragraph *cmdline_cfg_new(void);
+paragraph *cmdline_cfg_simple(char *string, ...);
/*
* input.c
/*
* 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
+ * bk_html.c
*/
-void xhtml_backend(paragraph *, keywordlist *, indexdata *);
-paragraph *xhtml_config_filename(char *filename);
+void html_backend(paragraph *, keywordlist *, indexdata *, void *);
+paragraph *html_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