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

Diff for /mandoc/Attic/macro.c between version 1.67 and 1.71

version 1.67, 2009/03/12 02:57:36 version 1.71, 2009/03/12 23:05:21
Line 40  static int   macro_text(MACRO_PROT_ARGS);
Line 40  static int   macro_text(MACRO_PROT_ARGS);
 static  int       macro_scoped(MACRO_PROT_ARGS);  static  int       macro_scoped(MACRO_PROT_ARGS);
 static  int       macro_scoped_close(MACRO_PROT_ARGS);  static  int       macro_scoped_close(MACRO_PROT_ARGS);
 static  int       macro_scoped_line(MACRO_PROT_ARGS);  static  int       macro_scoped_line(MACRO_PROT_ARGS);
 static  int       macro_phrase(struct mdoc *, int, char *);  static  int       macro_phrase(struct mdoc *, int, int, char *);
   
 #define REWIND_REWIND   (1 << 0)  #define REWIND_REWIND   (1 << 0)
 #define REWIND_NOHALT   (1 << 1)  #define REWIND_NOHALT   (1 << 1)
Line 89  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 89  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */
         { macro_text, MDOC_PARSED }, /* An */          { macro_text, MDOC_PARSED }, /* An */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */
         { macro_constant, 0 }, /* Cd */          { macro_constant, MDOC_CALLABLE }, /* Cd */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Dv */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Dv */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Er */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Er */
Line 128  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 128  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Ac */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Ac */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Ao */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Ao */
         { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Aq */          { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Aq */
         { macro_constant_delimited, 0 }, /* At */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* At */
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Bc */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Bc */
         { macro_scoped, MDOC_EXPLICIT }, /* Bf */          { macro_scoped, MDOC_EXPLICIT }, /* Bf */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bo */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bo */
         { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Bq */          { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Bq */
         { macro_constant_delimited, MDOC_PARSED }, /* Bsx */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Bsx */
         { macro_constant_delimited, MDOC_PARSED }, /* Bx */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Bx */
         { macro_constant, 0 }, /* Db */          { macro_constant, 0 }, /* Db */
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Dc */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Dc */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Do */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Do */
Line 143  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 143  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { macro_scoped_close, MDOC_EXPLICIT }, /* Ef */          { macro_scoped_close, MDOC_EXPLICIT }, /* Ef */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Em */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Em */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Eo */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Eo */
         { macro_constant_delimited, MDOC_PARSED }, /* Fx */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Fx */
         { macro_text, MDOC_PARSED }, /* Ms */          { macro_text, MDOC_PARSED }, /* Ms */
         { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* No */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* No */
         { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */
         { macro_constant_delimited, MDOC_PARSED }, /* Nx */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Nx */
         { macro_constant_delimited, MDOC_PARSED }, /* Ox */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ox */
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */
         { macro_constant_delimited, MDOC_PARSED }, /* Pf */          { macro_constant_delimited, MDOC_PARSED }, /* Pf */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Po */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Po */
Line 166  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 166  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Sx */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Sx */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Sy */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Sy */
         { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Tn */          { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Tn */
         { macro_constant_delimited, MDOC_PARSED }, /* Ux */          { macro_constant_delimited, MDOC_CALLABLE | MDOC_PARSED }, /* Ux */
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Xc */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Xc */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Xo */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Xo */
         /* XXX - .Fo supposed to be (but isn't) callable. */          /* XXX - .Fo supposed to be (but isn't) callable. */
Line 188  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 188  const struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
         { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Brq */          { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Brq */
         { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bro */          { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bro */
         { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Brc */          { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Brc */
           { macro_constant, 0 }, /* %C */
 };  };
   
 const   struct mdoc_macro * const mdoc_macros = __mdoc_macros;  const   struct mdoc_macro * const mdoc_macros = __mdoc_macros;
Line 1004  macro_scoped(MACRO_PROT_ARGS)
Line 1005  macro_scoped(MACRO_PROT_ARGS)
                          * in the columnar output of a macro. They need                           * in the columnar output of a macro. They need
                          * special handling.                           * special handling.
                          */                           */
                         if ( ! macro_phrase(mdoc, line, p))                          if ( ! macro_phrase(mdoc, line, lastarg, buf))
                                 return(0);                                  return(0);
                         if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))                          if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
                                 return(0);                                  return(0);
Line 1393  macro_constant(MACRO_PROT_ARGS)
Line 1394  macro_constant(MACRO_PROT_ARGS)
         struct mdoc_arg  *arg;          struct mdoc_arg  *arg;
         char             *p;          char             *p;
   
         assert( ! (MDOC_CALLABLE & mdoc_macros[tok].flags));  
   
         arg = NULL;          arg = NULL;
   
         for (;;) {          for (;;) {
Line 1459  macro_phrase(struct mdoc *mdoc, int line, int ppos, ch
Line 1458  macro_phrase(struct mdoc *mdoc, int line, int ppos, ch
 {  {
         int              i, la, c;          int              i, la, c;
   
         i = ppos;          for (i = ppos; buf[i]; ) {
                   assert(' ' != buf[i]);
   
 again:                  la = i;
         la = i;                  if ('\"' == buf[i]) {
         while (buf[i] && ! isspace((unsigned char)buf[i]))                          la = ++i;
                 i++;                          while (buf[i] && '\"' != buf[i])
                                   i++;
                           if (0 == buf[i])
                                   return(mdoc_err(mdoc, "unterminated quoted parameter"));
                   } else
                           while (buf[i] && ! isspace ((unsigned char)buf[i]))
                                   i++;
   
         if (0 == buf[i])                  if (buf[i])
                 return(mdoc_word_alloc(mdoc, line, la, buf));                          buf[i++] = 0;
   
         buf[i] = 0;                  while (buf[i] && isspace((unsigned char)buf[i]))
                           i++;
   
         if (MDOC_MAX == (c = mdoc_tokhash_find(mdoc->htab, p))) {                  if (MDOC_MAX != (c = mdoc_tokhash_find(mdoc->htab, &buf[la]))) {
                 if ( ! mdoc_word_alloc(mdoc, line,                          if ( ! mdoc_macro(mdoc, c, line, la, &i, buf))
                                   return(0);
                           return(append_delims(mdoc, line, &i, buf));
                   }
   
                   if ( ! mdoc_word_alloc(mdoc, line, la, &buf[la]))
                           return(0);
                   mdoc->next = MDOC_NEXT_SIBLING;
   
                   while (buf[i] && isspace((unsigned char)buf[i]))
                           i++;
         }          }
   
           return(1);
 }  }

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.71

CVSweb