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

Diff for /mandoc/Attic/terminal.c between version 1.2 and 1.3

version 1.2, 2009/03/19 16:40:49 version 1.3, 2009/03/20 15:14:01
Line 81  terminal_run(void *arg, const struct mdoc *mdoc)
Line 81  terminal_run(void *arg, const struct mdoc *mdoc)
         p = (struct termp *)arg;          p = (struct termp *)arg;
   
         if (NULL == p->symtab)          if (NULL == p->symtab)
                 p->symtab = ascii2htab();                  p->symtab = term_ascii2htab();
   
         termp_head(p, mdoc_meta(mdoc));          termp_head(p, mdoc_meta(mdoc));
         termp_body(p, NULL, mdoc_meta(mdoc), mdoc_node(mdoc));          termp_body(p, NULL, mdoc_meta(mdoc), mdoc_node(mdoc));
Line 106  termp_free(struct termp *p)
Line 106  termp_free(struct termp *p)
         if (p->buf)          if (p->buf)
                 free(p->buf);                  free(p->buf);
         if (TERMENC_ASCII == p->enc && p->symtab)          if (TERMENC_ASCII == p->enc && p->symtab)
                 asciifree(p->symtab);                  term_asciifree(p->symtab);
   
         free(p);          free(p);
 }  }
Line 161  termp_alloc(enum termenc enc)
Line 161  termp_alloc(enum termenc enc)
  *  possible).   *  possible).
  */   */
 void  void
 flushln(struct termp *p)  term_flushln(struct termp *p)
 {  {
         int              i, j;          int              i, j;
         size_t           vsz, vis, maxvis, mmax, bp;          size_t           vsz, vis, maxvis, mmax, bp;
Line 294  flushln(struct termp *p)
Line 294  flushln(struct termp *p)
  * assertion.   * assertion.
  */   */
 void  void
 newln(struct termp *p)  term_newln(struct termp *p)
 {  {
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
Line 302  newln(struct termp *p)
Line 302  newln(struct termp *p)
                 p->flags &= ~TERMP_NOLPAD;                  p->flags &= ~TERMP_NOLPAD;
                 return;                  return;
         }          }
         flushln(p);          term_flushln(p);
         p->flags &= ~TERMP_NOLPAD;          p->flags &= ~TERMP_NOLPAD;
 }  }
   
Line 314  newln(struct termp *p)
Line 314  newln(struct termp *p)
  * assertion.   * assertion.
  */   */
 void  void
 vspace(struct termp *p)  term_vspace(struct termp *p)
 {  {
   
         newln(p);          term_newln(p);
         putchar('\n');          putchar('\n');
 }  }
   
Line 329  vspace(struct termp *p)
Line 329  vspace(struct termp *p)
  * the word and put it verbatim into the output buffer.   * the word and put it verbatim into the output buffer.
  */   */
 void  void
 word(struct termp *p, const char *word)  term_word(struct termp *p, const char *word)
 {  {
         int              i, j, len;          int              i, j, len;
   
           len = (int)strlen(word);
   
         if (p->flags & TERMP_LITERAL) {          if (p->flags & TERMP_LITERAL) {
                 termp_pword(p, word, (int)strlen(word));                  termp_pword(p, word, len);
                 return;                  return;
         }          }
   
         if (0 == (len = (int)strlen(word)))  
                 errx(1, "blank line not in literal context");  
   
         if (mdoc_isdelim(word)) {          if (mdoc_isdelim(word)) {
                 if ( ! (p->flags & TERMP_IGNDELIM))                  if ( ! (p->flags & TERMP_IGNDELIM))
                         p->flags |= TERMP_NOSPACE;                          p->flags |= TERMP_NOSPACE;
Line 373  word(struct termp *p, const char *word)
Line 372  word(struct termp *p, const char *word)
 }  }
   
   
   static void
   termp_body(struct termp *p, struct termpair *ppair,
                   const struct mdoc_meta *meta,
                   const struct mdoc_node *node)
   {
   
           term_node(p, ppair, meta, node);
           if (node->next)
                   termp_body(p, ppair, meta, node->next);
   }
   
   
 /*  /*
  * This is the main function for printing out nodes.  It's constituted   * This is the main function for printing out nodes.  It's constituted
  * of PRE and POST functions, which correspond to prefix and infix   * of PRE and POST functions, which correspond to prefix and infix
  * processing.  The termpair structure allows data to persist between   * processing.  The termpair structure allows data to persist between
  * prefix and postfix invocations.   * prefix and postfix invocations.
  */   */
 static void  void
 termp_body(struct termp *p, struct termpair *ppair,  term_node(struct termp *p, struct termpair *ppair,
                 const struct mdoc_meta *meta,                  const struct mdoc_meta *meta,
                 const struct mdoc_node *node)                  const struct mdoc_node *node)
 {  {
Line 405  termp_body(struct termp *p, struct termpair *ppair,
Line 416  termp_body(struct termp *p, struct termpair *ppair,
                         if ( ! (*termacts[node->tok].pre)(p, &pair, meta, node))                          if ( ! (*termacts[node->tok].pre)(p, &pair, meta, node))
                                 dochild = 0;                                  dochild = 0;
         } else /* MDOC_TEXT == node->type */          } else /* MDOC_TEXT == node->type */
                 word(p, node->string);                  term_word(p, node->string);
   
         /* Children. */          /* Children. */
   
Line 423  termp_body(struct termp *p, struct termpair *ppair,
Line 434  termp_body(struct termp *p, struct termpair *ppair,
         if (MDOC_TEXT != node->type)          if (MDOC_TEXT != node->type)
                 if (termacts[node->tok].post)                  if (termacts[node->tok].post)
                         (*termacts[node->tok].post)(p, &pair, meta, node);                          (*termacts[node->tok].post)(p, &pair, meta, node);
   
         /* Siblings. */  
   
         if (node->next)  
                 termp_body(p, ppair, meta, node->next);  
 }  }
   
   
Line 460  termp_foot(struct termp *p, const struct mdoc_meta *me
Line 466  termp_foot(struct termp *p, const struct mdoc_meta *me
          * OS                                            MDOCDATE           * OS                                            MDOCDATE
          */           */
   
         vspace(p);          term_vspace(p);
   
         p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;          p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
         p->rmargin = p->maxrmargin - strlen(buf);          p->rmargin = p->maxrmargin - strlen(buf);
         p->offset = 0;          p->offset = 0;
   
         word(p, os);          term_word(p, os);
         flushln(p);          term_flushln(p);
   
         p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;          p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
         p->offset = p->rmargin;          p->offset = p->rmargin;
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
         p->flags &= ~TERMP_NOBREAK;          p->flags &= ~TERMP_NOBREAK;
   
         word(p, buf);          term_word(p, buf);
         flushln(p);          term_flushln(p);
   
         free(buf);          free(buf);
         free(os);          free(os);
Line 524  termp_head(struct termp *p, const struct mdoc_meta *me
Line 530  termp_head(struct termp *p, const struct mdoc_meta *me
         p->rmargin = (p->maxrmargin - strlen(buf)) / 2;          p->rmargin = (p->maxrmargin - strlen(buf)) / 2;
         p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;          p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
   
         word(p, title);          term_word(p, title);
         flushln(p);          term_flushln(p);
   
         p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;          p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
         p->offset = p->rmargin;          p->offset = p->rmargin;
         p->rmargin = p->maxrmargin - strlen(title);          p->rmargin = p->maxrmargin - strlen(title);
   
         word(p, buf);          term_word(p, buf);
         flushln(p);          term_flushln(p);
   
         p->offset = p->rmargin;          p->offset = p->rmargin;
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
         p->flags &= ~TERMP_NOBREAK;          p->flags &= ~TERMP_NOBREAK;
         p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;          p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
   
         word(p, title);          term_word(p, title);
         flushln(p);          term_flushln(p);
   
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
         p->offset = 0;          p->offset = 0;
Line 562  termp_nescape(struct termp *p, const char *word, size_
Line 568  termp_nescape(struct termp *p, const char *word, size_
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
   
         if (NULL == (rhs = a2ascii(p->symtab, word, len, &sz)))          if (NULL == (rhs = term_a2ascii(p->symtab, word, len, &sz)))
                 return;                  return;
         termp_stringa(p, rhs, sz);          termp_stringa(p, rhs, sz);
 }  }
Line 637  termp_pword(struct termp *p, const char *word, int len
Line 643  termp_pword(struct termp *p, const char *word, int len
 {  {
         int              i;          int              i;
   
         if ( ! (TERMP_NOSPACE & p->flags) &&          if ( ! (TERMP_NOSPACE & p->flags))
                         ! (TERMP_LITERAL & p->flags))  
                 termp_chara(p, ' ');                  termp_chara(p, ' ');
   
         if ( ! (p->flags & TERMP_NONOSPACE))          if ( ! (p->flags & TERMP_NONOSPACE))

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

CVSweb