From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp1.rz.uni-karlsruhe.de (Debian-exim@smtp1.rz.uni-karlsruhe.de [129.13.185.217]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id o5QDcQXF030279 for ; Sat, 26 Jun 2010 09:38:28 -0400 (EDT) Received: from hekate.usta.de (asta-nat.asta.uni-karlsruhe.de [172.22.63.82]) by smtp1.rz.uni-karlsruhe.de with esmtp (Exim 4.63 #1) id 1OSVaS-0001dw-Ls; Sat, 26 Jun 2010 15:38:24 +0200 Received: from donnerwolke.usta.de ([172.24.96.3]) by hekate.usta.de with esmtp (Exim 4.71) (envelope-from ) id 1OSVaS-0003pI-Kf for tech@mdocml.bsd.lv; Sat, 26 Jun 2010 15:38:24 +0200 Received: from iris.usta.de ([172.24.96.5] helo=usta.de) by donnerwolke.usta.de with esmtp (Exim 4.69) (envelope-from ) id 1OSVaS-00055C-Jh for tech@mdocml.bsd.lv; Sat, 26 Jun 2010 15:38:24 +0200 Received: from schwarze by usta.de with local (Exim 4.71) (envelope-from ) id 1OSVaS-00038A-Ix for tech@mdocml.bsd.lv; Sat, 26 Jun 2010 15:38:24 +0200 Date: Sat, 26 Jun 2010 15:38:24 +0200 From: Ingo Schwarze To: tech@mdocml.bsd.lv Subject: [PATCH] implement .Bk Message-ID: <20100626133824.GB22002@iris.usta.de> X-Mailinglist: mdocml-tech Reply-To: tech@mdocml.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) Hi, yesterday night, i arrived at Edmonton for the c2k10, the OpenBSD yearly general hackathon. I plan to spend this week on mandoc. Here is the first patch i hacked up on the plane, implementing proper .Bk support. It is based on OpenBSD-current and can probably go in more or less as it is after merging bsd.lv HEAD into OpenBSD. Yours, Ingo Index: mdoc_term.c =================================================================== RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v retrieving revision 1.87 diff -u -p -r1.87 mdoc_term.c --- mdoc_term.c 10 Jun 2010 22:50:10 -0000 1.87 +++ mdoc_term.c 26 Jun 2010 11:38:21 -0000 @@ -71,6 +71,7 @@ static void termp____post(DECL_ARGS); static void termp_an_post(DECL_ARGS); static void termp_aq_post(DECL_ARGS); static void termp_bd_post(DECL_ARGS); +static void termp_bk_post(DECL_ARGS); static void termp_bl_post(DECL_ARGS); static void termp_bq_post(DECL_ARGS); static void termp_brq_post(DECL_ARGS); @@ -95,6 +96,7 @@ static int termp_ap_pre(DECL_ARGS); static int termp_aq_pre(DECL_ARGS); static int termp_bd_pre(DECL_ARGS); static int termp_bf_pre(DECL_ARGS); +static int termp_bk_pre(DECL_ARGS); static int termp_bl_pre(DECL_ARGS); static int termp_bold_pre(DECL_ARGS); static int termp_bq_pre(DECL_ARGS); @@ -234,7 +236,7 @@ static const struct termact termacts[MDO { NULL, NULL }, /* Fc */ { termp_op_pre, termp_op_post }, /* Oo */ { NULL, NULL }, /* Oc */ - { NULL, NULL }, /* Bk */ + { termp_bk_pre, termp_bk_post }, /* Bk */ { NULL, NULL }, /* Ek */ { termp_bt_pre, NULL }, /* Bt */ { NULL, NULL }, /* Hf */ @@ -2157,6 +2159,24 @@ termp_lk_pre(DECL_ARGS) return(0); } + +/* ARGSUSED */ +static int +termp_bk_pre(DECL_ARGS) +{ + + p->flags |= TERMP_PREKEEP; + return(1); +} + + +/* ARGSUSED */ +static void +termp_bk_post(DECL_ARGS) +{ + + p->flags &= ~(TERMP_KEEP | TERMP_PREKEEP); +} /* ARGSUSED */ static int Index: term.c =================================================================== RCS file: /cvs/src/usr.bin/mandoc/term.c,v retrieving revision 1.37 diff -u -p -r1.37 term.c --- term.c 10 Jun 2010 22:50:10 -0000 1.37 +++ term.c 26 Jun 2010 11:38:21 -0000 @@ -480,9 +480,15 @@ term_word(struct termp *p, const char *w } if ( ! (TERMP_NOSPACE & p->flags)) { - bufferc(p, ' '); - if (TERMP_SENTENCE & p->flags) + if (TERMP_KEEP & p->flags) + bufferc(p, ASCII_NBRSP); + else { + if (TERMP_PREKEEP & p->flags) + p->flags |= TERMP_KEEP; bufferc(p, ' '); + if (TERMP_SENTENCE & p->flags) + bufferc(p, ' '); + } } if ( ! (p->flags & TERMP_NONOSPACE)) Index: term.h =================================================================== RCS file: /cvs/src/usr.bin/mandoc/term.h,v retrieving revision 1.20 diff -u -p -r1.20 term.h --- term.h 10 Jun 2010 22:50:10 -0000 1.20 +++ term.h 26 Jun 2010 11:38:21 -0000 @@ -76,6 +76,8 @@ struct termp { #define TERMP_NOSPLIT (1 << 11) /* See termp_an_pre/post(). */ #define TERMP_SPLIT (1 << 12) /* See termp_an_pre/post(). */ #define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */ +#define TERMP_KEEP (1 << 14) /* Keep words together. */ +#define TERMP_PREKEEP (1 << 15) /* ...starting with the next one. */ char *buf; /* Output buffer. */ enum termenc enc; /* Type of encoding. */ void *symtab; /* Encoded-symbol table. */ -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv