]> granicus.if.org Git - graphviz/commitdiff
Fix bug 2345
authorEmden R. Gansner <erg@research.att.com>
Fri, 30 Aug 2013 19:27:07 +0000 (15:27 -0400)
committerEmden R. Gansner <erg@research.att.com>
Fri, 30 Aug 2013 19:27:07 +0000 (15:27 -0400)
lib/common/arrows.c
lib/common/htmltable.c

index 1667557ac5f4d5b0d6d4d4d8920c46d0c67a3e26..3532433a2a9d3716e6da15e46e8615493a69c7ba 100644 (file)
@@ -171,10 +171,11 @@ static void arrow_match_name(char *name, int *flag)
     int i, f;
 
     *flag = 0;
-    for (i = 0; *rest != '\0' && i < NUMB_OF_ARROW_HEADS; i++) {
+    for (i = 0; *rest != '\0' && i < NUMB_OF_ARROW_HEADS; ) {
        f = ARR_TYPE_NONE;
         rest = arrow_match_shape(rest, &f);
-       *flag |= (f << (i * BITS_PER_ARROW));
+       if (f != ARR_TYPE_NONE)
+           *flag |= (f << (i++ * BITS_PER_ARROW));
     }
 }
 
index 1d8ac4e7bffaa8bc4960d9950b48b8f4e051dc92..f36ae7636235609a419f0e345df2630575ab36f8 100644 (file)
@@ -677,14 +677,47 @@ static void freeObj(GVJ_t * job)
     pop_obj_state(job);
 }
 
+static double
+heightOfLbl (htmllabel_t * lp)
+{
+    double sz;
+
+    switch (lp->kind) {
+    case HTML_TBL:
+       sz  = lp->u.tbl->data.box.UR.y - lp->u.tbl->data.box.LL.y;
+       break;
+    case HTML_IMAGE:
+       sz  = lp->u.img->box.UR.y - lp->u.img->box.LL.y;
+       break;
+    case HTML_TEXT:
+       sz  = lp->u.txt->box.UR.y - lp->u.txt->box.LL.y;
+       break;
+    }
+    return sz;
+}
+
 /* emit_html_label:
  */
 void emit_html_label(GVJ_t * job, htmllabel_t * lp, textlabel_t * tp)
 {
     htmlenv_t env;
+    pointf p;
 
     allocObj(job);
-    env.pos = tp->pos;
+
+    p = tp->pos;
+    switch (tp->valign) {
+       case 't':
+           p.y = tp->pos.y + (tp->space.y - heightOfLbl(lp))/ 2.0 - 1;
+           break;
+       case 'b':
+           p.y = tp->pos.y - (tp->space.y - heightOfLbl(lp))/ 2.0 - 1;
+           break;
+       default:        
+           /* no-op */
+           break;
+    }
+    env.pos = p;
     env.finfo.color = tp->fontcolor;
     env.finfo.name = tp->fontname;
     env.finfo.size = tp->fontsize;