Info backend now takes care to avoid magic characters in node names
[sgt/halibut] / halibut.h
index 3fc752d..24ad3a5 100644 (file)
--- a/halibut.h
+++ b/halibut.h
@@ -127,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 ... */
@@ -216,6 +218,9 @@ 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_infoindexcolon,                       /* colon in index term in info */
+    err_infonodechar,                 /* colon/comma in node name in info */
     err_whatever                       /* random error of another type */
 };
 
@@ -252,9 +257,9 @@ 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);
-int ustrlen(wchar_t *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);
@@ -305,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);
@@ -370,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 */
@@ -382,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);
@@ -436,4 +444,10 @@ paragraph *whlp_config_filename(char *filename);
 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