]> granicus.if.org Git - graphviz/commitdiff
Add <S> element to html-like labels
authorEmden R. Gansner <erg@research.att.com>
Sun, 15 Sep 2013 21:00:30 +0000 (17:00 -0400)
committerEmden R. Gansner <erg@research.att.com>
Sun, 15 Sep 2013 21:00:30 +0000 (17:00 -0400)
doc/info/shapes.html
doc/infosrc/html.1
doc/infosrc/html.2
doc/infosrc/html_grammar
lib/common/htmllex.c
lib/common/htmlparse.y
lib/common/textpara.h
plugin/core/gvrender_core_svg.c
plugin/pango/gvtextlayout_pango.c

index 3a19e3c3714d97882f285de79ad7d17a96717d17..8424d7a2ba29d7ba25ba2836ac23705c580d99dc 100644 (file)
@@ -400,10 +400,12 @@ that are newer than mid-November 2003. In particular, it is not part
 of release 1.10.</EM>
 <P>
 <B>NOTE:</B><EM>The font markups for bold, italic, underlining, subscript and 
-superscript </EM>(<TT>&lt;B&gt;</TT>, <TT>&lt;I&gt;</TT>, <TT>&lt;U&gt;</TT>, <TT>&lt;SUB&gt</TT>; and <TT>&lt;SUP&gt;</TT>) 
-<EM>are only available in versions after 14 October 2011, and are
+superscript </EM>(<TT>&lt;B&gt;</TT>, <TT>&lt;I&gt;</TT>, <TT>&lt;U&gt;</TT>, <TT>&lt;SUB&gt</TT> and <TT>&lt;SUP&gt;</TT>) 
+<EM>are only available in versions after 14 October 2011, and 
+the markup for strike-through (<TT>&lt;S&gt;</TT>) requires versions later than 15 September 2013.
+In addition, all of these markups are
 currently only available via the cairo and svg renderers.
-In addition, the horizontal and vertical rules </EM>(<TT>&lt;HR&gt;</TT> and <TT>&lt;VR&gt;</TT>)
+The horizontal and vertical rules </EM>(<TT>&lt;HR&gt;</TT> and <TT>&lt;VR&gt;</TT>)
 <EM>are only available in versions
 later than 8 July 2011.
 </EM>
@@ -515,6 +517,11 @@ Note that, as in HTML, element and attribute names are case-insensitive.
   <TD ALIGN=LEFT>|</TD>
   <TD ALIGN=LEFT><B>&lt;SUP&gt;</B> <I>text</I> <B>&lt;/SUP&gt</B></TD>
 </TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>&lt;S&gt;</B> <I>text</I> <B>&lt;/S&gt</B></TD>
+</TR>
 <TR>
   <TD ALIGN=RIGHT><I>table</I></TD>
   <TD ALIGN=LEFT>:</TD>
@@ -701,6 +708,12 @@ Attribute values must appear in double quotes.
   &lt;!-- No attributes --&gt;
 &gt;
 </PRE>
+<P>
+  &lt;!-- Strike-through text --&gt;
+<PRE>&lt;S
+  &lt;!-- No attributes --&gt;
+&gt;
+</PRE>
 <P>
   &lt;!-- Horizontal rule --&gt;
 <PRE>&lt;HR
index c043a0dbde5675f482a3ca427ff1b1428a8c7e36..568199c9007e85cffad3ba7c6f4ad309580d43d3 100644 (file)
@@ -5,10 +5,12 @@ that are newer than mid-November 2003. In particular, it is not part
 of release 1.10.</EM>
 <P>
 <B>NOTE:</B><EM>The font markups for bold, italic, underlining, subscript and 
-superscript </EM>(<TT>&lt;B&gt;</TT>, <TT>&lt;I&gt;</TT>, <TT>&lt;U&gt;</TT>, <TT>&lt;SUB&gt</TT>; and <TT>&lt;SUP&gt;</TT>) 
-<EM>are only available in versions after 14 October 2011, and are
+superscript </EM>(<TT>&lt;B&gt;</TT>, <TT>&lt;I&gt;</TT>, <TT>&lt;U&gt;</TT>, <TT>&lt;SUB&gt</TT> and <TT>&lt;SUP&gt;</TT>) 
+<EM>are only available in versions after 14 October 2011, and 
+the markup for strike-through (<TT>&lt;S&gt;</TT>) requires versions later than 15 September 2013.
+In addition, all of these markups are
 currently only available via the cairo and svg renderers.
-In addition, the horizontal and vertical rules </EM>(<TT>&lt;HR&gt;</TT> and <TT>&lt;VR&gt;</TT>)
+The horizontal and vertical rules </EM>(<TT>&lt;HR&gt;</TT> and <TT>&lt;VR&gt;</TT>)
 <EM>are only available in versions
 later than 8 July 2011.
 </EM>
index 9d72896f800d95623b10d39a9866db76e0b4bf3d..49e6517acd9e83c4b1c3e73f546263e27f92f283 100644 (file)
@@ -134,6 +134,12 @@ Attribute values must appear in double quotes.
   &lt;!-- No attributes --&gt;
 &gt;
 </PRE>
+<P>
+  &lt;!-- Strike-through text --&gt;
+<PRE>&lt;S
+  &lt;!-- No attributes --&gt;
+&gt;
+</PRE>
 <P>
   &lt;!-- Horizontal rule --&gt;
 <PRE>&lt;HR
index f0bdee60d0fb36c96480ed60fbbe6f774f984759..d1699c8e0a2904a84112e076cb915fbf99631820 100644 (file)
@@ -1,6 +1,6 @@
 label    =  text | table
 text     = textitem | text textitem
-textitem = string | T_&lt;BR/&gt; | T_&lt;FONT&gt; text T_&lt;/FONT&gt; | T_&lt;I&gt; text T_&lt;/I&gt; | T_&lt;B&gt; text T_&lt;/B&gt; | T_&lt;U&gt; text T_&lt;/U&gt | T_&lt;SUB&gt; text T_&lt;/SUB&gt |T_&lt;SUP&gt; text T_&lt;/SUP&gt
+textitem = string | T_&lt;BR/&gt; | T_&lt;FONT&gt; text T_&lt;/FONT&gt; | T_&lt;I&gt; text T_&lt;/I&gt; | T_&lt;B&gt; text T_&lt;/B&gt; | T_&lt;U&gt; text T_&lt;/U&gt | T_&lt;SUB&gt; text T_&lt;/SUB&gt |T_&lt;SUP&gt; text T_&lt;/SUP&gt | T_&lt;S&gt; text T_&lt;/S&gt
 table =  [ T_&lt;FONT&gt; ] T_&lt;TABLE&gt; rows T_&lt;/TABLE&gt; [ T_&lt;/FONT&gt; ]
 rows = row | rows row | rows T_&lt;HR/&gt; row
 row = T_&lt;TR&gt; cells T_&lt;/TR&gt;
index d0257e0b4bce34bc6d7b6298a9dcd3b4d54438c8..d51c6223fe004db91452dfe332437ce015d5fcf3 100644 (file)
@@ -617,6 +617,9 @@ static void startElement(void *user, const char *name, char **atts)
     } else if (strcasecmp(name, "B") == 0) {
        htmllval.font = mkFont(0, HTML_BF, 0);
        state.tok = T_bold;
+    } else if (strcasecmp(name, "S") == 0) {
+       htmllval.font = mkFont(0, HTML_S, 0);
+       state.tok = T_s;
     } else if (strcasecmp(name, "U") == 0) {
        htmllval.font = mkFont(0, HTML_UL, 1);
        state.tok = T_underline;
@@ -671,6 +674,8 @@ static void endElement(void *user, const char *name)
        state.tok = T_n_sup;
     } else if (strcasecmp(name, "SUB") == 0) {
        state.tok = T_n_sub;
+    } else if (strcasecmp(name, "S") == 0) {
+       state.tok = T_n_s;
     } else if (strcasecmp(name, "BR") == 0) {
        if (state.tok == T_br)
            state.tok = T_BR;
@@ -914,19 +919,25 @@ static void printTok(int tok)
        s = "T_underline";
        break;
     case T_n_underline:
-       s = "T_underline";
+       s = "T_n_underline";
        break;
     case T_italic:
        s = "T_italic";
        break;
     case T_n_italic:
-       s = "T_italic";
+       s = "T_n_italic";
        break;
     case T_bold:
        s = "T_bold";
        break;
     case T_n_bold:
-       s = "T_bold";
+       s = "T_n_bold";
+       break;
+    case T_s:
+       s = "T_s";
+       break;
+    case T_n_s:
+       s = "T_n_s";
        break;
     default:
        s = "<unknown>";
index 880e6fd694ca2d3c8735f074b207d68921cbfa70..2ed8d9686a5865c8dc37abdbffa621cd750431f7 100644 (file)
@@ -436,14 +436,14 @@ popFont (void)
 
 %token T_end_br T_end_img T_row T_end_row T_html T_end_html
 %token T_end_table T_end_cell T_end_font T_string T_error
-%token T_n_italic T_n_bold T_n_underline T_n_sup T_n_sub
+%token T_n_italic T_n_bold T_n_underline T_n_sup T_n_sub T_n_s
 %token T_HR T_hr T_end_hr
 %token T_VR T_vr T_end_vr
 %token <i> T_BR T_br
 %token <img> T_IMG T_img
 %token <tbl> T_table
 %token <cell> T_cell
-%token <font> T_font T_italic T_bold T_underline T_sup T_sub
+%token <font> T_font T_italic T_bold T_underline T_sup T_sub T_s
 
 %type <txt> fonttext
 %type <cell> cell cells
@@ -476,6 +476,7 @@ textitem : string { appendFItemList(HTMLstate.str);}
          | bold text n_bold
          | sup text n_sup
          | sub text n_sub
+         | strike text n_strike
          ;
 
 font : T_font { pushFont ($1); }
@@ -496,6 +497,12 @@ bold : T_bold {pushFont($1);}
 n_bold : T_n_bold {popFont();}
             ;
 
+strike : T_s {pushFont($1);}
+          ;
+
+n_strike : T_n_s {popFont();}
+            ;
+
 underline : T_underline {pushFont($1);}
           ;
 
index 08ed6f298456c601887177f2308b60227df6c891..3d98a26fb0725fa8178ef430ab5f5ed9681c58df 100644 (file)
 extern "C" {
 #endif
 
-/* Bold, Italic, Underline */
+/* Bold, Italic, Underline, Sup, Sub, Strike */
 #define HTML_BF 1
 #define HTML_IF 2
 #define HTML_UL 4
 #define HTML_SUP 8
 #define HTML_SUB 16
+#define HTML_S   32
 
     /* font information
      * If name or color is NULL, or size < 0, that attribute
@@ -32,8 +33,8 @@ extern "C" {
     typedef struct {
        char*  name;
        char*  color;
-        int    flags:7;  /* HTML_UL, HTML_IF, HTML_BF */
-       int    cnt;   /* reference count */
+        int    flags:7;  /* HTML_UL, HTML_IF, HTML_BF, etc. */
+       int    cnt:(sizeof(int) * 8 - 7);   /* reference count */
        double size;
     } htmlfont_t;
 
index c2d06745f247a8322d44d949f6dc6747258e9a4a..aa08171a0c16341265967a1519cdb615ab616a30 100644 (file)
@@ -404,8 +404,17 @@ static void svg_textpara(GVJ_t * job, pointf p, textpara_t * para)
            gvprintf(job, " font-weight=\"bold\"");
        if ((flags & HTML_IF) && !style)
            gvprintf(job, " font-style=\"italic\"");
-       if ((flags & HTML_UL))
-           gvprintf(job, " text-decoration=\"underline\"");
+       if ((flags & (HTML_UL|HTML_S))) {
+           int comma = 0;
+           gvprintf(job, " text-decoration=\"");
+           if ((flags & HTML_UL)) {
+               gvprintf(job, "underline");
+               comma = 1;
+           }
+           if ((flags & HTML_S))
+               gvprintf(job, "%sline-through", (comma?",":""));
+           gvprintf(job, "\"");
+       }
        if ((flags & HTML_SUP))
            gvprintf(job, " baseline-shift=\"super\"");
        if ((flags & HTML_SUB))
index 28a681d3e056625cccb97a0c048761073e12c41a..45a2d79ef7d091d2216947e1e3e021d56f13e659 100644 (file)
@@ -190,6 +190,8 @@ static boolean pango_textlayout(textpara_t * para, char **fontpath)
            agxbput(&xb," style=\"italic\"");
        if (flags & HTML_UL)
            agxbput(&xb," underline=\"single\"");
+       if (flags & HTML_S)
+           agxbput(&xb," strikethrough=\"true\"");
        agxbput (&xb,">");
 
        if (flags & HTML_SUP)