+/* ARGSUSED */
+static int
+termp_bf_pre(DECL_ARGS)
+{
+ const struct mdoc_node *n;
+
+ if (MDOC_HEAD == node->type) {
+ return(0);
+ } else if (MDOC_BLOCK != node->type)
+ return(1);
+
+ if (NULL == (n = node->head->child)) {
+ if (arg_hasattr(MDOC_Emphasis, node))
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]);
+ else if (arg_hasattr(MDOC_Symbolic, node))
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_SYMB]);
+
+ return(1);
+ }
+
+ if (MDOC_TEXT != n->type)
+ errx(1, "expected text line arguments");
+
+ if (0 == strcmp("Em", n->string))
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]);
+ else if (0 == strcmp("Sy", n->string))
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]);
+
+ return(1);
+}
+
+
+/* ARGSUSED */
+static int
+termp_sy_pre(DECL_ARGS)
+{
+
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_SYMB]);
+ return(1);
+}
+
+
+/* ARGSUSED */
+static int
+termp_ms_pre(DECL_ARGS)
+{
+
+ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_SYMBOL]);
+ return(1);
+}
+
+
+
+/* ARGSUSED */
+static int
+termp_sm_pre(DECL_ARGS)
+{
+
+#if notyet
+ assert(node->child);
+ if (0 == strcmp("off", node->child->data.text.string)) {
+ p->flags &= ~TERMP_NONOSPACE;
+ p->flags &= ~TERMP_NOSPACE;
+ } else {
+ p->flags |= TERMP_NONOSPACE;
+ p->flags |= TERMP_NOSPACE;
+ }
+#endif
+
+ return(0);
+}
+
+
+/* ARGSUSED */
+static int
+termp__t_pre(DECL_ARGS)
+{
+
+ /* FIXME: titles are underlined. */
+ word(p, "\"");
+ p->flags |= TERMP_NOSPACE;
+ return(1);
+}
+
+
+/* ARGSUSED */
+static void
+termp__t_post(DECL_ARGS)
+{
+
+ p->flags |= TERMP_NOSPACE;
+ /* FIXME: titles are underlined. */
+ word(p, "\"");
+ word(p, node->next ? "," : ".");
+}
+
+
+/* ARGSUSED */
+static void
+termp____post(DECL_ARGS)
+{
+
+ p->flags |= TERMP_NOSPACE;
+ word(p, node->next ? "," : ".");
+}