[BACK]Return to mdoc_state.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/mdoc_state.c between version 1.16 and 1.17

version 1.16, 2020/01/19 17:59:01 version 1.17, 2022/08/19 12:49:36
Line 1 
Line 1 
 /*      $OpenBSD$ */  /* $OpenBSD$ */
 /*  /*
  * Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2014,2015,2017,2018,2022 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 32 
Line 32 
   
 typedef void    (*state_handler)(STATE_ARGS);  typedef void    (*state_handler)(STATE_ARGS);
   
   static  void     setsec(struct roff_node *, enum roff_sec);
 static  void     state_bl(STATE_ARGS);  static  void     state_bl(STATE_ARGS);
 static  void     state_sh(STATE_ARGS);  static  void     state_sh(STATE_ARGS);
 static  void     state_sm(STATE_ARGS);  static  void     state_sm(STATE_ARGS);
Line 203 
Line 204 
 }  }
   
 static void  static void
 state_sh(STATE_ARGS)  setsec(struct roff_node *n, enum roff_sec sec)
 {  {
         struct roff_node *nch;          struct roff_node *nch;
         char             *secname;  
   
           n->sec = sec;
           for (nch = n->child; nch != NULL; nch = nch->next)
                   setsec(nch, sec);
   }
   
   /*
    * Set the section attribute for the BLOCK, HEAD, and HEAD children.
    * For other nodes, including the .Sh BODY, this is done when allocating
    * the node data structures, but for .Sh BLOCK and HEAD, the section is
    * still unknown at that time.
    */
   static void
   state_sh(STATE_ARGS)
   {
           enum roff_sec sec;
   
         if (n->type != ROFFT_HEAD)          if (n->type != ROFFT_HEAD)
                 return;                  return;
   
         if ( ! (n->flags & NODE_VALID)) {          if ((n->flags & NODE_VALID) == 0) {
                 secname = NULL;                  sec = n->child != NULL && n->child->type == ROFFT_TEXT &&
                 deroff(&secname, n);                      n->child->next == NULL ? mdoc_a2sec(n->child->string) :
                       SEC_CUSTOM;
                 /*                  n->parent->sec = sec;
                  * Set the section attribute for the BLOCK, HEAD,                  setsec(n, sec);
                  * and HEAD children; the latter can only be TEXT  
                  * nodes, so no recursion is needed.  For other  
                  * nodes, including the .Sh BODY, this is done  
                  * when allocating the node data structures, but  
                  * for .Sh BLOCK and HEAD, the section is still  
                  * unknown at that time.  
                  */  
   
                 n->sec = n->parent->sec = secname == NULL ?  
                     SEC_CUSTOM : mdoc_a2sec(secname);  
                 for (nch = n->child; nch != NULL; nch = nch->next)  
                         nch->sec = n->sec;  
                 free(secname);  
         }          }
   
         if ((mdoc->lastsec = n->sec) == SEC_SYNOPSIS) {          if ((mdoc->lastsec = n->sec) == SEC_SYNOPSIS) {
                 roff_setreg(mdoc->roff, "nS", 1, '=');                  roff_setreg(mdoc->roff, "nS", 1, '=');
                 mdoc->flags |= MDOC_SYNOPSIS;                  mdoc->flags |= MDOC_SYNOPSIS;

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17