[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.23 and 1.24

version 1.23, 2009/10/07 12:35:24 version 1.24, 2009/10/07 14:39:00
Line 326  static void
Line 326  static void
 a2width(const char *p, struct roffsu *su)  a2width(const char *p, struct roffsu *su)
 {  {
   
         if ( ! a2roffsu(p, su))          if (a2roffsu(p, su))
                 SCALE_HS_INIT(su, (int)strlen(p));                  return;
           su->unit = SCALE_EM;
           su->scale = (int)strlen(p);
 }  }
   
   
Line 346  a2offs(const char *p, struct roffsu *su)
Line 348  a2offs(const char *p, struct roffsu *su)
                 SCALE_HS_INIT(su, INDENT);                  SCALE_HS_INIT(su, INDENT);
         else if (0 == strcmp(p, "indent-two"))          else if (0 == strcmp(p, "indent-two"))
                 SCALE_HS_INIT(su, INDENT * 2);                  SCALE_HS_INIT(su, INDENT * 2);
         else if ( ! a2roffsu(p, su))          else if ( ! a2roffsu(p, su)) {
                 SCALE_HS_INIT(su, (int)strlen(p));                  su->unit = SCALE_EM;
                   su->scale = (int)strlen(p);
           }
 }  }
   
   
Line 673  mdoc_nd_pre(MDOC_ARGS)
Line 677  mdoc_nd_pre(MDOC_ARGS)
         if (MDOC_BODY != n->type)          if (MDOC_BODY != n->type)
                 return(1);                  return(1);
   
         /* XXX - this can contain block elements! */          /* XXX: this tag in theory can contain block elements. */
   
         print_text(h, "\\(em");          print_text(h, "\\(em");
         PAIR_CLASS_INIT(&tag, "desc-body");          PAIR_CLASS_INIT(&tag, "desc-body");
         print_otag(h, TAG_SPAN, 1, &tag);          print_otag(h, TAG_SPAN, 1, &tag);
Line 690  mdoc_op_pre(MDOC_ARGS)
Line 695  mdoc_op_pre(MDOC_ARGS)
         if (MDOC_BODY != n->type)          if (MDOC_BODY != n->type)
                 return(1);                  return(1);
   
         /* XXX - this can contain block elements! */          /* XXX: this tag in theory can contain block elements. */
   
         print_text(h, "\\(lB");          print_text(h, "\\(lB");
         h->flags |= HTML_NOSPACE;          h->flags |= HTML_NOSPACE;
         PAIR_CLASS_INIT(&tag, "opt");          PAIR_CLASS_INIT(&tag, "opt");
Line 859  mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *
Line 865  mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *
         nn = n->parent->parent;          nn = n->parent->parent;
         assert(nn->args);          assert(nn->args);
   
         if (MDOC_Column == type)          /* XXX: see notes in mdoc_it_pre(). */
                 comp = 0;  
           if (MDOC_Column == type) {
                   /* Don't width-pad on the left. */
                   SCALE_HS_INIT(width, 0);
                   /* Also disallow non-compact. */
                   comp = 1;
           }
         if (MDOC_Diag == type)          if (MDOC_Diag == type)
                   /* Mandate non-compact with empty prior. */
                 if (n->prev && NULL == n->prev->body->child)                  if (n->prev && NULL == n->prev->body->child)
                         comp = 1;                          comp = 1;
   
           bufcat_style(h, "clear", "both");
         if (offs->scale > 0)          if (offs->scale > 0)
                 bufcat_su(h, "margin-left", offs);                  bufcat_su(h, "margin-left", offs);
         if (width->scale > 0)          if (width->scale > 0)
Line 872  mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *
Line 886  mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *
   
         PAIR_STYLE_INIT(&tag, h);          PAIR_STYLE_INIT(&tag, h);
   
           /* Mandate compact following `Ss' and `Sh' starts. */
   
         for (nn = n; nn && ! comp; nn = nn->parent) {          for (nn = n; nn && ! comp; nn = nn->parent) {
                 if (MDOC_BLOCK != nn->type)                  if (MDOC_BLOCK != nn->type)
                         continue;                          continue;
Line 906  mdoc_it_body_pre(MDOC_ARGS, int type)
Line 922  mdoc_it_body_pre(MDOC_ARGS, int type)
         case (MDOC_Column):          case (MDOC_Column):
                 break;                  break;
         default:          default:
                   /*
                    * XXX: this tricks CSS into aligning the bodies with
                    * the right-padding in the head.
                    */
                 SCALE_HS_INIT(&su, 2);                  SCALE_HS_INIT(&su, 2);
                 bufcat_su(h, "margin-left", &su);                  bufcat_su(h, "margin-left", &su);
                 PAIR_STYLE_INIT(&tag, h);                  PAIR_STYLE_INIT(&tag, h);
Line 944  mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *w
Line 964  mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *w
                 bufcat_su(h, "margin-left", width);                  bufcat_su(h, "margin-left", width);
                 if (n->next && n->next->child)                  if (n->next && n->next->child)
                         bufcat_style(h, "float", "left");                          bufcat_style(h, "float", "left");
   
                   /* XXX: buffer if we run into body. */
                 SCALE_HS_INIT(width, 1);                  SCALE_HS_INIT(width, 1);
                 bufcat_su(h, "margin-right", width);                  bufcat_su(h, "margin-right", width);
                 PAIR_STYLE_INIT(&tag, h);                  PAIR_STYLE_INIT(&tag, h);
Line 987  mdoc_it_pre(MDOC_ARGS)
Line 1009  mdoc_it_pre(MDOC_ARGS)
         const struct mdoc_node  *bl, *nn;          const struct mdoc_node  *bl, *nn;
         struct roffsu            width, offs;          struct roffsu            width, offs;
   
         /* This is the `Bl' block parent. */          /*
            * XXX: be very careful in changing anything, here.  Lists in
            * mandoc have many peculiarities; furthermore, they don't
            * translate well into HTML and require a bit of mangling.
            */
   
         bl = n->parent->parent;          bl = n->parent->parent;
         if (MDOC_BLOCK != n->type)          if (MDOC_BLOCK != n->type)
Line 997  mdoc_it_pre(MDOC_ARGS)
Line 1023  mdoc_it_pre(MDOC_ARGS)
   
         /* Set default width and offset. */          /* Set default width and offset. */
   
           SCALE_HS_INIT(&offs, 0);
   
         switch (type) {          switch (type) {
         case (MDOC_Enum):          case (MDOC_Enum):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 1012  mdoc_it_pre(MDOC_ARGS)
Line 1040  mdoc_it_pre(MDOC_ARGS)
                 break;                  break;
         }          }
   
         SCALE_HS_INIT(&offs, 0);  
   
         /* Get width, offset, and compact arguments. */          /* Get width, offset, and compact arguments. */
   
         for (wp = -1, comp = i = 0; i < (int)bl->args->argc; i++)          for (wp = -1, comp = i = 0; i < (int)bl->args->argc; i++)
                 switch (bl->args->argv[i].arg) {                  switch (bl->args->argv[i].arg) {
                   case (MDOC_Column):
                           wp = i; /* Save for later. */
                           break;
                 case (MDOC_Width):                  case (MDOC_Width):
                         wp = i; /* Save offset. */  
                         a2width(bl->args->argv[i].value[0], &width);                          a2width(bl->args->argv[i].value[0], &width);
                         break;                          break;
                 case (MDOC_Offset):                  case (MDOC_Offset):
Line 1060  mdoc_it_pre(MDOC_ARGS)
Line 1088  mdoc_it_pre(MDOC_ARGS)
                 nn = n->parent->child;                  nn = n->parent->child;
                 for (i = 0; nn && nn != n; nn = nn->next, i++)                  for (i = 0; nn && nn != n; nn = nn->next, i++)
                         /* Counter... */ ;                          /* Counter... */ ;
                 if (wp >= 0 && i < (int)bl->args[wp].argv->sz)                  if (i < (int)bl->args->argv[wp].sz)
                         a2width(bl->args->argv[wp].value[i], &width);                          a2width(bl->args->argv[wp].value[i], &width);
         }          }
   
Line 1315  mdoc_bd_pre(MDOC_ARGS)
Line 1343  mdoc_bd_pre(MDOC_ARGS)
         else          else
                 bl = n->parent;                  bl = n->parent;
   
           SCALE_VS_INIT(&su, 0);
   
         type = comp = 0;          type = comp = 0;
         for (i = 0; i < (int)bl->args->argc; i++)          for (i = 0; i < (int)bl->args->argc; i++)
                 switch (bl->args->argv[i].arg) {                  switch (bl->args->argv[i].arg) {
                 case (MDOC_Offset):                  case (MDOC_Offset):
                         a2offs(bl->args->argv[i].value[0], &su);                          a2offs(bl->args->argv[i].value[0], &su);
                         bufcat_su(h, "margin-left", &su);  
                         break;                          break;
                 case (MDOC_Compact):                  case (MDOC_Compact):
                         comp = 1;                          comp = 1;
Line 1337  mdoc_bd_pre(MDOC_ARGS)
Line 1366  mdoc_bd_pre(MDOC_ARGS)
                 }                  }
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BLOCK == n->type) {
                   bufcat_su(h, "margin-left", &su);
                 for (nn = n; nn && ! comp; nn = nn->parent) {                  for (nn = n; nn && ! comp; nn = nn->parent) {
                         if (MDOC_BLOCK != nn->type)                          if (MDOC_BLOCK != nn->type)
                                 continue;                                  continue;

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.24

CVSweb