]> granicus.if.org Git - graphviz/commitdiff
Fix error reporting in case libexpat not available;
authorerg <devnull@localhost>
Wed, 9 Feb 2005 04:52:06 +0000 (04:52 +0000)
committererg <devnull@localhost>
Wed, 9 Feb 2005 04:52:06 +0000 (04:52 +0000)
make some formatting changes in utils.c.

lib/common/htmllex.c
lib/common/htmllex.h
lib/common/htmlparse.y
lib/common/htmltable.c
lib/common/htmltable.h
lib/common/input.c
lib/common/utils.c

index 4615563788f213b25d48b8e79252f6b14e49c992..aeb037151ccf84079572348dbc46520890cbb415 100644 (file)
@@ -546,7 +546,7 @@ static void characterData(void *user, const char *s, int length)
 }
 #endif
 
-void initHTMLlexer(char *src, agxbuf * xb)
+int initHTMLlexer(char *src, agxbuf * xb)
 {
 #ifdef HAVE_LIBEXPAT
     state.xb = xb;
@@ -563,13 +563,15 @@ void initHTMLlexer(char *src, agxbuf * xb)
                          (XML_StartElementHandler) startElement,
                          endElement);
     XML_SetCharacterDataHandler(state.parser, characterData);
+    return 0;
 #else
     static int first;
-    if (first) {
+    if (!first) {
        agerr(AGWARN,
              "Not built with libexpat. Table formatting is not available.\n");
        first++;
     }
+    return 1;
 #endif
 }
 
index 4fec016c1cb62b58a00eb8aef024286b9e2f540d..b01221c9fe0275e4748153ff33cdc57d9cecb429 100644 (file)
@@ -23,7 +23,7 @@ extern "C" {
 
 #include <agxbuf.h>
 
-    extern void initHTMLlexer(char *, agxbuf *);
+    extern int initHTMLlexer(char *, agxbuf *);
     extern int htmllex();
     extern int htmllineno();
     extern int clearHTMLlexer();
index 76bf3210337b18936a49f022e0e58447440af231..2152da8f1fe62bacf64fc550267da73d56518373 100644 (file)
@@ -176,7 +176,7 @@ mkText (const char* lastl)
     lp->just = 'n';
   }
 
-  dtclear (lines);
+  if (lines) dtclear (lines);
 
   return tp;
 }
@@ -427,11 +427,24 @@ image  : T_img T_end_img { $$ = $1; }
 
 %%
 
+htmllabel_t*
+simpleHTML (char* txt)
+{
+  htmltxt_t*   tobj = mkText (txt);
+  htmllabel_t* l = mkLabel(tobj,HTML_TEXT);
+  return l;
+}
+
+/* parseHTML:
+ * Return parsed label or NULL if failure.
+ * Set warn to 0 on success; 1 for warning message; 2 if no expat.
+ */
 htmllabel_t*
 parseHTML (char* txt, int* warn)
 {
   unsigned char buf[SMALLBUF];
   agxbuf        str;
+  htmllabel_t*  l;
 
   HTMLstate.tblstack = 0;
   HTMLstate.lbl = 0;
@@ -439,13 +452,20 @@ parseHTML (char* txt, int* warn)
   agxbinit (&str, SMALLBUF, buf);
   HTMLstate.str = &str;
   
-  initHTMLlexer (txt, &str);
-  yyparse();
-  *warn = clearHTMLlexer ();
+  if (initHTMLlexer (txt, &str)) {/* failed: no libexpat - give up */
+    *warn = 2;
+    l = NULL;
+  }
+  else {
+    yyparse();
+    *warn = clearHTMLlexer ();
+    l = HTMLstate.lbl;
+  }
 
   dtclose (HTMLstate.lines);
+  HTMLstate.lines = NULL;
   agxbfree (&str);
 
-  return HTMLstate.lbl;
+  return l;
 }
 
index b9c442292b2cc4437747cbd1bb1b41f3dcefe0e6..5c7281ca3f31a035502fd0634dc7b24d2ba464ad 100644 (file)
@@ -1418,7 +1418,7 @@ static char *getPenColor(void *obj)
 }
 
 /* make_html_label:
- * Return 1 if problem parsing HTML. In this case, use object name.
+ * Return non-zero if problem parsing HTML. In this case, use object name.
  */
 int make_html_label(textlabel_t * lp, void *obj)
 {
@@ -1432,9 +1432,7 @@ int make_html_label(textlabel_t * lp, void *obj)
        agxbuf xb;
        unsigned char buf[SMALLBUF];
        agxbinit(&xb, SMALLBUF, buf);
-       lbl = parseHTML(nameOf(obj, &xb), &rv);
-       assert(lbl);
-       rv = 1;
+       lbl = simpleHTML(nameOf(obj, &xb));
        agxbfree(&xb);
     }
 
index f01e2fe15d7a22f4908e43360d1d9787fad9bf54..b1157b974a7c92e65f4e598bc03112759904ec5b 100644 (file)
@@ -134,6 +134,7 @@ extern "C" {
     } pitem;
 
     extern htmllabel_t *parseHTML(char *, int *);
+    extern htmllabel_t *simpleHTML(char *);
 
     extern int make_html_label(textlabel_t * lp, void *obj);
     extern void emit_html_label(GVC_t * gvc, htmllabel_t * lp,
index 27225d9346f106adaa4dd99fb5194442ec3be0ba..ecda6530f47386133815c7ab65c507bf92628fd5 100644 (file)
@@ -647,7 +647,7 @@ void do_graph_label(graph_t * sg)
                                                           "fontcolor"),
                                                DEFAULT_COLOR), sg);
        if (html) {
-           if (make_html_label(GD_label(sg), sg))
+           if (make_html_label(GD_label(sg), sg) == 1)
                agerr(AGPREV, "in label of graph %s\n", sg->name);
        }
 
index 64c5efd577009fd65c15e17a474689f0467edde7..2497d4bec19cab9e696957238d1a2725e853f4a0 100644 (file)
@@ -814,7 +814,7 @@ void common_init_node(node_t * n)
                             late_nnstring(n, N_fontcolor, DEFAULT_COLOR),
                             n->graph);
     if (html) {
-       if (make_html_label(ND_label(n), n))
+       if (make_html_label(ND_label(n), n) == 1)
            agerr(AGPREV, "in label of node %s\n", n->name);
     }
     ND_shape(n) =
@@ -868,15 +868,15 @@ initFontLabelEdgeAttr(edge_t * e, struct fontinfo *fi,
 static boolean 
 wantClip(edge_t *e, attrsym_t* sym)
 {
-       char            *str;
-       boolean         rv = TRUE;
+    char               *str;
+    boolean            rv = TRUE;
 
-       if (sym) {      /* mapbool isn't a good fit, because we want "" to mean TRUE */
-               str = agxget(e,sym->index);
-               if (str && str[0]) rv = mapbool(str);
-               else rv = TRUE;
-       }
-       return rv;
+    if (sym) { /* mapbool isn't a good fit, because we want "" to mean TRUE */
+       str = agxget(e,sym->index);
+       if (str && str[0]) rv = mapbool(str);
+       else rv = TRUE;
+    }
+    return rv;
 }
 
 /*chkPort:
@@ -919,7 +919,7 @@ int common_init_edge(edge_t * e)
                                 fi.fontsize, fi.fontname, fi.fontcolor,
                                 e->tail->graph);
        if (html) {
-           if (make_html_label(ED_label(e), e))
+           if (make_html_label(ED_label(e), e) == 1)
                edgeError(e, "label");
        }
        GD_has_labels(e->tail->graph) |= EDGE_LABEL;
@@ -940,7 +940,7 @@ int common_init_edge(edge_t * e)
                                      lfi.fontsize, lfi.fontname,
                                      lfi.fontcolor, e->tail->graph);
        if (html) {
-           if (make_html_label(ED_head_label(e), e))
+           if (make_html_label(ED_head_label(e), e) == 1)
                edgeError(e, "head label");
        }
        GD_has_labels(e->tail->graph) |= HEAD_LABEL;
@@ -957,7 +957,7 @@ int common_init_edge(edge_t * e)
                                      lfi.fontsize, lfi.fontname,
                                      lfi.fontcolor, e->tail->graph);
        if (html) {
-           if (make_html_label(ED_tail_label(e), e))
+           if (make_html_label(ED_tail_label(e), e) == 1)
                edgeError(e, "tail label");
        }
        GD_has_labels(e->tail->graph) |= TAIL_LABEL;
@@ -1032,7 +1032,7 @@ pointf flip_ptf(pointf p, int rankdir)
     return p;
 }
 
-/* invflip_ptf:
+/* invflip_pt:
  * Transform point =>
  *  LR - rotate cw by 90
  *  BT - reflect across x axis