-/* $Id: mdoc_macro.c,v 1.107 2011/04/19 16:38:48 kristaps Exp $ */
+/* $Id: mdoc_macro.c,v 1.109 2011/04/30 10:18:24 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
if (DELIM_OPEN == d)
m->last->flags |= MDOC_DELIMO;
- else if (DELIM_CLOSE == d)
+
+ /*
+ * Closing delimiters only suppress the preceding space
+ * when they follow something, not when they start a new
+ * block or element, and not when they follow `No'.
+ *
+ * XXX Explicitly special-casing MDOC_No here feels
+ * like a layering violation. Find a better way
+ * and solve this in the code related to `No'!
+ */
+
+ else if (DELIM_CLOSE == d && m->last->prev &&
+ m->last->prev->tok != MDOC_No)
m->last->flags |= MDOC_DELIMC;
return(1);
* If we encounter end-of-sentence symbols, then trigger
* the double-space.
*
- * XXX: it's easy to allow this to propogate outward to
+ * XXX: it's easy to allow this to propagate outward to
* the last symbol, such that `. )' will cause the
* correct double-spacing. However, (1) groff isn't
* smart enough to do this and (2) it would require
* knowing which symbols break this behaviour, for
- * example, `. ;' shouldn't propogate the double-space.
+ * example, `. ;' shouldn't propagate the double-space.
*/
if (mandoc_eos(p, strlen(p), 0))
m->last->flags |= MDOC_EOS;
}
/*
- * This routine accomodates implicitly- and explicitly-scoped
+ * This routine accommodates implicitly- and explicitly-scoped
* macro openings. Implicit ones first close out prior scope
* (seen above). Delay opening the head until necessary to
* allow leading punctuation to print. Special consideration
if (mandoc_eos(n->string, strlen(n->string), 1))
n->flags |= MDOC_EOS;
- /* Up-propogate the end-of-space flag. */
+ /* Up-propagate the end-of-space flag. */
if (n && (MDOC_EOS & n->flags)) {
body->flags |= MDOC_EOS;