From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id sA3NId0p022153 for ; Mon, 3 Nov 2014 18:18:40 -0500 (EST) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id sA3NId0W018539; Mon, 3 Nov 2014 18:18:39 -0500 (EST) Date: Mon, 3 Nov 2014 18:18:39 -0500 (EST) Message-Id: <201411032318.sA3NId0W018539@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Allow the five man(7) font macros to concatenate their line X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Allow the five man(7) font macros to concatenate their line arguments, the same way the mdoc(7) macros marked MDOC_JOIN do it. In -Thtml, this removes bogus
when the font macros are used in no-fill mode; issue found by jsg@ in the Xcursor(3) SYNOPSIS. As a bonus, this slightly reduces the size of the syntax tree. Modified Files: -------------- mdocml: libman.h man.c man_macro.c Revision Data ------------- Index: man.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man.c,v retrieving revision 1.141 retrieving revision 1.142 diff -Lman.c -Lman.c -u -p -r1.141 -r1.142 --- man.c +++ man.c @@ -315,6 +315,21 @@ man_word_alloc(struct man *man, int line return(1); } +void +man_word_append(struct man *man, const char *word) +{ + struct man_node *n; + char *addstr, *newstr; + + n = man->last; + addstr = roff_strdup(man->roff, word); + mandoc_asprintf(&newstr, "%s %s", n->string, addstr); + free(addstr); + free(n->string); + n->string = newstr; + man->next = MAN_NEXT_SIBLING; +} + /* * Free all of the resources held by a node. This does NOT unlink a * node from its context; for that, see man_node_unlink(). Index: libman.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/libman.h,v retrieving revision 1.63 retrieving revision 1.64 diff -Llibman.h -Llibman.h -u -p -r1.63 -r1.64 --- libman.h +++ libman.h @@ -1,6 +1,7 @@ /* $Id$ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons + * Copyright (c) 2014 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -53,6 +54,7 @@ struct man_macro { #define MAN_NSCOPED (1 << 3) /* See in_line_eoln(). */ #define MAN_NOCLOSE (1 << 4) /* See blk_exp(). */ #define MAN_BSCOPE (1 << 5) /* Break BLINE scope. */ +#define MAN_JOIN (1 << 6) /* Join arguments together. */ }; extern const struct man_macro *const man_macros; @@ -60,6 +62,7 @@ extern const struct man_macro *const man __BEGIN_DECLS int man_word_alloc(struct man *, int, int, const char *); +void man_word_append(struct man *, const char *); int man_block_alloc(struct man *, int, int, enum mant); int man_head_alloc(struct man *, int, int, enum mant); int man_tail_alloc(struct man *, int, int, enum mant); Index: man_macro.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_macro.c,v retrieving revision 1.89 retrieving revision 1.90 diff -Lman_macro.c -Lman_macro.c -u -p -r1.89 -r1.90 --- man_macro.c +++ man_macro.c @@ -1,7 +1,7 @@ /* $Id$ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2012, 2013 Ingo Schwarze + * Copyright (c) 2012, 2013, 2014 Ingo Schwarze * Copyright (c) 2013 Franco Fichtner * * Permission to use, copy, modify, and distribute this software for any @@ -61,15 +61,15 @@ const struct man_macro __man_macros[MAN_ { blk_imp, MAN_BSCOPE }, /* P */ { blk_imp, MAN_BSCOPE }, /* IP */ { blk_imp, MAN_BSCOPE }, /* HP */ - { in_line_eoln, MAN_SCOPED }, /* SM */ - { in_line_eoln, MAN_SCOPED }, /* SB */ + { in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* SM */ + { in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* SB */ { in_line_eoln, 0 }, /* BI */ { in_line_eoln, 0 }, /* IB */ { in_line_eoln, 0 }, /* BR */ { in_line_eoln, 0 }, /* RB */ - { in_line_eoln, MAN_SCOPED }, /* R */ - { in_line_eoln, MAN_SCOPED }, /* B */ - { in_line_eoln, MAN_SCOPED }, /* I */ + { in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* R */ + { in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* B */ + { in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* I */ { in_line_eoln, 0 }, /* IR */ { in_line_eoln, 0 }, /* RI */ { in_line_eoln, MAN_NSCOPED }, /* na */ @@ -423,7 +423,10 @@ in_line_eoln(MACRO_PROT_ARGS) la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; - if ( ! man_word_alloc(man, line, la, p)) + if (man_macros[tok].flags & MAN_JOIN && + man->last->type == MAN_TEXT) + man_word_append(man, p); + else if ( ! man_word_alloc(man, line, la, p)) return(0); } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv