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

Diff for /mandoc/mdoc_markdown.c between version 1.31 and 1.37

version 1.31, 2019/07/01 22:56:24 version 1.37, 2021/08/10 12:55:03
Line 1 
Line 1 
 /*      $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2017, 2018, 2020 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 13 
Line 13 
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    *
    * Markdown formatter for mdoc(7) used by mandoc(1).
  */   */
   #include "config.h"
   
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
Line 29 
Line 33 
 #include "main.h"  #include "main.h"
   
 struct  md_act {  struct  md_act {
         int             (*cond)(struct roff_node *n);          int             (*cond)(struct roff_node *);
         int             (*pre)(struct roff_node *n);          int             (*pre)(struct roff_node *);
         void            (*post)(struct roff_node *n);          void            (*post)(struct roff_node *);
         const char       *prefix; /* pre-node string constant */          const char       *prefix; /* pre-node string constant */
         const char       *suffix; /* post-node string constant */          const char       *suffix; /* post-node string constant */
 };  };
   
 static  void     md_nodelist(struct roff_node *);  static  void     md_nodelist(struct roff_node *);
 static  void     md_node(struct roff_node *);  static  void     md_node(struct roff_node *);
 static  const char *md_stack(char c);  static  const char *md_stack(char);
 static  void     md_preword(void);  static  void     md_preword(void);
 static  void     md_rawword(const char *);  static  void     md_rawword(const char *);
 static  void     md_word(const char *);  static  void     md_word(const char *);
Line 226  static const struct md_act md_acts[MDOC_MAX - MDOC_Dd]
Line 230  static const struct md_act md_acts[MDOC_MAX - MDOC_Dd]
         { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */          { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */
         { NULL, md_pre_Lk, md_post_pc, NULL, NULL }, /* %U */          { NULL, md_pre_Lk, md_post_pc, NULL, NULL }, /* %U */
         { NULL, NULL, NULL, NULL, NULL }, /* Ta */          { NULL, NULL, NULL, NULL, NULL }, /* Ta */
           { NULL, md_pre_skip, NULL, NULL, NULL }, /* Tg */
 };  };
 static const struct md_act *md_act(enum roff_tok);  static const struct md_act *md_act(enum roff_tok);
   
Line 309  md_node(struct roff_node *n)
Line 314  md_node(struct roff_node *n)
   
         if (outflags & MD_nonl)          if (outflags & MD_nonl)
                 outflags &= ~(MD_nl | MD_sp);                  outflags &= ~(MD_nl | MD_sp);
         else if (outflags & MD_spc && n->flags & NODE_LINE)          else if (outflags & MD_spc &&
                n->flags & NODE_LINE &&
                !roff_node_transparent(n))
                 outflags |= MD_nl;                  outflags |= MD_nl;
   
         act = NULL;          act = NULL;
Line 596  md_word(const char *s)
Line 603  md_word(const char *s)
                                 md_rawword("markdown");                                  md_rawword("markdown");
                                 continue;                                  continue;
                         case ESCAPE_FONTBOLD:                          case ESCAPE_FONTBOLD:
                           case ESCAPE_FONTCB:
                                 nextfont = "**";                                  nextfont = "**";
                                 break;                                  break;
                         case ESCAPE_FONTITALIC:                          case ESCAPE_FONTITALIC:
                           case ESCAPE_FONTCI:
                                 nextfont = "*";                                  nextfont = "*";
                                 break;                                  break;
                         case ESCAPE_FONTBI:                          case ESCAPE_FONTBI:
                                 nextfont = "***";                                  nextfont = "***";
                                 break;                                  break;
                         case ESCAPE_FONT:                          case ESCAPE_FONT:
                         case ESCAPE_FONTCW:                          case ESCAPE_FONTCR:
                         case ESCAPE_FONTROMAN:                          case ESCAPE_FONTROMAN:
                                 nextfont = "";                                  nextfont = "";
                                 break;                                  break;
Line 786  md_post_word(struct roff_node *n)
Line 795  md_post_word(struct roff_node *n)
 static void  static void
 md_post_pc(struct roff_node *n)  md_post_pc(struct roff_node *n)
 {  {
           struct roff_node *nn;
   
         md_post_raw(n);          md_post_raw(n);
         if (n->parent->tok != MDOC_Rs)          if (n->parent->tok != MDOC_Rs)
                 return;                  return;
         if (n->next != NULL) {  
           if ((nn = roff_node_next(n)) != NULL) {
                 md_word(",");                  md_word(",");
                 if (n->prev != NULL &&                  if (nn->tok == n->tok &&
                     n->prev->tok == n->tok &&                      (nn = roff_node_prev(n)) != NULL &&
                     n->next->tok == n->tok)                      nn->tok == n->tok)
                         md_word("and");                          md_word("and");
         } else {          } else {
                 md_word(".");                  md_word(".");
Line 810  md_pre_skip(struct roff_node *n)
Line 822  md_pre_skip(struct roff_node *n)
 static void  static void
 md_pre_syn(struct roff_node *n)  md_pre_syn(struct roff_node *n)
 {  {
         if (n->prev == NULL || ! (n->flags & NODE_SYNPRETTY))          struct roff_node *np;
   
           if ((n->flags & NODE_SYNPRETTY) == 0 ||
               (np = roff_node_prev(n)) == NULL)
                 return;                  return;
   
         if (n->prev->tok == n->tok &&          if (np->tok == n->tok &&
             n->tok != MDOC_Ft &&              n->tok != MDOC_Ft &&
             n->tok != MDOC_Fo &&              n->tok != MDOC_Fo &&
             n->tok != MDOC_Fn) {              n->tok != MDOC_Fn) {
Line 821  md_pre_syn(struct roff_node *n)
Line 836  md_pre_syn(struct roff_node *n)
                 return;                  return;
         }          }
   
         switch (n->prev->tok) {          switch (np->tok) {
         case MDOC_Fd:          case MDOC_Fd:
         case MDOC_Fn:          case MDOC_Fn:
         case MDOC_Fo:          case MDOC_Fo:
Line 1052  md_pre_Fa(struct roff_node *n)
Line 1067  md_pre_Fa(struct roff_node *n)
 static void  static void
 md_post_Fa(struct roff_node *n)  md_post_Fa(struct roff_node *n)
 {  {
         if (n->next != NULL && n->next->tok == MDOC_Fa)          struct roff_node *nn;
   
           if ((nn = roff_node_next(n)) != NULL && nn->tok == MDOC_Fa)
                 md_word(",");                  md_word(",");
 }  }
   
Line 1074  md_post_Fd(struct roff_node *n)
Line 1091  md_post_Fd(struct roff_node *n)
 static void  static void
 md_post_Fl(struct roff_node *n)  md_post_Fl(struct roff_node *n)
 {  {
           struct roff_node *nn;
   
         md_post_raw(n);          md_post_raw(n);
         if (n->child == NULL && n->next != NULL &&          if (n->child == NULL && (nn = roff_node_next(n)) != NULL &&
             n->next->type != ROFFT_TEXT && !(n->next->flags & NODE_LINE))              nn->type != ROFFT_TEXT && (nn->flags & NODE_LINE) == 0)
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
 }  }
   

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.37

CVSweb