[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.3 and 1.8

version 1.3, 2017/03/06 14:58:10 version 1.8, 2017/03/07 15:31:24
Line 51  static int  md_pre_raw(struct roff_node *);
Line 51  static int  md_pre_raw(struct roff_node *);
 static  int      md_pre_word(struct roff_node *);  static  int      md_pre_word(struct roff_node *);
 static  int      md_pre_skip(struct roff_node *);  static  int      md_pre_skip(struct roff_node *);
 static  void     md_pre_syn(struct roff_node *);  static  void     md_pre_syn(struct roff_node *);
   static  int      md_pre_An(struct roff_node *);
 static  int      md_pre_Ap(struct roff_node *);  static  int      md_pre_Ap(struct roff_node *);
 static  int      md_pre_Bd(struct roff_node *);  static  int      md_pre_Bd(struct roff_node *);
 static  int      md_pre_Bk(struct roff_node *);  static  int      md_pre_Bk(struct roff_node *);
Line 89  static void  md_post_En(struct roff_node *);
Line 90  static void  md_post_En(struct roff_node *);
 static  void     md_post_Eo(struct roff_node *);  static  void     md_post_Eo(struct roff_node *);
 static  void     md_post_Fa(struct roff_node *);  static  void     md_post_Fa(struct roff_node *);
 static  void     md_post_Fd(struct roff_node *);  static  void     md_post_Fd(struct roff_node *);
   static  void     md_post_Fl(struct roff_node *);
 static  void     md_post_Fn(struct roff_node *);  static  void     md_post_Fn(struct roff_node *);
 static  void     md_post_Fo(struct roff_node *);  static  void     md_post_Fo(struct roff_node *);
 static  void     md_post_In(struct roff_node *);  static  void     md_post_In(struct roff_node *);
Line 115  static const struct md_act md_acts[MDOC_MAX + 1] = {
Line 117  static const struct md_act md_acts[MDOC_MAX + 1] = {
         { NULL, NULL, NULL, NULL, NULL }, /* El */          { NULL, NULL, NULL, NULL, NULL }, /* El */
         { NULL, md_pre_It, md_post_It, NULL, NULL }, /* It */          { NULL, md_pre_It, md_post_It, NULL, NULL }, /* It */
         { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ad */          { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ad */
         { NULL, NULL, NULL, NULL, NULL }, /* An */          { NULL, md_pre_An, NULL, NULL, NULL }, /* An */
         { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ar */          { NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ar */
         { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cd */          { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cd */
         { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cm */          { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cm */
Line 125  static const struct md_act md_acts[MDOC_MAX + 1] = {
Line 127  static const struct md_act md_acts[MDOC_MAX + 1] = {
         { NULL, NULL, NULL, NULL, NULL }, /* Ex */          { NULL, NULL, NULL, NULL, NULL }, /* Ex */
         { NULL, md_pre_Fa, md_post_Fa, NULL, NULL }, /* Fa */          { NULL, md_pre_Fa, md_post_Fa, NULL, NULL }, /* Fa */
         { NULL, md_pre_Fd, md_post_Fd, "**", "**" }, /* Fd */          { NULL, md_pre_Fd, md_post_Fd, "**", "**" }, /* Fd */
         { NULL, md_pre_raw, md_post_raw, "**-", "**" }, /* Fl */          { NULL, md_pre_raw, md_post_Fl, "**-", "**" }, /* Fl */
         { NULL, md_pre_Fn, md_post_Fn, NULL, NULL }, /* Fn */          { NULL, md_pre_Fn, md_post_Fn, NULL, NULL }, /* Fn */
         { NULL, md_pre_Fd, md_post_raw, "*", "*" }, /* Ft */          { NULL, md_pre_Fd, md_post_raw, "*", "*" }, /* Ft */
         { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Ic */          { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Ic */
         { NULL, md_pre_In, md_post_In, "*", "*" }, /* In */          { NULL, md_pre_In, md_post_In, NULL, NULL }, /* In */
         { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Li */          { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Li */
         { md_cond_head, md_pre_Nd, NULL, NULL, NULL }, /* Nd */          { md_cond_head, md_pre_Nd, NULL, NULL, NULL }, /* Nd */
         { NULL, md_pre_Nm, md_post_Nm, "**", "**" }, /* Nm */          { NULL, md_pre_Nm, md_post_Nm, "**", "**" }, /* Nm */
Line 235  static int  outflags;
Line 237  static int  outflags;
 #define MD_sp            (1 << 5)  /* Insert a paragraph break. */  #define MD_sp            (1 << 5)  /* Insert a paragraph break. */
 #define MD_Sm            (1 << 6)  /* Horizontal spacing mode. */  #define MD_Sm            (1 << 6)  /* Horizontal spacing mode. */
 #define MD_Bk            (1 << 7)  /* Word keep mode. */  #define MD_Bk            (1 << 7)  /* Word keep mode. */
   #define MD_An_split      (1 << 8)  /* Author mode is "split". */
   #define MD_An_nosplit    (1 << 9)  /* Author mode is "nosplit". */
   
 static  int      escflags; /* Escape in generated markdown code: */  static  int      escflags; /* Escape in generated markdown code: */
 #define ESC_BOL  (1 << 0)  /* "#*+-" near the beginning of a line. */  #define ESC_BOL  (1 << 0)  /* "#*+-" near the beginning of a line. */
Line 243  static int  escflags; /* Escape in generated markdown 
Line 247  static int  escflags; /* Escape in generated markdown 
 #define ESC_PAR  (1 << 3)  /* ")" when "(" is open. */  #define ESC_PAR  (1 << 3)  /* ")" when "(" is open. */
 #define ESC_SQU  (1 << 4)  /* "]" when "[" is open. */  #define ESC_SQU  (1 << 4)  /* "]" when "[" is open. */
 #define ESC_FON  (1 << 5)  /* "*" immediately after unrelated "*". */  #define ESC_FON  (1 << 5)  /* "*" immediately after unrelated "*". */
   #define ESC_EOL  (1 << 6)  /* " " at the and of a line. */
   
 static  int      code_blocks, quote_blocks, list_blocks;  static  int      code_blocks, quote_blocks, list_blocks;
 static  int      outcount;  static  int      outcount;
Line 376  md_preword(void)
Line 381  md_preword(void)
          * they terminate the list.  Work around this markdown issue           * they terminate the list.  Work around this markdown issue
          * by using mere line breaks instead.           * by using mere line breaks instead.
          */           */
   
         if (list_blocks && outflags & MD_sp) {          if (list_blocks && outflags & MD_sp) {
                 outflags &= ~MD_sp;                  outflags &= ~MD_sp;
                 outflags |= MD_br;                  outflags |= MD_br;
         }          }
   
         /* End the old line if requested. */          /*
            * End the old line if requested.
            * Escape whitespace at the end of the markdown line
            * such that it won't look like an output line break.
            */
   
         if (outflags & MD_sp)          if (outflags & MD_sp)
                 putchar('\n');                  putchar('\n');
         else if (outflags & MD_br) {          else if (outflags & MD_br) {
                 putchar(' ');                  putchar(' ');
                 putchar(' ');                  putchar(' ');
 #ifdef DEBUG          } else if (outflags & MD_nl && escflags & ESC_EOL)
                 putchar(':');                  md_named("zwnj");
                 putchar(':');  
                 putchar(' ');  
                 putchar(' ');  
 #endif  
         }  
   
         /* Start a new line if necessary. */          /* Start a new line if necessary. */
   
Line 433  md_rawword(const char *s)
Line 438  md_rawword(const char *s)
 {  {
         md_preword();          md_preword();
   
         if (*s == 0)          if (*s == '\0')
                 return;                  return;
   
         if (escflags & ESC_FON) {          if (escflags & ESC_FON) {
Line 466  md_rawword(const char *s)
Line 471  md_rawword(const char *s)
                 }                  }
                 md_char(*s++);                  md_char(*s++);
         }          }
           if (s[-1] == ' ')
                   escflags |= ESC_EOL;
           else
                   escflags &= ~ESC_EOL;
 }  }
   
 /*  /*
Line 486  md_word(const char *s)
Line 495  md_word(const char *s)
   
         md_preword();          md_preword();
   
           if (*s == '\0')
                   return;
   
         /* No spacing after opening delimiters. */          /* No spacing after opening delimiters. */
         if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')          if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
Line 626  md_word(const char *s)
Line 638  md_word(const char *s)
         if (*currfont != '\0') {          if (*currfont != '\0') {
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 md_rawword(currfont);                  md_rawword(currfont);
         }          } else if (s[-2] == ' ')
                   escflags |= ESC_EOL;
           else
                   escflags &= ~ESC_EOL;
 }  }
   
 /*  /*
Line 636  static void
Line 651  static void
 md_named(const char *s)  md_named(const char *s)
 {  {
         printf("&%s;", s);          printf("&%s;", s);
         escflags &= ~ESC_FON;          escflags &= ~(ESC_FON | ESC_EOL);
         outcount++;          outcount++;
 }  }
   
Line 782  md_pre_syn(struct roff_node *n)
Line 797  md_pre_syn(struct roff_node *n)
 }  }
   
 static int  static int
   md_pre_An(struct roff_node *n)
   {
           switch (n->norm->An.auth) {
           case AUTH_split:
                   outflags &= ~MD_An_nosplit;
                   outflags |= MD_An_split;
                   return 0;
           case AUTH_nosplit:
                   outflags &= ~MD_An_split;
                   outflags |= MD_An_nosplit;
                   return 0;
           default:
                   if (outflags & MD_An_split)
                           outflags |= MD_br;
                   else if (n->sec == SEC_AUTHORS &&
                       ! (outflags & MD_An_nosplit))
                           outflags |= MD_An_split;
                   return 1;
           }
   }
   
   static int
 md_pre_Ap(struct roff_node *n)  md_pre_Ap(struct roff_node *n)
 {  {
         outflags &= ~MD_spc;          outflags &= ~MD_spc;
Line 931  md_pre_Eo(struct roff_node *n)
Line 968  md_pre_Eo(struct roff_node *n)
 static void  static void
 md_post_Eo(struct roff_node *n)  md_post_Eo(struct roff_node *n)
 {  {
         int      body, tail;  
   
         if (n->end != ENDBODY_NOT) {          if (n->end != ENDBODY_NOT) {
                 outflags |= MD_spc;                  outflags |= MD_spc;
                 return;                  return;
         }          }
   
         body = n->child != NULL || n->parent->head->child != NULL;          if (n->child == NULL && n->parent->head->child == NULL)
         tail = n->parent->tail != NULL && n->parent->tail->child != NULL;                  return;
   
         if (body && tail)          if (n->parent->tail != NULL && n->parent->tail->child != NULL)
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
         else if ( ! (body || tail))          else
                 md_preword();  
         else if ( ! tail)  
                 outflags |= MD_spc;                  outflags |= MD_spc;
 }  }
   
Line 993  md_post_Fd(struct roff_node *n)
Line 1026  md_post_Fd(struct roff_node *n)
         outflags |= MD_br;          outflags |= MD_br;
 }  }
   
   static void
   md_post_Fl(struct roff_node *n)
   {
           md_post_raw(n);
           if (n->child == NULL && n->next != NULL &&
               n->next->type != ROFFT_TEXT && !(n->next->flags & NODE_LINE))
                   outflags &= ~MD_spc;
   }
   
 static int  static int
 md_pre_Fn(struct roff_node *n)  md_pre_Fn(struct roff_node *n)
 {  {
Line 1067  md_pre_In(struct roff_node *n)
Line 1109  md_pre_In(struct roff_node *n)
 {  {
         if (n->flags & NODE_SYNPRETTY) {          if (n->flags & NODE_SYNPRETTY) {
                 md_pre_syn(n);                  md_pre_syn(n);
                 md_pre_raw(n);                  md_rawword("**");
                 md_rawword("*");  
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 md_word("#include <");                  md_word("#include <");
                 outflags &= ~MD_spc;  
         } else {          } else {
                 md_word("<");                  md_word("<");
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 md_pre_raw(n);                  md_rawword("*");
         }          }
           outflags &= ~MD_spc;
         return 1;          return 1;
 }  }
   
Line 1085  md_post_In(struct roff_node *n)
Line 1126  md_post_In(struct roff_node *n)
 {  {
         if (n->flags & NODE_SYNPRETTY) {          if (n->flags & NODE_SYNPRETTY) {
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 md_rawword(">*");                  md_rawword(">**");
                 md_post_raw(n);  
                 outflags |= MD_nl;                  outflags |= MD_nl;
         } else {          } else {
                 md_post_raw(n);  
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
                 md_rawword(">");                  md_rawword("*>");
         }          }
 }  }
   
Line 1350  static int
Line 1389  static int
 md_pre_Sh(struct roff_node *n)  md_pre_Sh(struct roff_node *n)
 {  {
         switch (n->type) {          switch (n->type) {
           case ROFFT_BLOCK:
                   if (n->sec == SEC_AUTHORS)
                           outflags &= ~(MD_An_split | MD_An_nosplit);
                   break;
         case ROFFT_HEAD:          case ROFFT_HEAD:
                 outflags |= MD_sp;                  outflags |= MD_sp;
                 md_rawword(n->tok == MDOC_Sh ? "#" : "##");                  md_rawword(n->tok == MDOC_Sh ? "#" : "##");

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.8

CVSweb