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

Diff for /mandoc/Attic/macro.c between version 1.44 and 1.45

version 1.44, 2009/01/20 12:51:28 version 1.45, 2009/01/20 13:05:28
Line 574  macro_scoped_close(MACRO_PROT_ARGS)
Line 574  macro_scoped_close(MACRO_PROT_ARGS)
 int  int
 macro_text(MACRO_PROT_ARGS)  macro_text(MACRO_PROT_ARGS)
 {  {
         int               la, lastpunct, c, fl, argc;          int               la, lastpunct, c, w, fl, argc;
         struct mdoc_arg   argv[MDOC_LINEARG_MAX];          struct mdoc_arg   argv[MDOC_LINEARG_MAX];
         char             *p;          char             *p;
   
Line 617  macro_text(MACRO_PROT_ARGS)
Line 617  macro_text(MACRO_PROT_ARGS)
         lastpunct = 0;          lastpunct = 0;
         for (;;) {          for (;;) {
                 la = *pos;                  la = *pos;
                 c = mdoc_args(mdoc, line, pos, buf, fl, &p);                  w = mdoc_args(mdoc, line, pos, buf, fl, &p);
                 if (ARGS_ERROR == c) {                  if (ARGS_ERROR == w) {
                         mdoc_argv_free(argc, argv);                          mdoc_argv_free(argc, argv);
                         return(0);                          return(0);
                 }                  }
   
                 if (ARGS_EOLN == c)                  if (ARGS_EOLN == w)
                         break;                          break;
                 if (ARGS_PUNCT == c)                  if (ARGS_PUNCT == w)
                         break;                          break;
   
                 if (-1 == (c = lookup(mdoc, line, la, tok, p)))                  c = ARGS_QWORD == w ? MDOC_MAX :
                         return(0);                          lookup(mdoc, line, la, tok, p);
                 else if (MDOC_MAX != c) {  
                   if (MDOC_MAX != c && -1 != c) {
                         if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {                          if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {
                                 mdoc_argv_free(argc, argv);                                  mdoc_argv_free(argc, argv);
                                 return(0);                                  return(0);
                         }                          }
                         mdoc_argv_free(argc, argv);                          mdoc_argv_free(argc, argv);
   
                         c = mdoc_macro(mdoc, c, line, la, pos, buf);                          c = mdoc_macro(mdoc, c, line, la, pos, buf);
                         if (0 == c)                          if (0 == c)
                                 return(0);                                  return(0);
                         if (ppos > 1)                          if (ppos > 1)
                                 return(1);                                  return(1);
                         return(append_delims(mdoc, line, pos, buf));                          return(append_delims(mdoc, line, pos, buf));
                   } else if (-1 == c) {
                           mdoc_argv_free(argc, argv);
                           return(0);
                 }                  }
   
                 if (mdoc_isdelim(p)) {                  if (ARGS_QWORD != w && mdoc_isdelim(p)) {
                         if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {                          if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {
                                 mdoc_argv_free(argc, argv);                                  mdoc_argv_free(argc, argv);
                                 return(0);                                  return(0);
Line 1113  macro_constant_delimited(MACRO_PROT_ARGS)
Line 1116  macro_constant_delimited(MACRO_PROT_ARGS)
 int  int
 macro_constant(MACRO_PROT_ARGS)  macro_constant(MACRO_PROT_ARGS)
 {  {
         int               c, lastarg, argc, fl;          int               c, w, la, argc, fl;
         struct mdoc_arg   argv[MDOC_LINEARG_MAX];          struct mdoc_arg   argv[MDOC_LINEARG_MAX];
         char             *p;          char             *p;
   
         assert( ! (MDOC_CALLABLE & mdoc_macros[tok].flags));          assert( ! (MDOC_CALLABLE & mdoc_macros[tok].flags));
   
         fl = 0;  
         if (MDOC_QUOTABLE & mdoc_macros[tok].flags)  
                 fl = ARGS_QUOTED;  
   
         for (argc = 0; argc < MDOC_LINEARG_MAX; argc++) {          for (argc = 0; argc < MDOC_LINEARG_MAX; argc++) {
                 lastarg = *pos;                  la = *pos;
                 c = mdoc_argv(mdoc, line, tok, &argv[argc], pos, buf);                  c = mdoc_argv(mdoc, line, tok, &argv[argc], pos, buf);
                 if (ARGV_EOLN == c)                  if (ARGV_EOLN == c)
                         break;                          break;
                 if (ARGV_WORD == c) {                  if (ARGV_WORD == c) {
                         *pos = lastarg;                          *pos = la;
                         break;                          break;
                 } else if (ARGV_ARG == c)                  } else if (ARGV_ARG == c)
                         continue;                          continue;
Line 1151  macro_constant(MACRO_PROT_ARGS)
Line 1150  macro_constant(MACRO_PROT_ARGS)
   
         mdoc->next = MDOC_NEXT_CHILD;          mdoc->next = MDOC_NEXT_CHILD;
   
           fl = 0;
           if (MDOC_QUOTABLE & mdoc_macros[tok].flags)
                   fl = ARGS_QUOTED;
   
         for (;;) {          for (;;) {
                 lastarg = *pos;                  la = *pos;
                 c = mdoc_args(mdoc, line, pos, buf, fl, &p);                  w = mdoc_args(mdoc, line, pos, buf, fl, &p);
                 if (ARGS_ERROR == c)                  if (ARGS_ERROR == w)
                         return(0);                          return(0);
                 if (ARGS_EOLN == c)                  if (ARGS_EOLN == w)
                         break;                          break;
   
                 if (-1 == (c = lookup(mdoc, line, lastarg, tok, p)))                  c = ARGS_QWORD == w ? MDOC_MAX :
                         return(0);                          lookup(mdoc, line, la, tok, p);
                 else if (MDOC_MAX != c) {  
                   if (MDOC_MAX != c && -1 != c) {
                         if ( ! rewind_elem(mdoc, tok))                          if ( ! rewind_elem(mdoc, tok))
                                 return(0);                                  return(0);
                         return(mdoc_macro(mdoc, c, line,                          return(mdoc_macro(mdoc, c, line, la, pos, buf));
                                                 lastarg, pos, buf));                  } else if (-1 == c)
                 }                          return(0);
   
                 if ( ! mdoc_word_alloc(mdoc, line, lastarg, p))                  if ( ! mdoc_word_alloc(mdoc, line, la, p))
                         return(0);                          return(0);
                 mdoc->next = MDOC_NEXT_SIBLING;                  mdoc->next = MDOC_NEXT_SIBLING;
         }          }

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.45

CVSweb