[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.24 and 1.27

version 1.24, 2018/04/11 17:11:13 version 1.27, 2018/10/25 01:32:40
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2017, 2018 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 103  static void  md_post_Pf(struct roff_node *);
Line 103  static void  md_post_Pf(struct roff_node *);
 static  void     md_post_Vt(struct roff_node *);  static  void     md_post_Vt(struct roff_node *);
 static  void     md_post__T(struct roff_node *);  static  void     md_post__T(struct roff_node *);
   
 static  const struct md_act __md_acts[MDOC_MAX - MDOC_Dd] = {  static  const struct md_act md_acts[MDOC_MAX - MDOC_Dd] = {
         { NULL, NULL, NULL, NULL, NULL }, /* Dd */          { NULL, NULL, NULL, NULL, NULL }, /* Dd */
         { NULL, NULL, NULL, NULL, NULL }, /* Dt */          { NULL, NULL, NULL, NULL, NULL }, /* Dt */
         { NULL, NULL, NULL, NULL, NULL }, /* Os */          { NULL, NULL, NULL, NULL, NULL }, /* Os */
Line 225  static const struct md_act __md_acts[MDOC_MAX - MDOC_D
Line 225  static const struct md_act __md_acts[MDOC_MAX - MDOC_D
         { 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 */
 };  };
 static  const struct md_act *const md_acts = __md_acts - MDOC_Dd;  static const struct md_act *md_act(enum roff_tok);
   
 static  int      outflags;  static  int      outflags;
 #define MD_spc           (1 << 0)  /* Blank character before next word. */  #define MD_spc           (1 << 0)  /* Blank character before next word. */
Line 250  static int  escflags; /* Escape in generated markdown 
Line 250  static int  escflags; /* Escape in generated markdown 
 static  int      code_blocks, quote_blocks, list_blocks;  static  int      code_blocks, quote_blocks, list_blocks;
 static  int      outcount;  static  int      outcount;
   
   
   static const struct md_act *
   md_act(enum roff_tok tok)
   {
           assert(tok >= MDOC_Dd && tok <= MDOC_MAX);
           return md_acts + (tok - MDOC_Dd);
   }
   
 void  void
 markdown_mdoc(void *arg, const struct roff_man *mdoc)  markdown_mdoc(void *arg, const struct roff_man *mdoc)
 {  {
Line 330  md_node(struct roff_node *n)
Line 338  md_node(struct roff_node *n)
                         break;                          break;
                 }                  }
         } else {          } else {
                 assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);                  act = md_act(n->tok);
                 act = md_acts + n->tok;  
                 cond = act->cond == NULL || (*act->cond)(n);                  cond = act->cond == NULL || (*act->cond)(n);
                 if (cond && act->pre != NULL &&                  if (cond && act->pre != NULL &&
                     (n->end == ENDBODY_NOT || n->child != NULL))                      (n->end == ENDBODY_NOT || n->child != NULL))
Line 580  md_word(const char *s)
Line 587  md_word(const char *s)
                         case ESCAPE_SPECIAL:                          case ESCAPE_SPECIAL:
                                 uc = mchars_spec2cp(seq, sz);                                  uc = mchars_spec2cp(seq, sz);
                                 break;                                  break;
                           case ESCAPE_DEVICE:
                                   md_rawword("markdown");
                                   continue;
                         case ESCAPE_FONTBOLD:                          case ESCAPE_FONTBOLD:
                                 nextfont = "**";                                  nextfont = "**";
                                 break;                                  break;
Line 590  md_word(const char *s)
Line 600  md_word(const char *s)
                                 nextfont = "***";                                  nextfont = "***";
                                 break;                                  break;
                         case ESCAPE_FONT:                          case ESCAPE_FONT:
                           case ESCAPE_FONTCW:
                         case ESCAPE_FONTROMAN:                          case ESCAPE_FONTROMAN:
                                 nextfont = "";                                  nextfont = "";
                                 break;                                  break;
Line 716  md_pre_raw(struct roff_node *n)
Line 727  md_pre_raw(struct roff_node *n)
 {  {
         const char      *prefix;          const char      *prefix;
   
         if ((prefix = md_acts[n->tok].prefix) != NULL) {          if ((prefix = md_act(n->tok)->prefix) != NULL) {
                 md_rawword(prefix);                  md_rawword(prefix);
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 if (*prefix == '`')                  if (*prefix == '`')
Line 730  md_post_raw(struct roff_node *n)
Line 741  md_post_raw(struct roff_node *n)
 {  {
         const char      *suffix;          const char      *suffix;
   
         if ((suffix = md_acts[n->tok].suffix) != NULL) {          if ((suffix = md_act(n->tok)->suffix) != NULL) {
                 outflags &= ~(MD_spc | MD_nl);                  outflags &= ~(MD_spc | MD_nl);
                 md_rawword(suffix);                  md_rawword(suffix);
                 if (*suffix == '`')                  if (*suffix == '`')
Line 743  md_pre_word(struct roff_node *n)
Line 754  md_pre_word(struct roff_node *n)
 {  {
         const char      *prefix;          const char      *prefix;
   
         if ((prefix = md_acts[n->tok].prefix) != NULL) {          if ((prefix = md_act(n->tok)->prefix) != NULL) {
                 md_word(prefix);                  md_word(prefix);
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
         }          }
Line 755  md_post_word(struct roff_node *n)
Line 766  md_post_word(struct roff_node *n)
 {  {
         const char      *suffix;          const char      *suffix;
   
         if ((suffix = md_acts[n->tok].suffix) != NULL) {          if ((suffix = md_act(n->tok)->suffix) != NULL) {
                 outflags &= ~(MD_spc | MD_nl);                  outflags &= ~(MD_spc | MD_nl);
                 md_word(suffix);                  md_word(suffix);
         }          }

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.27

CVSweb