Remove .cvsignore files on all active branches.
[sgt/halibut] / halibut.h
index 9abc13f..f76d059 100644 (file)
--- a/halibut.h
+++ b/halibut.h
@@ -6,6 +6,8 @@
 #include <time.h>
 #include <string.h>
 
+#include "charset.h"
+
 #ifdef __GNUC__
 #define NORETURN __attribute__((__noreturn__))
 #else
@@ -66,6 +68,11 @@ 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[] */
+    char *pushback_chars;             /* used to save input-encoding data */
 };
 
 /*
@@ -76,6 +83,7 @@ struct paragraph_Tag {
     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
@@ -213,10 +221,12 @@ enum {
     err_explbr,                               /* expected `{' after command */
     err_commenteof,                   /* EOF inside braced comment */
     err_kwexprbr,                     /* expected `}' after cross-ref */
+    err_codequote,                     /* \q within \c is not supported */
     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_indexcase,                    /* two \i differing only in case */
     err_nosuchkw,                     /* unresolved cross-reference */
     err_multiBR,                      /* multiple \BRs on same keyword */
     err_nosuchidxtag,                 /* \IM on unknown index tag (warning) */
@@ -229,6 +239,9 @@ 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_htmlver,                      /* unrecognised HTML version keyword */
+    err_charset,                      /* unrecognised character set name */
     err_whatever                       /* random error of another type */
 };
 
@@ -252,31 +265,48 @@ void free_para_list(paragraph *p);
 word *dup_word_list(word *w);
 char *dupstr(char *s);
 
-#define mknew(type) ( (type *) smalloc (sizeof (type)) )
-#define mknewa(type, number) ( (type *) smalloc ((number) * sizeof (type)) )
-#define resize(array, len) ( srealloc ((array), (len) * sizeof (*(array))) )
+#define snew(type) ( (type *) smalloc (sizeof (type)) )
+#define snewn(number, type) ( (type *) smalloc ((number) * sizeof (type)) )
+#define sresize(array, number, type) \
+       ( (type *) srealloc ((array), (number) * sizeof (type)) )
 #define lenof(array) ( sizeof(array) / sizeof(*(array)) )
 
 /*
  * 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);
+int charset_from_ustr(filepos *fpos, const wchar_t *name);
+
+/*
+ * wcwidth.c
+ */
+int strwid(char const *s, int charset);
+int ustrwid(wchar_t const *s, int charset);
 
 /*
  * help.c
@@ -298,6 +328,8 @@ const char *const version;
 /*
  * misc.c
  */
+char *adv(char *s);
+
 typedef struct stackTag *stack;
 stack stk_new(void);
 void stk_free(stack);
@@ -326,7 +358,7 @@ char *rdtrimc(rdstringc *rs);
 
 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 {
@@ -337,6 +369,9 @@ struct tagWrappedLine {
 };
 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
@@ -435,10 +470,10 @@ 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 *, void *);
-paragraph *xhtml_config_filename(char *filename);
+void html_backend(paragraph *, keywordlist *, indexdata *, void *);
+paragraph *html_config_filename(char *filename);
 
 /*
  * bk_whlp.c