[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.1 and 1.5

version 1.1, 2017/03/03 14:23:23 version 1.5, 2017/03/07 13:09:27
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 115  static const struct md_act md_acts[MDOC_MAX + 1] = {
Line 116  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 129  static const struct md_act md_acts[MDOC_MAX + 1] = {
Line 130  static const struct md_act md_acts[MDOC_MAX + 1] = {
         { 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 220  static const struct md_act md_acts[MDOC_MAX + 1] = {
Line 221  static const struct md_act md_acts[MDOC_MAX + 1] = {
         { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */          { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */
         { NULL, md_pre_br, NULL, NULL, NULL }, /* br */          { NULL, md_pre_br, NULL, NULL, NULL }, /* br */
         { NULL, md_pre_Pp, NULL, NULL, NULL }, /* sp */          { NULL, md_pre_Pp, NULL, NULL, NULL }, /* sp */
         { NULL, NULL, 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, NULL, NULL, NULL, NULL }, /* ll */          { NULL, NULL, NULL, NULL, NULL }, /* ll */
         { NULL, NULL, NULL, NULL, NULL }, /* ROOT */          { NULL, NULL, NULL, NULL, NULL }, /* ROOT */
Line 235  static int  outflags;
Line 236  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 782  md_pre_syn(struct roff_node *n)
Line 785  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 1067  md_pre_In(struct roff_node *n)
Line 1092  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 1109  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 1235  static int
Line 1257  static int
 md_pre_Lk(struct roff_node *n)  md_pre_Lk(struct roff_node *n)
 {  {
         const struct roff_node *link, *descr;          const struct roff_node *link, *descr;
           const unsigned char *s;
   
         if ((link = n->child) == NULL)          if ((link = n->child) == NULL)
                 return 0;                  return 0;
Line 1251  md_pre_Lk(struct roff_node *n)
Line 1274  md_pre_Lk(struct roff_node *n)
         } else          } else
                 md_rawword("<");                  md_rawword("<");
   
           for (s = link->string; *s != '\0'; s++) {
                   if (strchr("%)<>", *s) != NULL) {
                           printf("%%%2.2hhX", *s);
                           outcount += 3;
                   } else {
                           putchar(*s);
                           outcount++;
                   }
           }
   
         outflags &= ~MD_spc;          outflags &= ~MD_spc;
         md_word(link->string);  
         outflags &= ~MD_spc;  
         md_rawword(link->next == NULL ? ">" : ")");          md_rawword(link->next == NULL ? ">" : ")");
         return 0;          return 0;
 }  }
Line 1341  static int
Line 1372  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 ? "#" : "##");
Line 1419  md_pre_Xr(struct roff_node *n)
Line 1454  md_pre_Xr(struct roff_node *n)
 static int  static int
 md_pre__T(struct roff_node *n)  md_pre__T(struct roff_node *n)
 {  {
         if (n->parent != NULL && n->parent->tok == MDOC_Rs &&          if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T)
             n->parent->norm->Rs.quote_T)  
                 md_word("\"");                  md_word("\"");
         else          else
                 md_rawword("*");                  md_rawword("*");
Line 1432  static void
Line 1466  static void
 md_post__T(struct roff_node *n)  md_post__T(struct roff_node *n)
 {  {
         outflags &= ~MD_spc;          outflags &= ~MD_spc;
         if (n->parent != NULL && n->parent->tok == MDOC_Rs &&          if (n->parent->tok == MDOC_Rs && n->parent->norm->Rs.quote_T)
             n->parent->norm->Rs.quote_T)  
                 md_word("\"");                  md_word("\"");
         else          else
                 md_rawword("*");                  md_rawword("*");

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

CVSweb