[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.18 and 1.25

version 1.18, 2017/05/04 17:48:29 version 1.25, 2018/08/16 13:54:06
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 19 
Line 19 
 #include <assert.h>  #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  
 #include <string.h>  #include <string.h>
   
 #include "mandoc_aux.h"  #include "mandoc_aux.h"
Line 223  static const struct md_act __md_acts[MDOC_MAX - MDOC_D
Line 222  static const struct md_act __md_acts[MDOC_MAX - MDOC_D
         { md_cond_body, md_pre_En, md_post_En, NULL, NULL }, /* En */          { md_cond_body, md_pre_En, md_post_En, NULL, NULL }, /* En */
         { NULL, NULL, NULL, NULL, NULL }, /* Dx */          { NULL, NULL, NULL, NULL, NULL }, /* Dx */
         { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */          { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */
         { NULL, md_pre_Pp, NULL, NULL, NULL }, /* sp */  
         { 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, NULL, NULL, NULL, NULL }, /* ll */  
 };  };
 static  const struct md_act *const md_acts = __md_acts - MDOC_Dd;  static  const struct md_act *const md_acts = __md_acts - MDOC_Dd;
   
Line 297  md_node(struct roff_node *n)
Line 294  md_node(struct roff_node *n)
         const struct md_act     *act;          const struct md_act     *act;
         int                      cond, process_children;          int                      cond, process_children;
   
         if (n->flags & NODE_NOPRT)          if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
                 return;                  return;
   
         if (outflags & MD_nonl)          if (outflags & MD_nonl)
Line 323  md_node(struct roff_node *n)
Line 320  md_node(struct roff_node *n)
         } else if (n->tok < ROFF_MAX) {          } else if (n->tok < ROFF_MAX) {
                 switch (n->tok) {                  switch (n->tok) {
                 case ROFF_br:                  case ROFF_br:
                         md_pre_br(n);                          process_children = md_pre_br(n);
                         break;                          break;
                   case ROFF_sp:
                           process_children = md_pre_Pp(n);
                           break;
                 default:                  default:
                         abort();                          process_children = 0;
                           break;
                 }                  }
         } else {          } else {
                 assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);                  assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
Line 492  md_word(const char *s)
Line 493  md_word(const char *s)
 {  {
         const char      *seq, *prevfont, *currfont, *nextfont;          const char      *seq, *prevfont, *currfont, *nextfont;
         char             c;          char             c;
         int              bs, sz, uc;          int              bs, sz, uc, breakline;
   
         /* No spacing before closing delimiters. */          /* No spacing before closing delimiters. */
         if (s[0] != '\0' && s[1] == '\0' &&          if (s[0] != '\0' && s[1] == '\0' &&
Line 509  md_word(const char *s)
Line 510  md_word(const char *s)
         if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')          if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
   
           breakline = 0;
         prevfont = currfont = "";          prevfont = currfont = "";
         while ((c = *s++) != '\0') {          while ((c = *s++) != '\0') {
                 bs = 0;                  bs = 0;
Line 578  md_word(const char *s)
Line 580  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 594  md_word(const char *s)
Line 599  md_word(const char *s)
                         case ESCAPE_FONTPREV:                          case ESCAPE_FONTPREV:
                                 nextfont = prevfont;                                  nextfont = prevfont;
                                 break;                                  break;
                           case ESCAPE_BREAK:
                                   breakline = 1;
                                   break;
                         case ESCAPE_NOSPACE:                          case ESCAPE_NOSPACE:
                         case ESCAPE_SKIPCHAR:                          case ESCAPE_SKIPCHAR:
                         case ESCAPE_OVERSTRIKE:                          case ESCAPE_OVERSTRIKE:
Line 641  md_word(const char *s)
Line 649  md_word(const char *s)
                 if (bs)                  if (bs)
                         putchar('\\');                          putchar('\\');
                 md_char(c);                  md_char(c);
                   if (breakline &&
                       (*s == '\0' || *s == ' ' || *s == ASCII_NBRSP)) {
                           printf("  \n");
                           breakline = 0;
                           while (*s == ' ' || *s == ASCII_NBRSP)
                                   s++;
                   }
         }          }
         if (*currfont != '\0') {          if (*currfont != '\0') {
                 outflags &= ~MD_spc;                  outflags &= ~MD_spc;
Line 1305  md_uri(const char *s)
Line 1320  md_uri(const char *s)
 static int  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, *punct;
   
         if ((link = n->child) == NULL)          if ((link = n->child) == NULL)
                 return 0;                  return 0;
   
           /* Find beginning of trailing punctuation. */
           punct = n->last;
           while (punct != link && punct->flags & NODE_DELIMC)
                   punct = punct->prev;
           punct = punct->next;
   
         /* Link text. */          /* Link text. */
         descr = link->next;          descr = link->next;
         if (descr == NULL || descr->flags & NODE_DELIMC)          if (descr == punct)
                 descr = link;  /* no text */                  descr = link;  /* no text */
         md_rawword("[");          md_rawword("[");
         outflags &= ~MD_spc;          outflags &= ~MD_spc;
         do {          do {
                 md_word(descr->string);                  md_word(descr->string);
                 descr = descr->next;                  descr = descr->next;
         } while (descr != NULL && !(descr->flags & NODE_DELIMC));          } while (descr != punct);
         outflags &= ~MD_spc;          outflags &= ~MD_spc;
   
         /* Link target. */          /* Link target. */
Line 1329  md_pre_Lk(struct roff_node *n)
Line 1350  md_pre_Lk(struct roff_node *n)
         md_rawword(")");          md_rawword(")");
   
         /* Trailing punctuation. */          /* Trailing punctuation. */
         while (descr != NULL) {          while (punct != NULL) {
                 md_word(descr->string);                  md_word(punct->string);
                 descr = descr->next;                  punct = punct->next;
         }          }
         return 0;          return 0;
 }  }

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.25

CVSweb