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

Diff for /mandoc/mdoc_html.c between version 1.258 and 1.272

version 1.258, 2017/01/20 23:51:00 version 1.272, 2017/02/22 08:54:41
Line 110  static int    mdoc_skip_pre(MDOC_ARGS);
Line 110  static int    mdoc_skip_pre(MDOC_ARGS);
 static  int               mdoc_sm_pre(MDOC_ARGS);  static  int               mdoc_sm_pre(MDOC_ARGS);
 static  int               mdoc_sp_pre(MDOC_ARGS);  static  int               mdoc_sp_pre(MDOC_ARGS);
 static  int               mdoc_ss_pre(MDOC_ARGS);  static  int               mdoc_ss_pre(MDOC_ARGS);
   static  int               mdoc_st_pre(MDOC_ARGS);
 static  int               mdoc_sx_pre(MDOC_ARGS);  static  int               mdoc_sx_pre(MDOC_ARGS);
 static  int               mdoc_sy_pre(MDOC_ARGS);  static  int               mdoc_sy_pre(MDOC_ARGS);
 static  int               mdoc_va_pre(MDOC_ARGS);  static  int               mdoc_va_pre(MDOC_ARGS);
Line 155  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 156  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {mdoc_ft_pre, NULL}, /* Ot */          {mdoc_ft_pre, NULL}, /* Ot */
         {mdoc_pa_pre, NULL}, /* Pa */          {mdoc_pa_pre, NULL}, /* Pa */
         {mdoc_ex_pre, NULL}, /* Rv */          {mdoc_ex_pre, NULL}, /* Rv */
         {NULL, NULL}, /* St */          {mdoc_st_pre, NULL}, /* St */
         {mdoc_va_pre, NULL}, /* Va */          {mdoc_va_pre, NULL}, /* Va */
         {mdoc_vt_pre, NULL}, /* Vt */          {mdoc_vt_pre, NULL}, /* Vt */
         {mdoc_xr_pre, NULL}, /* Xr */          {mdoc_xr_pre, NULL}, /* Xr */
Line 173  static const struct htmlmdoc mdocs[MDOC_MAX] = {
Line 174  static const struct htmlmdoc mdocs[MDOC_MAX] = {
         {NULL, NULL}, /* Ac */          {NULL, NULL}, /* Ac */
         {mdoc_quote_pre, mdoc_quote_post}, /* Ao */          {mdoc_quote_pre, mdoc_quote_post}, /* Ao */
         {mdoc_quote_pre, mdoc_quote_post}, /* Aq */          {mdoc_quote_pre, mdoc_quote_post}, /* Aq */
         {NULL, NULL}, /* At */          {mdoc_xx_pre, NULL}, /* At */
         {NULL, NULL}, /* Bc */          {NULL, NULL}, /* Bc */
         {mdoc_bf_pre, NULL}, /* Bf */          {mdoc_bf_pre, NULL}, /* Bf */
         {mdoc_quote_pre, mdoc_quote_post}, /* Bo */          {mdoc_quote_pre, mdoc_quote_post}, /* Bo */
Line 349  print_mdoc_node(MDOC_ARGS)
Line 350  print_mdoc_node(MDOC_ARGS)
                 return;                  return;
   
         child = 1;          child = 1;
         t = h->tags.head;          t = h->tag;
         n->flags &= ~NODE_ENDED;          n->flags &= ~NODE_ENDED;
   
         switch (n->type) {          switch (n->type) {
Line 389  print_mdoc_node(MDOC_ARGS)
Line 390  print_mdoc_node(MDOC_ARGS)
                  */                   */
                 if (h->tblt != NULL) {                  if (h->tblt != NULL) {
                         print_tblclose(h);                          print_tblclose(h);
                         t = h->tags.head;                          t = h->tag;
                 }                  }
                 assert(h->tblt == NULL);                  assert(h->tblt == NULL);
                 if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child))                  if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child))
Line 416  print_mdoc_node(MDOC_ARGS)
Line 417  print_mdoc_node(MDOC_ARGS)
                 (*mdocs[n->tok].post)(meta, n, h);                  (*mdocs[n->tok].post)(meta, n, h);
                 if (n->end != ENDBODY_NOT)                  if (n->end != ENDBODY_NOT)
                         n->body->flags |= NODE_ENDED;                          n->body->flags |= NODE_ENDED;
                 if (n->end == ENDBODY_NOSPACE)  
                         h->flags |= HTML_NOSPACE;  
                 break;                  break;
         }          }
 }  }
Line 428  mdoc_root_post(MDOC_ARGS)
Line 427  mdoc_root_post(MDOC_ARGS)
         struct tag      *t, *tt;          struct tag      *t, *tt;
   
         t = print_otag(h, TAG_TABLE, "c", "foot");          t = print_otag(h, TAG_TABLE, "c", "foot");
         print_otag(h, TAG_TBODY, "");  
         tt = print_otag(h, TAG_TR, "");          tt = print_otag(h, TAG_TR, "");
   
         print_otag(h, TAG_TD, "c", "foot-date");          print_otag(h, TAG_TD, "c", "foot-date");
Line 459  mdoc_root_pre(MDOC_ARGS)
Line 457  mdoc_root_pre(MDOC_ARGS)
                     meta->title, meta->msec);                      meta->title, meta->msec);
   
         t = print_otag(h, TAG_TABLE, "c", "head");          t = print_otag(h, TAG_TABLE, "c", "head");
         print_otag(h, TAG_TBODY, "");  
         tt = print_otag(h, TAG_TR, "");          tt = print_otag(h, TAG_TR, "");
   
         print_otag(h, TAG_TD, "c", "head-ltitle");          print_otag(h, TAG_TD, "c", "head-ltitle");
Line 507  mdoc_sh_pre(MDOC_ARGS)
Line 504  mdoc_sh_pre(MDOC_ARGS)
         char    *id;          char    *id;
   
         switch (n->type) {          switch (n->type) {
         case ROFFT_BLOCK:          case ROFFT_HEAD:
                 return 1;                  id = make_id(n);
                   print_otag(h, TAG_H1, "ci", "Sh", id);
                   free(id);
                   break;
         case ROFFT_BODY:          case ROFFT_BODY:
                 if (n->sec == SEC_AUTHORS)                  if (n->sec == SEC_AUTHORS)
                         h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);                          h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);
                 return 1;                  break;
         default:          default:
                 break;                  break;
         }          }
   
         if ((id = make_id(n)) != NULL) {  
                 print_otag(h, TAG_H1, "ci", "Sh", id);  
                 free(id);  
         } else  
                 print_otag(h, TAG_H1, "c", "Sh");  
   
         return 1;          return 1;
 }  }
   
Line 534  mdoc_ss_pre(MDOC_ARGS)
Line 527  mdoc_ss_pre(MDOC_ARGS)
         if (n->type != ROFFT_HEAD)          if (n->type != ROFFT_HEAD)
                 return 1;                  return 1;
   
         if ((id = make_id(n)) != NULL) {          id = make_id(n);
                 print_otag(h, TAG_H2, "ci", "Ss", id);          print_otag(h, TAG_H2, "ci", "Ss", id);
                 free(id);          free(id);
         } else  
                 print_otag(h, TAG_H2, "c", "Ss");  
   
         return 1;          return 1;
 }  }
   
Line 574  mdoc_nd_pre(MDOC_ARGS)
Line 564  mdoc_nd_pre(MDOC_ARGS)
         /* XXX: this tag in theory can contain block elements. */          /* XXX: this tag in theory can contain block elements. */
   
         print_text(h, "\\(em");          print_text(h, "\\(em");
         print_otag(h, TAG_SPAN, "c", "desc");          print_otag(h, TAG_SPAN, "c", "Nd");
         return 1;          return 1;
 }  }
   
 static int  static int
 mdoc_nm_pre(MDOC_ARGS)  mdoc_nm_pre(MDOC_ARGS)
 {  {
           struct tag      *t;
         int              len;          int              len;
   
         switch (n->type) {          switch (n->type) {
Line 589  mdoc_nm_pre(MDOC_ARGS)
Line 580  mdoc_nm_pre(MDOC_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case ROFFT_ELEM:          case ROFFT_ELEM:
                 print_otag(h, TAG_B, "c", "Nm");                  print_otag(h, TAG_B, "c", "Nm");
                 if (n->child == NULL && meta->name != NULL)  
                         print_text(h, meta->name);  
                 return 1;                  return 1;
         case ROFFT_BODY:          case ROFFT_BODY:
                 print_otag(h, TAG_TD, "");                  print_otag(h, TAG_TD, "");
Line 609  mdoc_nm_pre(MDOC_ARGS)
Line 598  mdoc_nm_pre(MDOC_ARGS)
         if (len == 0 && meta->name != NULL)          if (len == 0 && meta->name != NULL)
                 len = html_strlen(meta->name);                  len = html_strlen(meta->name);
   
           t = print_otag(h, TAG_COLGROUP, "");
         print_otag(h, TAG_COL, "shw", len);          print_otag(h, TAG_COL, "shw", len);
         print_otag(h, TAG_COL, "");          print_otag(h, TAG_COL, "");
         print_otag(h, TAG_TBODY, "");          print_tagq(h, t);
         print_otag(h, TAG_TR, "");          print_otag(h, TAG_TR, "");
         return 1;          return 1;
 }  }
Line 656  mdoc_ns_pre(MDOC_ARGS)
Line 646  mdoc_ns_pre(MDOC_ARGS)
 static int  static int
 mdoc_ar_pre(MDOC_ARGS)  mdoc_ar_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_I, "c", "Ar");          print_otag(h, TAG_VAR, "c", "Ar");
         return 1;          return 1;
 }  }
   
 static int  static int
 mdoc_xx_pre(MDOC_ARGS)  mdoc_xx_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_SPAN, "c", "unix");          print_otag(h, TAG_SPAN, "c", "Ux");
         return 1;          return 1;
 }  }
   
Line 671  static int
Line 661  static int
 mdoc_it_pre(MDOC_ARGS)  mdoc_it_pre(MDOC_ARGS)
 {  {
         const struct roff_node  *bl;          const struct roff_node  *bl;
           struct tag              *t;
         const char              *cattr;          const char              *cattr;
         enum mdoc_list           type;          enum mdoc_list           type;
   
Line 725  mdoc_it_pre(MDOC_ARGS)
Line 716  mdoc_it_pre(MDOC_ARGS)
                 case ROFFT_HEAD:                  case ROFFT_HEAD:
                         return 0;                          return 0;
                 case ROFFT_BODY:                  case ROFFT_BODY:
                         print_otag(h, TAG_LI, "csvt", cattr,                          if (bl->norm->Bl.comp)
                             !bl->norm->Bl.comp);                                  print_otag(h, TAG_LI, "csvt", cattr, 0);
                           else
                                   print_otag(h, TAG_LI, "c", cattr);
                         break;                          break;
                 default:                  default:
                         break;                          break;
Line 736  mdoc_it_pre(MDOC_ARGS)
Line 729  mdoc_it_pre(MDOC_ARGS)
         case LIST_hang:          case LIST_hang:
         case LIST_inset:          case LIST_inset:
         case LIST_ohang:          case LIST_ohang:
         case LIST_tag:  
                 switch (n->type) {                  switch (n->type) {
                 case ROFFT_HEAD:                  case ROFFT_HEAD:
                         print_otag(h, TAG_DT, "csvt", cattr,                          if (bl->norm->Bl.comp)
                             !bl->norm->Bl.comp);                                  print_otag(h, TAG_DT, "csvt", cattr, 0);
                           else
                                   print_otag(h, TAG_DT, "c", cattr);
                         if (type == LIST_diag)                          if (type == LIST_diag)
                                 print_otag(h, TAG_B, "c", cattr);                                  print_otag(h, TAG_B, "c", cattr);
                         break;                          break;
                 case ROFFT_BODY:                  case ROFFT_BODY:
                         if (bl->norm->Bl.width == NULL)                          print_otag(h, TAG_DD, "cswl", cattr,
                               bl->norm->Bl.width);
                           break;
                   default:
                           break;
                   }
                   break;
           case LIST_tag:
                   switch (n->type) {
                   case ROFFT_HEAD:
                           if (h->style != NULL && !bl->norm->Bl.comp &&
                               (n->parent->prev == NULL ||
                                n->parent->prev->body == NULL ||
                                n->parent->prev->body->child != NULL)) {
                                   t = print_otag(h, TAG_DT, "csWl",
                                       cattr, bl->norm->Bl.width);
                                   print_text(h, "\\ ");
                                   print_tagq(h, t);
                                   t = print_otag(h, TAG_DD, "c", cattr);
                                   print_text(h, "\\ ");
                                   print_tagq(h, t);
                           }
                           print_otag(h, TAG_DT, "csWl", cattr,
                               bl->norm->Bl.width);
                           break;
                   case ROFFT_BODY:
                           if (n->child == NULL) {
                                   print_otag(h, TAG_DD, "css?", cattr,
                                       "width", "auto");
                                   print_text(h, "\\ ");
                           } else
                                 print_otag(h, TAG_DD, "c", cattr);                                  print_otag(h, TAG_DD, "c", cattr);
                         else  
                                 print_otag(h, TAG_DD, "cswl", cattr,  
                                     bl->norm->Bl.width);  
                         break;                          break;
                 default:                  default:
                         break;                          break;
Line 760  mdoc_it_pre(MDOC_ARGS)
Line 781  mdoc_it_pre(MDOC_ARGS)
                 case ROFFT_HEAD:                  case ROFFT_HEAD:
                         break;                          break;
                 case ROFFT_BODY:                  case ROFFT_BODY:
                         print_otag(h, TAG_TD, "csvt", cattr,                          if (bl->norm->Bl.comp)
                             !bl->norm->Bl.comp);                                  print_otag(h, TAG_TD, "csvt", cattr, 0);
                           else
                                   print_otag(h, TAG_TD, "c", cattr);
                         break;                          break;
                 default:                  default:
                         print_otag(h, TAG_TR, "c", cattr);                          print_otag(h, TAG_TR, "c", cattr);
Line 776  mdoc_it_pre(MDOC_ARGS)
Line 799  mdoc_it_pre(MDOC_ARGS)
 static int  static int
 mdoc_bl_pre(MDOC_ARGS)  mdoc_bl_pre(MDOC_ARGS)
 {  {
           struct tag      *t;
           struct mdoc_bl  *bl;
         const char      *cattr;          const char      *cattr;
         int              i;          size_t           i;
         enum htmltag     elemtype;          enum htmltag     elemtype;
   
         if (n->type == ROFFT_BODY) {          bl = &n->norm->Bl;
                 if (LIST_column == n->norm->Bl.type)  
                         print_otag(h, TAG_TBODY, "");          switch (n->type) {
           case ROFFT_BODY:
                 return 1;                  return 1;
         }  
   
         if (n->type == ROFFT_HEAD) {          case ROFFT_HEAD:
                 if (LIST_column != n->norm->Bl.type)                  if (bl->type != LIST_column || bl->ncols == 0)
                         return 0;                          return 0;
   
                 /*                  /*
Line 797  mdoc_bl_pre(MDOC_ARGS)
Line 822  mdoc_bl_pre(MDOC_ARGS)
                  * screen and we want to preserve that behaviour.                   * screen and we want to preserve that behaviour.
                  */                   */
   
                 for (i = 0; i < (int)n->norm->Bl.ncols - 1; i++)                  t = print_otag(h, TAG_COLGROUP, "");
                         print_otag(h, TAG_COL, "sww", n->norm->Bl.cols[i]);                  for (i = 0; i < bl->ncols - 1; i++)
                 print_otag(h, TAG_COL, "swW", n->norm->Bl.cols[i]);                          print_otag(h, TAG_COL, "sww", bl->cols[i]);
                   print_otag(h, TAG_COL, "swW", bl->cols[i]);
                   print_tagq(h, t);
                 return 0;                  return 0;
   
           default:
                   break;
         }          }
   
         switch (n->norm->Bl.type) {          switch (bl->type) {
         case LIST_bullet:          case LIST_bullet:
                 elemtype = TAG_UL;                  elemtype = TAG_UL;
                 cattr = "Bl-bullet";                  cattr = "Bl-bullet";
Line 839  mdoc_bl_pre(MDOC_ARGS)
Line 868  mdoc_bl_pre(MDOC_ARGS)
                 cattr = "Bl-ohang";                  cattr = "Bl-ohang";
                 break;                  break;
         case LIST_tag:          case LIST_tag:
                 elemtype = TAG_DL;  
                 cattr = "Bl-tag";                  cattr = "Bl-tag";
                 break;                  if (bl->offs)
                           print_otag(h, TAG_DIV, "cswl", cattr, bl->offs);
                   print_otag(h, TAG_DL, "cswl", cattr, bl->width);
                   return 1;
         case LIST_column:          case LIST_column:
                 elemtype = TAG_TABLE;                  elemtype = TAG_TABLE;
                 cattr = "Bl-column";                  cattr = "Bl-column";
Line 849  mdoc_bl_pre(MDOC_ARGS)
Line 880  mdoc_bl_pre(MDOC_ARGS)
         default:          default:
                 abort();                  abort();
         }          }
           print_otag(h, elemtype, "cswl", cattr, bl->offs);
         if (n->norm->Bl.offs)  
                 print_otag(h, elemtype, "csvtvbwl", cattr, 0, 0,  
                     n->norm->Bl.offs);  
         else  
                 print_otag(h, elemtype, "csvtvb", cattr, 0, 0);  
   
         return 1;          return 1;
 }  }
   
Line 868  mdoc_ex_pre(MDOC_ARGS)
Line 893  mdoc_ex_pre(MDOC_ARGS)
 }  }
   
 static int  static int
   mdoc_st_pre(MDOC_ARGS)
   {
           print_otag(h, TAG_SPAN, "c", "St");
           return 1;
   }
   
   static int
 mdoc_em_pre(MDOC_ARGS)  mdoc_em_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_SPAN, "c", "emph");          print_otag(h, TAG_I, "c", "Em");
         return 1;          return 1;
 }  }
   
Line 893  mdoc_sx_pre(MDOC_ARGS)
Line 925  mdoc_sx_pre(MDOC_ARGS)
 {  {
         char    *id;          char    *id;
   
         if ((id = make_id(n)) != NULL) {          id = make_id(n);
                 print_otag(h, TAG_A, "chR", "Sx", id);          print_otag(h, TAG_A, "chR", "Sx", id);
                 free(id);          free(id);
         } else  
                 print_otag(h, TAG_A, "c", "Sx");  
   
         return 1;          return 1;
 }  }
   
Line 1064  mdoc_fa_pre(MDOC_ARGS)
Line 1093  mdoc_fa_pre(MDOC_ARGS)
         struct tag              *t;          struct tag              *t;
   
         if (n->parent->tok != MDOC_Fo) {          if (n->parent->tok != MDOC_Fo) {
                 print_otag(h, TAG_I, "c", "Fa");                  print_otag(h, TAG_VAR, "c", "Fa");
                 return 1;                  return 1;
         }          }
   
         for (nn = n->child; nn; nn = nn->next) {          for (nn = n->child; nn; nn = nn->next) {
                 t = print_otag(h, TAG_I, "c", "Fa");                  t = print_otag(h, TAG_VAR, "c", "Fa");
                 print_text(h, nn->string);                  print_text(h, nn->string);
                 print_tagq(h, t);                  print_tagq(h, t);
                 if (nn->next) {                  if (nn->next) {
Line 1148  mdoc_vt_pre(MDOC_ARGS)
Line 1177  mdoc_vt_pre(MDOC_ARGS)
         } else if (n->type == ROFFT_HEAD)          } else if (n->type == ROFFT_HEAD)
                 return 0;                  return 0;
   
         print_otag(h, TAG_I, "c", "Vt");          print_otag(h, TAG_VAR, "c", "Vt");
         return 1;          return 1;
 }  }
   
Line 1156  static int
Line 1185  static int
 mdoc_ft_pre(MDOC_ARGS)  mdoc_ft_pre(MDOC_ARGS)
 {  {
         synopsis_pre(h, n);          synopsis_pre(h, n);
         print_otag(h, TAG_I, "c", "Ft");          print_otag(h, TAG_VAR, "c", "Ft");
         return 1;          return 1;
 }  }
   
Line 1177  mdoc_fn_pre(MDOC_ARGS)
Line 1206  mdoc_fn_pre(MDOC_ARGS)
   
         ep = strchr(sp, ' ');          ep = strchr(sp, ' ');
         if (NULL != ep) {          if (NULL != ep) {
                 t = print_otag(h, TAG_I, "c", "Ft");                  t = print_otag(h, TAG_VAR, "c", "Ft");
   
                 while (ep) {                  while (ep) {
                         sz = MIN((int)(ep - sp), BUFSIZ - 1);                          sz = MIN((int)(ep - sp), BUFSIZ - 1);
Line 1203  mdoc_fn_pre(MDOC_ARGS)
Line 1232  mdoc_fn_pre(MDOC_ARGS)
   
         for (n = n->child->next; n; n = n->next) {          for (n = n->child->next; n; n = n->next) {
                 if (NODE_SYNPRETTY & n->flags)                  if (NODE_SYNPRETTY & n->flags)
                         t = print_otag(h, TAG_I, "css?", "Fa",                          t = print_otag(h, TAG_VAR, "css?", "Fa",
                             "white-space", "nowrap");                              "white-space", "nowrap");
                 else                  else
                         t = print_otag(h, TAG_I, "c", "Fa");                          t = print_otag(h, TAG_VAR, "c", "Fa");
                 print_text(h, n->string);                  print_text(h, n->string);
                 print_tagq(h, t);                  print_tagq(h, t);
                 if (n->next) {                  if (n->next) {
Line 1414  mdoc_ic_pre(MDOC_ARGS)
Line 1443  mdoc_ic_pre(MDOC_ARGS)
 static int  static int
 mdoc_va_pre(MDOC_ARGS)  mdoc_va_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_I, "c", "Va");          print_otag(h, TAG_VAR, "c", "Va");
         return 1;          return 1;
 }  }
   
Line 1439  mdoc_bf_pre(MDOC_ARGS)
Line 1468  mdoc_bf_pre(MDOC_ARGS)
                 return 1;                  return 1;
   
         if (FONT_Em == n->norm->Bf.font)          if (FONT_Em == n->norm->Bf.font)
                 cattr = "emph";                  cattr = "Em";
         else if (FONT_Sy == n->norm->Bf.font)          else if (FONT_Sy == n->norm->Bf.font)
                 cattr = "symb";                  cattr = "Sy";
         else if (FONT_Li == n->norm->Bf.font)          else if (FONT_Li == n->norm->Bf.font)
                 cattr = "Li";                  cattr = "Li";
         else          else
                 cattr = "none";                  cattr = "No";
   
         /*          /*
          * We want this to be inline-formatted, but needs to be div to           * We want this to be inline-formatted, but needs to be div to
Line 1488  mdoc_rs_pre(MDOC_ARGS)
Line 1517  mdoc_rs_pre(MDOC_ARGS)
         if (n->prev && SEC_SEE_ALSO == n->sec)          if (n->prev && SEC_SEE_ALSO == n->sec)
                 print_paragraph(h);                  print_paragraph(h);
   
         print_otag(h, TAG_SPAN, "c", "Rs");          print_otag(h, TAG_CITE, "c", "Rs");
         return 1;          return 1;
 }  }
   
 static int  static int
 mdoc_no_pre(MDOC_ARGS)  mdoc_no_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_SPAN, "c", "none");          print_otag(h, TAG_SPAN, "c", "No");
         return 1;          return 1;
 }  }
   
Line 1509  mdoc_li_pre(MDOC_ARGS)
Line 1538  mdoc_li_pre(MDOC_ARGS)
 static int  static int
 mdoc_sy_pre(MDOC_ARGS)  mdoc_sy_pre(MDOC_ARGS)
 {  {
         print_otag(h, TAG_SPAN, "c", "symb");          print_otag(h, TAG_B, "c", "Sy");
         return 1;          return 1;
 }  }
   

Legend:
Removed from v.1.258  
changed lines
  Added in v.1.272

CVSweb