- return(p->end || (MDOC_BLOCK == p->type &&
- ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)) ?
- REWIND_MORE : REWIND_LATER);
+ /*
+ * Default block rewinding rules.
+ * In particular, always skip block end markers,
+ * and let all blocks rewind Nm children.
+ */
+ if (ENDBODY_NOT != p->end || MDOC_Nm == p->tok ||
+ (MDOC_BLOCK == p->type &&
+ ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)))
+ return(REWIND_MORE);
+
+ /*
+ * By default, closing out full blocks
+ * forces closing of broken explicit blocks,
+ * while closing out partial blocks
+ * allows delayed rewinding by default.
+ */
+ return (&blk_full == mdoc_macros[tok].fp ?
+ REWIND_FORCE : REWIND_LATER);