OMFG..

Ingo you just made my morning. I'm laughing so hard.

And I needed the laugh

-Bob



On Fri, Jun 20, 2014 at 04:54:15PM +0200, Ingo Schwarze wrote:
> Hi Theo,
> 
> Theo de Raadt wrote on Thu, Jun 19, 2014 at 09:58:01PM -0600:
> 
> > It could be argued that the bcmp manual page does a poor job
> > documenting this.  It should use the mandoc blink tag.
> 
> OK?
> 
> It's not perfect yet because when you nest blink tags, it already
> switches back to non-blinking mode after you close the inner block,
> not after closing the outer block as it should.
> But that can be fixed later, in the tree.
> 
> Using this requires
> 
>   export LESS=-R
> 
> or something equivalent, depending on your setup, of course.
> 
> Maybe we should make that the default.
> 
> I guess i need to submit a similar patch to groff, as well.
> 
> Yours,
>   Ingo
> 
> 
> Index: share/man/man7/mdoc.7
> ===================================================================
> RCS file: /cvs/src/share/man/man7/mdoc.7,v
> retrieving revision 1.110
> diff -u -p -r1.110 mdoc.7
> --- share/man/man7/mdoc.7     30 Mar 2014 23:57:43 -0000      1.110
> +++ share/man/man7/mdoc.7     20 Jun 2014 14:43:02 -0000
> @@ -534,6 +534,7 @@ in the alphabetical
>  .It Sx \&Bq , \&Bo , \&Bc Ta enclose in square brackets: Bq text
>  .It Sx \&Brq , \&Bro , \&Brc Ta enclose in curly braces: Brq text
>  .It Sx \&Aq , \&Ao , \&Ac Ta enclose in angle brackets: Aq text
> +.It Sx \&Blq , \&Blo , \&Blc Ta blink: Blq text
>  .It Sx \&Eo , \&Ec Ta generic enclosure
>  .El
>  .Ss Text production
> @@ -1077,6 +1078,16 @@ and
>  .Pp
>  See also
>  .Sx \&Bo .
> +.Ss \&Blc
> +Close a
> +.Sx \&Blo
> +block.
> +Does not have any tail arguments.
> +.Ss \&Blo
> +Begin a blinking block.
> +Does not have any head arguments.
> +.Ss \&Blq
> +Makes its arguments blink.
>  .Ss \&Brc
>  Close a
>  .Sx \&Bro
> @@ -2924,6 +2935,7 @@ end of the line.
>  .Bl -column "MacroX" "CallableX" "ParsedX" -offset indent
>  .It Em Macro Ta Em Callable Ta Em Parsed
>  .It Sx \&Aq  Ta    Yes      Ta    Yes
> +.It Sx \&Blq Ta    Yes      Ta    Yes
>  .It Sx \&Bq  Ta    Yes      Ta    Yes
>  .It Sx \&Brq Ta    Yes      Ta    Yes
>  .It Sx \&D1  Ta    \&No     Ta    \&Yes
> Index: usr.bin/mandoc/mdoc.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc.c,v
> retrieving revision 1.104
> diff -u -p -r1.104 mdoc.c
> --- usr.bin/mandoc/mdoc.c     25 Apr 2014 14:10:59 -0000      1.104
> +++ usr.bin/mandoc/mdoc.c     20 Jun 2014 14:43:02 -0000
> @@ -62,7 +62,8 @@ const       char *const __mdoc_macronames[MDOC
>       "Lk",           "Mt",           "Brq",          "Bro",
>       "Brc",          "%C",           "Es",           "En",
>       "Dx",           "%Q",           "br",           "sp",
> -     "%U",           "Ta",           "ll",
> +     "%U",           "Ta",           "ll",           "Blo",
> +     "Blc",          "Blq",
>       };
>  
>  const        char *const __mdoc_argnames[MDOC_ARG_MAX] = {
> Index: usr.bin/mandoc/mdoc.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc.h,v
> retrieving revision 1.53
> diff -u -p -r1.53 mdoc.h
> --- usr.bin/mandoc/mdoc.h     20 Apr 2014 16:44:44 -0000      1.53
> +++ usr.bin/mandoc/mdoc.h     20 Jun 2014 14:43:02 -0000
> @@ -141,6 +141,9 @@ enum      mdoct {
>       MDOC__U,
>       MDOC_Ta,
>       MDOC_ll,
> +     MDOC_Blo,
> +     MDOC_Blc,
> +     MDOC_Blq,
>       MDOC_MAX
>  };
>  
> Index: usr.bin/mandoc/mdoc_argv.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_argv.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 mdoc_argv.c
> --- usr.bin/mandoc/mdoc_argv.c        23 Apr 2014 21:06:33 -0000      1.50
> +++ usr.bin/mandoc/mdoc_argv.c        20 Jun 2014 14:43:03 -0000
> @@ -264,6 +264,9 @@ static    const struct mdocarg mdocargs[MDO
>       { ARGSFL_NONE, NULL }, /* %U */
>       { ARGSFL_NONE, NULL }, /* Ta */
>       { ARGSFL_NONE, NULL }, /* ll */
> +     { ARGSFL_NONE, NULL }, /* Blo */
> +     { ARGSFL_DELIM, NULL }, /* Blc */
> +     { ARGSFL_DELIM, NULL }, /* Blq */
>  };
>  
>  
> Index: usr.bin/mandoc/mdoc_html.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_html.c,v
> retrieving revision 1.73
> diff -u -p -r1.73 mdoc_html.c
> --- usr.bin/mandoc/mdoc_html.c        23 Apr 2014 16:07:06 -0000      1.73
> +++ usr.bin/mandoc/mdoc_html.c        20 Jun 2014 14:43:03 -0000
> @@ -242,6 +242,9 @@ static    const struct htmlmdoc mdocs[MDOC_
>       {mdoc__x_pre, mdoc__x_post}, /* %U */
>       {NULL, NULL}, /* Ta */
>       {mdoc_ll_pre, NULL}, /* ll */
> +     {mdoc_quote_pre, mdoc_quote_post}, /* Blo */
> +     {NULL, NULL}, /* Blc */
> +     {mdoc_quote_pre, mdoc_quote_post}, /* Blq */
>  };
>  
>  static       const char * const lists[LIST_MAX] = {
> @@ -2063,6 +2066,12 @@ mdoc_quote_pre(MDOC_ARGS)
>       case MDOC_Aq:
>               print_text(h, "\\(la");
>               break;
> +     case MDOC_Blo:
> +             /* FALLTHROUGH */
> +     case MDOC_Blq:
> +             PAIR_CLASS_INIT(&tag, "blink");
> +             print_otag(h, TAG_SPAN, 1, &tag);
> +             break;
>       case MDOC_Bro:
>               /* FALLTHROUGH */
>       case MDOC_Brq:
> @@ -2131,6 +2140,10 @@ mdoc_quote_post(MDOC_ARGS)
>               /* FALLTHROUGH */
>       case MDOC_Aq:
>               print_text(h, "\\(ra");
> +             /* FALLTHROUGH */
> +     case MDOC_Blo:
> +             /* FALLTHROUGH */
> +     case MDOC_Blq:
>               break;
>       case MDOC_Bro:
>               /* FALLTHROUGH */
> Index: usr.bin/mandoc/mdoc_macro.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
> retrieving revision 1.88
> diff -u -p -r1.88 mdoc_macro.c
> --- usr.bin/mandoc/mdoc_macro.c       20 Apr 2014 16:44:44 -0000      1.88
> +++ usr.bin/mandoc/mdoc_macro.c       20 Jun 2014 14:43:03 -0000
> @@ -208,6 +208,11 @@ const    struct mdoc_macro __mdoc_macros[MD
>       { in_line_eoln, 0 }, /* %U */
>       { phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
>       { in_line_eoln, 0 }, /* ll */
> +     { blk_part_exp, MDOC_CALLABLE | MDOC_PARSED |
> +                     MDOC_EXPLICIT | MDOC_JOIN }, /* Blo */
> +     { blk_exp_close, MDOC_CALLABLE | MDOC_PARSED |
> +                      MDOC_EXPLICIT | MDOC_JOIN }, /* Blc */
> +     { blk_part_imp, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Blq */
>  };
>  
>  const        struct mdoc_macro * const mdoc_macros = __mdoc_macros;
> Index: usr.bin/mandoc/mdoc_man.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_man.c,v
> retrieving revision 1.62
> diff -u -p -r1.62 mdoc_man.c
> --- usr.bin/mandoc/mdoc_man.c 20 Apr 2014 19:39:35 -0000      1.62
> +++ usr.bin/mandoc/mdoc_man.c 20 Jun 2014 14:43:04 -0000
> @@ -239,6 +239,9 @@ static    const struct manact manacts[MDOC_
>       { NULL, NULL, post_percent, NULL, NULL }, /* %U */
>       { NULL, NULL, NULL, NULL, NULL }, /* Ta */
>       { NULL, pre_ll, post_sp, NULL, NULL }, /* ll */
> +     { NULL, NULL, NULL, NULL, NULL }, /* Blo */
> +     { NULL, NULL, NULL, NULL, NULL }, /* Blc */
> +     { NULL, NULL, NULL, NULL, NULL }, /* Blq */
>       { NULL, NULL, NULL, NULL, NULL }, /* ROOT */
>  };
>  
> Index: usr.bin/mandoc/mdoc_term.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
> retrieving revision 1.169
> diff -u -p -r1.169 mdoc_term.c
> --- usr.bin/mandoc/mdoc_term.c        23 Apr 2014 16:07:06 -0000      1.169
> +++ usr.bin/mandoc/mdoc_term.c        20 Jun 2014 14:43:04 -0000
> @@ -243,6 +243,9 @@ static    const struct termact termacts[MDO
>       { NULL, termp____post }, /* %U */
>       { NULL, NULL }, /* Ta */
>       { termp_ll_pre, NULL }, /* ll */
> +     { termp_quote_pre, termp_quote_post }, /* Blo */
> +     { NULL, NULL }, /* Blc */
> +     { termp_quote_pre, termp_quote_post }, /* Blq */
>  };
>  
>  
> @@ -1837,6 +1840,11 @@ termp_quote_pre(DECL_ARGS)
>       case MDOC_Aq:
>               term_word(p, "<");
>               break;
> +     case MDOC_Blo:
> +             /* FALLTHROUGH */
> +     case MDOC_Blq:
> +             term_word(p, "\x1B[5m");
> +             break;
>       case MDOC_Bro:
>               /* FALLTHROUGH */
>       case MDOC_Brq:
> @@ -1900,6 +1908,11 @@ termp_quote_post(DECL_ARGS)
>               /* FALLTHROUGH */
>       case MDOC_Aq:
>               term_word(p, ">");
> +             break;
> +     case MDOC_Blo:
> +             /* FALLTHROUGH */
> +     case MDOC_Blq:
> +             term_word(p, "\x1B[0m");
>               break;
>       case MDOC_Bro:
>               /* FALLTHROUGH */
> Index: usr.bin/mandoc/mdoc_validate.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_validate.c,v
> retrieving revision 1.132
> diff -u -p -r1.132 mdoc_validate.c
> --- usr.bin/mandoc/mdoc_validate.c    23 Apr 2014 21:06:33 -0000      1.132
> +++ usr.bin/mandoc/mdoc_validate.c    20 Jun 2014 14:43:04 -0000
> @@ -299,6 +299,9 @@ static    const struct valids mdoc_valids[M
>       { NULL, posts_text1 },                  /* %U */
>       { NULL, NULL },                         /* Ta */
>       { NULL, NULL },                         /* ll */
> +     { NULL, NULL },                         /* Blo */
> +     { NULL, NULL },                         /* Blc */
> +     { NULL, NULL },                         /* Blq */
>  };
>  
>  #define      RSORD_MAX 14 /* Number of `Rs' blocks. */
> 

Reply via email to