[BACK]Return to roff.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/roff.c between version 1.337 and 1.338

version 1.337, 2018/08/20 17:25:09 version 1.338, 2018/08/21 18:15:22
Line 3156  roff_als(ROFF_ARGS)
Line 3156  roff_als(ROFF_ARGS)
         if (oldsz == 0)          if (oldsz == 0)
                 return ROFF_IGN;                  return ROFF_IGN;
   
         valsz = mandoc_asprintf(&value, ".%.*s \\$*\\\"\n",          valsz = mandoc_asprintf(&value, ".%.*s \\$@\\\"\n",
             (int)oldsz, oldn);              (int)oldsz, oldn);
         roff_setstrn(&r->strtab, newn, newsz, value, valsz, 0);          roff_setstrn(&r->strtab, newn, newsz, value, valsz, 0);
         roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0);          roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0);
Line 3380  roff_userdef(ROFF_ARGS)
Line 3380  roff_userdef(ROFF_ARGS)
 {  {
         const char       *arg[16], *ap;          const char       *arg[16], *ap;
         char             *cp, *n1, *n2;          char             *cp, *n1, *n2;
         int               argc, expand_count, i, ib, ie;          int               argc, expand_count, i, ib, ie, quote_args;
         size_t            asz, esz, rsz;          size_t            asz, esz, rsz;
   
         /*          /*
Line 3415  roff_userdef(ROFF_ARGS)
Line 3415  roff_userdef(ROFF_ARGS)
                         continue;                          continue;
                 if (*cp++ != '$')                  if (*cp++ != '$')
                         continue;                          continue;
                 if (*cp == '*') {  /* \\$* inserts all arguments */  
                   quote_args = 0;
                   switch (*cp) {
                   case '@':  /* \\$@ inserts all arguments, quoted */
                           quote_args = 1;
                           /* FALLTHROUGH */
                   case '*':  /* \\$* inserts all arguments, unquoted */
                         ib = 0;                          ib = 0;
                         ie = argc - 1;                          ie = argc - 1;
                 } else {  /* \\$1 .. \\$9 insert one argument */                          break;
                   default:  /* \\$1 .. \\$9 insert one argument */
                         ib = ie = *cp - '1';                          ib = ie = *cp - '1';
                         if (ib < 0 || ib > 8)                          if (ib < 0 || ib > 8)
                                 continue;                                  continue;
                           break;
                 }                  }
                 cp -= 2;                  cp -= 2;
   
Line 3447  roff_userdef(ROFF_ARGS)
Line 3455  roff_userdef(ROFF_ARGS)
   
                 asz = ie > ib ? ie - ib : 0;  /* for blanks */                  asz = ie > ib ? ie - ib : 0;  /* for blanks */
                 for (i = ib; i <= ie; i++) {                  for (i = ib; i <= ie; i++) {
                           if (quote_args)
                                   asz += 2;
                         for (ap = arg[i]; *ap != '\0'; ap++) {                          for (ap = arg[i]; *ap != '\0'; ap++) {
                                 asz++;                                  asz++;
                                 if (*ap == '"')                                  if (*ap == '"')
Line 3493  roff_userdef(ROFF_ARGS)
Line 3503  roff_userdef(ROFF_ARGS)
   
                 n2 = cp;                  n2 = cp;
                 for (i = ib; i <= ie; i++) {                  for (i = ib; i <= ie; i++) {
                           if (quote_args)
                                   *n2++ = '"';
                         for (ap = arg[i]; *ap != '\0'; ap++) {                          for (ap = arg[i]; *ap != '\0'; ap++) {
                                 if (*ap == '"') {                                  if (*ap == '"') {
                                         memcpy(n2, "\\(dq", 4);                                          memcpy(n2, "\\(dq", 4);
Line 3500  roff_userdef(ROFF_ARGS)
Line 3512  roff_userdef(ROFF_ARGS)
                                 } else                                  } else
                                         *n2++ = *ap;                                          *n2++ = *ap;
                         }                          }
                           if (quote_args)
                                   *n2++ = '"';
                         if (i < ie)                          if (i < ie)
                                 *n2++ = ' ';                                  *n2++ = ' ';
                 }                  }

Legend:
Removed from v.1.337  
changed lines
  Added in v.1.338

CVSweb