Add a TODO entry.
[sgt/halibut] / halibut.h
index 66bb333..9abc13f 100644 (file)
--- a/halibut.h
+++ b/halibut.h
@@ -114,6 +114,10 @@ enum {
     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 */
 };
 
@@ -153,7 +157,12 @@ enum {
     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 {
@@ -219,6 +228,7 @@ enum {
     err_misplacedlcont,                       /* \lcont not after a list item */
     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 */
 };
 
@@ -325,7 +335,7 @@ 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 *);
 
 /*
@@ -373,7 +383,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 */
@@ -385,13 +397,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);
@@ -418,31 +431,48 @@ struct userstyle_Tag {
 /*
  * 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 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