+/* Tables. */
+struct table *table_create (int nc, int nr, int hl, int hr, int ht, int hb);
+
+/* Rules. */
+void table_hline (struct table *, int style, int x1, int x2, int y);
+void table_vline (struct table *, int style, int x, int y1, int y2);
+void table_box (struct table *, int f_h, int f_v, int i_h, int i_v,
+ int x1, int y1, int x2, int y2);
+
+/* Cells. */
+void table_text (struct table *, int c, int r, unsigned opt, const char *);
+void table_text_format (struct table *, int c, int r, unsigned opt,
+ const char *, ...)
+ PRINTF_FORMAT (5, 6);
+void table_joint_text (struct table *, int x1, int y1, int x2, int y2,
+ unsigned opt, const char *);
+
+void table_add_subscripts (struct table *, int x, int y,
+ char **subscripts, size_t n_subscripts);
+void table_add_superscript (struct table *, int x, int y,
+ const char *superscript);
+
+/* Footnotes.
+
+ Use table_create_footnote() to create the footnotes themselves, then use
+ table_add_footnote() to create a reference from a table cell to a footnote.
+ There are two steps because a footnote may have multiple references. */
+struct footnote *table_create_footnote (struct table *, size_t idx,
+ const char *content,
+ const char *marker,
+ struct area_style *);
+void table_add_footnote (struct table *, int x, int y,
+ const struct footnote *);
+
+void table_add_style (struct table *, int x, int y,
+ const struct area_style *);
+
+bool table_cell_is_empty (const struct table *, int c, int r);
+
+#endif /* output/table.h */