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

Diff for /mandoc/mdoc_state.c between version 1.18 and 1.19

version 1.18, 2022/04/14 16:43:44 version 1.19, 2022/08/19 12:59:26
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2014, 2015, 2017, 2021 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 37 
Line 37 
   
 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 208  state_bl(STATE_ARGS)
Line 209  state_bl(STATE_ARGS)
 }  }
   
 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.18  
changed lines
  Added in v.1.19

CVSweb