# HG changeset patch
# User Daniel J Sebald <daniel.sebald@ieee.org>
# Date 1435964208 18000
# Node ID 20308da155519f0022076895f3bee9a322914548
# Parent  9de6949ec15f49c16053f63f1d4867789f51a8d0
Use utf-8 encoding rather than Symbol font for gnuplot terminals (patch #8696)

* __gnuplot_drawnow__.m (gnuplot_set_term): Add "set encoding utf8;" prior to
setting the terminal.

* __go_draw_axes__.m (__go_draw_axes__): Pass 'gnuplot_term' into all functions
__maybe_munge_text__().  Remove all use of undo_string_escapes() around text
strings.
(do_tics_1): Pass 'gnuplot_term' into __tex2enhanced__().
(get_fontname_and_size): Pass 'gnuplot_term' into __maybe_munge_text__().
(__maybe_munge_text__): Accept 'gnuplot_term' as an input variable.  Pass
'gnuplot_term' into all occurrences of __tex2enhanced__().
(__tex2enhanced__): Accept 'gnuplot_term' as an input variable.  Determine from
gnuplot_term whether /Symbol string or utf-8 encodings should be used.  When
inserting symbol strings, make the cell choice according to type.  Use added
sym.emptyset structure element for empty set escape sequence replacement.
(__setup_sym_table__): Add the sys.emptyset definition.  Add all the equivalent
utf-8 codes (viewed as glyphs in editors) alongside the /Symbol definitions in
a cell array.

diff --git a/scripts/plot/util/__gnuplot_drawnow__.m b/scripts/plot/util/__gnuplot_drawnow__.m
--- a/scripts/plot/util/__gnuplot_drawnow__.m
+++ b/scripts/plot/util/__gnuplot_drawnow__.m
@@ -267,7 +267,7 @@ function enhanced = gnuplot_set_term (pl
     endif
 
     ## Set the gnuplot terminal (type, enhanced, title, options & size).
-    term_str = ["set terminal " term];
+    term_str = ["set encoding utf8;\nset terminal " term];
     if (! isempty (enh_str))
       term_str = [term_str " " enh_str];
     endif
diff --git a/scripts/plot/util/private/__go_draw_axes__.m b/scripts/plot/util/private/__go_draw_axes__.m
--- a/scripts/plot/util/private/__go_draw_axes__.m
+++ b/scripts/plot/util/private/__go_draw_axes__.m
@@ -154,11 +154,10 @@ function __go_draw_axes__ (h, plot_strea
       fputs (plot_stream, "unset title;\n");
     else
       colorspec = get_text_colorspec (t.color, mono);
-      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string");
+      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string", gnuplot_term);
       fontspec = create_fontspec (f, s, gnuplot_term);
       fprintf (plot_stream, "set title \"%s\" %s %s %s;\n",
-               undo_string_escapes (tt), fontspec, colorspec,
-               __do_enhanced_option__ (enhanced, t));
+               tt, fontspec, colorspec, __do_enhanced_option__ (enhanced, t));
     endif
   endif
 
@@ -170,16 +169,14 @@ function __go_draw_axes__ (h, plot_strea
       fprintf (plot_stream, "unset xlabel;\n");
       fprintf (plot_stream, "unset x2label;\n");
     else
-      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string");
+      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string", gnuplot_term);
       fontspec = create_fontspec (f, s, gnuplot_term);
       if (strcmpi (axis_obj.xaxislocation, "top"))
         fprintf (plot_stream, "set x2label \"%s\" %s %s %s",
-                 undo_string_escapes (tt), colorspec, fontspec,
-                 __do_enhanced_option__ (enhanced, t));
+                 tt, colorspec, fontspec, __do_enhanced_option__ (enhanced, t));
       else
         fprintf (plot_stream, "set xlabel \"%s\" %s %s %s",
-                 undo_string_escapes (tt), colorspec, fontspec,
-                 __do_enhanced_option__ (enhanced, t));
+                 tt, colorspec, fontspec, __do_enhanced_option__ (enhanced, t));
       endif
       fprintf (plot_stream, " rotate by %f;\n", angle);
       if (strcmpi (axis_obj.xaxislocation, "top"))
@@ -198,16 +195,14 @@ function __go_draw_axes__ (h, plot_strea
       fprintf (plot_stream, "unset ylabel;\n");
       fprintf (plot_stream, "unset y2label;\n");
     else
-      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string");
+      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string", gnuplot_term);
       fontspec = create_fontspec (f, s, gnuplot_term);
       if (strcmpi (axis_obj.yaxislocation, "right"))
         fprintf (plot_stream, "set y2label \"%s\" %s %s %s",
-                 undo_string_escapes (tt), colorspec, fontspec,
-                 __do_enhanced_option__ (enhanced, t));
+                 tt, colorspec, fontspec, __do_enhanced_option__ (enhanced, t));
       else
         fprintf (plot_stream, "set ylabel \"%s\" %s %s %s",
-                 undo_string_escapes (tt), colorspec, fontspec,
-                 __do_enhanced_option__ (enhanced, t));
+                 tt, colorspec, fontspec, __do_enhanced_option__ (enhanced, t));
       endif
       fprintf (plot_stream, " rotate by %f;\n", angle);
       if (strcmpi (axis_obj.yaxislocation, "right"))
@@ -225,11 +220,10 @@ function __go_draw_axes__ (h, plot_strea
     if (isempty (t.string))
       fputs (plot_stream, "unset zlabel;\n");
     else
-      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string");
+      [tt, f, s] = __maybe_munge_text__ (enhanced, t, "string", gnuplot_term);
       fontspec = create_fontspec (f, s, gnuplot_term);
       fprintf (plot_stream, "set zlabel \"%s\" %s %s %s",
-               undo_string_escapes (tt), colorspec, fontspec,
-               __do_enhanced_option__ (enhanced, t));
+               tt, colorspec, fontspec, __do_enhanced_option__ (enhanced, t));
       fprintf (plot_stream, " rotate by %f;\n", angle);
     endif
   endif
@@ -572,9 +566,7 @@ function __go_draw_axes__ (h, plot_strea
         if (isempty (obj.displayname))
           titlespec{data_idx} = "title \"\"";
         else
-          tmp = undo_string_escapes (
-                  __maybe_munge_text__ (enhanced, obj, "displayname")
-                );
+          tmp = __maybe_munge_text__ (enhanced, obj, "displayname", gnuplot_term);
           titlespec{data_idx} = ['title "' tmp '"'];
         endif
         usingclause{data_idx} = sprintf ("record=%d", numel (obj.xdata));
@@ -696,9 +688,7 @@ function __go_draw_axes__ (h, plot_strea
              if (i > 1 || isempty (obj.displayname))
                titlespec{local_idx} = "title \"\"";
              else
-               tmp = undo_string_escapes (
-                       __maybe_munge_text__ (enhanced, obj, "displayname")
-                     );
+               tmp = __maybe_munge_text__ (enhanced, obj, "displayname", gnuplot_term);
                titlespec{local_idx} = ['title "' tmp '"'];
              endif
              if (isfield (obj, "facecolor"))
@@ -1135,9 +1125,7 @@ function __go_draw_axes__ (h, plot_strea
           if (isempty (obj.displayname))
             titlespec{data_idx} = "title \"\"";
           else
-            tmp = undo_string_escapes (
-                    __maybe_munge_text__ (enhanced, obj, "displayname")
-                  );
+            tmp = __maybe_munge_text__ (enhanced, obj, "displayname", gnuplot_term);
             titlespec{data_idx} = ['title "' tmp '"'];
           endif
           withclause{data_idx} = sprintf ("with pm3d linestyle %d",
@@ -1325,7 +1313,7 @@ function __go_draw_axes__ (h, plot_strea
         endif
 
       case "text"
-        [label, f, s] = __maybe_munge_text__ (enhanced, obj, "string");
+        [label, f, s] = __maybe_munge_text__ (enhanced, obj, "string", gnuplot_term);
         fontspec = create_fontspec (f, s, gnuplot_term);
         lpos = obj.position;
         halign = obj.horizontalalignment;
@@ -1377,15 +1365,14 @@ function __go_draw_axes__ (h, plot_strea
           ## This produces the desired vertical alignment in 3D.
           fprintf (plot_stream,
                    "set label \"%s\" at %s %.15e,%.15e,%.15e %s rotate by %f offset character %f,%f %s %s front %s;\n",
-                   undo_string_escapes (label), units, lpos(1),
-                   lpos(2), lpos(3), halign, angle, dx_and_dy, fontspec,
-                   __do_enhanced_option__ (enhanced, obj), colorspec);
+                   label, units, lpos(1), lpos(2), lpos(3), halign, angle,
+                   dx_and_dy, fontspec, __do_enhanced_option__ (enhanced, obj),
+                   colorspec);
         else
           fprintf (plot_stream,
                    "set label \"%s\" at %s %.15e,%.15e %s rotate by %f offset character %f,%f %s %s front %s;\n",
-                   undo_string_escapes (label), units,
-                   lpos(1), lpos(2), halign, angle, dx_and_dy, fontspec,
-                   __do_enhanced_option__ (enhanced, obj), colorspec);
+                   label, units, lpos(1), lpos(2), halign, angle, dx_and_dy,
+                   fontspec, __do_enhanced_option__ (enhanced, obj), colorspec);
         endif
 
       case "hggroup"
@@ -2157,7 +2144,7 @@ function do_tics_1 (ticmode, tics, mtics
   endif
   if (strcmpi (interpreter, "tex"))
     for n = 1 : numel (labels)
-      labels{n} = __tex2enhanced__ (labels{n}, fontname, false, false);
+      labels{n} = __tex2enhanced__ (labels{n}, fontname, false, false, gnuplot_term);
     endfor
   elseif (strcmpi (interpreter, "latex"))
     if (! warned_latex)
@@ -2271,7 +2258,7 @@ function [f, s, fnt, it, bld] = get_font
   endif
 endfunction
 
-function [str, f, s] = __maybe_munge_text__ (enhanced, obj, fld)
+function [str, f, s] = __maybe_munge_text__ (enhanced, obj, fld, gnuplot_term)
 
   persistent warned_latex = false;
 
@@ -2309,10 +2296,10 @@ function [str, f, s] = __maybe_munge_tex
     if (strcmpi (obj.interpreter, "tex"))
       if (iscellstr (str))
         for n = 1:numel (str)
-          str{n} = __tex2enhanced__ (str{n}, fnt, it, bld);
+          str{n} = __tex2enhanced__ (str{n}, fnt, it, bld, gnuplot_term);
         endfor
       else
-        str = __tex2enhanced__ (str, fnt, it, bld);
+        str = __tex2enhanced__ (str, fnt, it, bld, gnuplot_term);
       endif
     elseif (strcmpi (obj.interpreter, "latex"))
       if (! warned_latex)
@@ -2323,20 +2310,26 @@ function [str, f, s] = __maybe_munge_tex
   endif
 endfunction
 
-function str = __tex2enhanced__ (str, fnt, it, bld)
+function str = __tex2enhanced__ (str, fnt, it, bld, gnuplot_term)
   persistent sym = __setup_sym_table__ ();
   persistent flds = fieldnames (sym);
 
+  if (any (strcmp (gnuplot_term, {"postscript", "epscairo"})))
+    symtype = 1;
+  else
+    symtype = 2;
+  endif
+
   [s, e, m] = regexp (str, "\\\\([a-zA-Z]+|0)", "start", "end", "matches");
 
   for i = length (s) : -1 : 1
-    ## special case for "\0"  and replace with empty set "{/Symbol \306}'
+    ## special case for "\0"  and replace with empty set equivalent
     if (strncmp (m{i}, '\0', 2))
-      str = [str(1:s(i) - 1) '{/Symbol \306}' str(s(i) + 2:end)];
+      str = [str(1:s(i) - 1) sym.emptyset{symtype} str(s(i) + 2:end)];
     else
       f = m{i}(2:end);
       if (isfield (sym, f))
-        g = getfield (sym, f);
+        g = getfield (sym, f) {symtype};
         ## FIXME: The symbol font doesn't seem to support bold or italic
         ##if (bld)
         ##  if (it)
@@ -2397,7 +2390,7 @@ function str = __tex2enhanced__ (str, fn
         ## like \pix, that should be translated to the symbol Pi and x
         for j = 1 : length (flds)
           if (strncmp (flds{j}, f, length (flds{j})))
-            g = getfield (sym, flds{j});
+            g = getfield (sym, flds{j}) {symtype};
             ## FIXME: The symbol font doesn't seem to support bold or italic
             ##if (bld)
             ##  if (it)
@@ -2420,7 +2413,7 @@ function str = __tex2enhanced__ (str, fn
   ## But need to put the shorter of the two arguments first.
   ## Careful of nested {} and unprinted characters when defining
   ## shortest..  Don't have to worry about things like ^\theta as they
-  ## are already converted to ^{/Symbol q}.
+  ## are already converted.
 
   ## FIXME: This is a mess... Is it worth it just for a "@" character?
 
@@ -2508,117 +2501,119 @@ endfunction
 
 function sym = __setup_sym_table__ ()
   ## Setup the translation table for TeX to gnuplot enhanced mode.
-  sym.forall = '{/Symbol \042}';
-  sym.exists = '{/Symbol \044}';
-  sym.ni = '{/Symbol \047}';
-  sym.cong = '{/Symbol \100}';
-  sym.Delta = '{/Symbol D}';
-  sym.Phi = '{/Symbol F}';
-  sym.Gamma = '{/Symbol G}';
-  sym.vartheta = '{/Symbol J}';
-  sym.Lambda = '{/Symbol L}';
-  sym.Pi = '{/Symbol P}';
-  sym.Theta = '{/Symbol Q}';
-  sym.Sigma = '{/Symbol S}';
-  sym.varsigma = '{/Symbol V}';
-  sym.Omega = '{/Symbol W}';
-  sym.Xi = '{/Symbol X}';
-  sym.Psi = '{/Symbol Y}';
-  sym.perp = '{/Symbol \136}';
-  sym.alpha = '{/Symbol a}';
-  sym.beta = '{/Symbol b}';
-  sym.chi = '{/Symbol c}';
-  sym.delta = '{/Symbol d}';
-  sym.epsilon = '{/Symbol e}';
-  sym.phi = '{/Symbol f}';
-  sym.gamma = '{/Symbol g}';
-  sym.eta = '{/Symbol h}';
-  sym.iota = '{/Symbol i}';
-  sym.varphi = '{/Symbol j}';              # Not in OpenGL
-  sym.kappa = '{/Symbol k}';
-  sym.lambda = '{/Symbol l}';
-  sym.mu = '{/Symbol m}';
-  sym.nu = '{/Symbol n}';
-  sym.o = '{/Symbol o}';
-  sym.pi = '{/Symbol p}';
-  sym.theta = '{/Symbol q}';
-  sym.rho = '{/Symbol r}';
-  sym.sigma = '{/Symbol s}';
-  sym.tau = '{/Symbol t}';
-  sym.upsilon = '{/Symbol u}';
-  sym.varpi = '{/Symbol v}';
-  sym.omega = '{/Symbol w}';
-  sym.xi = '{/Symbol x}';
-  sym.psi = '{/Symbol y}';
-  sym.zeta = '{/Symbol z}';
-  sym.sim = '{/Symbol \176}';
-  sym.Upsilon = '{/Symbol \241}';
-  sym.prime = '{/Symbol \242}';
-  sym.leq = '{/Symbol \243}';
-  sym.infty = '{/Symbol \245}';
-  sym.clubsuit = '{/Symbol \247}';
-  sym.diamondsuit = '{/Symbol \250}';
-  sym.heartsuit = '{/Symbol \251}';
-  sym.spadesuit = '{/Symbol \252}';
-  sym.leftrightarrow = '{/Symbol \253}';
-  sym.leftarrow = '{/Symbol \254}';
-  sym.uparrow = '{/Symbol \255}';
-  sym.rightarrow = '{/Symbol \256}';
-  sym.downarrow = '{/Symbol \257}';
-  sym.circ = '{/Symbol \260}';         # degree symbol, not circ as in FLTK
-  sym.deg = '{/Symbol \260}';
-  sym.ast = '{/Symbol *}';
-  sym.pm = '{/Symbol \261}';
-  sym.geq = '{/Symbol \263}';
-  sym.times = '{/Symbol \264}';
-  sym.propto = '{/Symbol \265}';
-  sym.partial = '{/Symbol \266}';
-  sym.bullet = '{/Symbol \267}';
-  sym.div = '{/Symbol \270}';
-  sym.neq = '{/Symbol \271}';
-  sym.equiv = '{/Symbol \272}';
-  sym.approx = '{/Symbol \273}';
-  sym.ldots = '{/Symbol \274}';
-  sym.mid = '{/Symbol \275}';
-  sym.aleph = '{/Symbol \300}';
-  sym.Im = '{/Symbol \301}';
-  sym.Re = '{/Symbol \302}';
-  sym.wp = '{/Symbol \303}';
-  sym.otimes = '{/Symbol \304}';
-  sym.oplus = '{/Symbol \305}';
+  sym.forall = {'{/Symbol \042}', '∀'};
+  sym.exists = {'{/Symbol \044}', '∃'};
+  sym.ni = {'{/Symbol \047}', '∋'};
+  sym.cong = {'{/Symbol \100}', '≅'};
+  sym.Delta = {'{/Symbol D}', 'Δ'};
+  sym.Phi = {'{/Symbol F}', 'Φ'};
+  sym.Gamma = {'{/Symbol G}', 'Γ'};
+  sym.vartheta = {'{/Symbol J}', 'ϑ'};
+  sym.Lambda = {'{/Symbol L}', 'Λ'};
+  sym.Pi = {'{/Symbol P}', 'Π'};
+  sym.Theta = {'{/Symbol Q}', 'Θ'};
+  sym.Sigma = {'{/Symbol S}', 'Σ'};
+  sym.varsigma = {'{/Symbol V}', 'ς'};
+  sym.Omega = {'{/Symbol W}', 'Ω'};
+  sym.Xi = {'{/Symbol X}', 'Ξ'};
+  sym.Psi = {'{/Symbol Y}', 'Ψ'};
+  sym.perp = {'{/Symbol \136}', '⊥'};
+  sym.alpha = {'{/Symbol a}', 'α'};
+  sym.beta = {'{/Symbol b}', 'β'};
+  sym.chi = {'{/Symbol c}', 'χ'};
+  sym.delta = {'{/Symbol d}', 'δ'};
+  sym.epsilon = {'{/Symbol e}', 'ε'};
+  sym.phi = {'{/Symbol f}', 'ϕ'};
+  sym.gamma = {'{/Symbol g}', 'γ'};
+  sym.eta = {'{/Symbol h}', 'η'};
+  sym.iota = {'{/Symbol i}', 'ι'};
+  sym.varphi = {'{/Symbol j}', 'φ'};              # Not in OpenGL
+  sym.kappa = {'{/Symbol k}', 'κ'};
+  sym.lambda = {'{/Symbol l}', 'λ'};
+  sym.mu = {'{/Symbol m}', 'μ'};
+  sym.nu = {'{/Symbol n}', 'ν'};
+  sym.o = {'{/Symbol o}', 'ο'};
+  sym.pi = {'{/Symbol p}', 'π'};
+  sym.theta = {'{/Symbol q}', 'θ'};
+  sym.rho = {'{/Symbol r}', 'ρ'};
+  sym.sigma = {'{/Symbol s}', 'σ'};
+  sym.tau = {'{/Symbol t}', 'τ'};
+  sym.upsilon = {'{/Symbol u}', 'υ'};
+  sym.varpi = {'{/Symbol v}', 'ϖ'};
+  sym.omega = {'{/Symbol w}', 'ω'};
+  sym.xi = {'{/Symbol x}', 'ξ'};
+  sym.psi = {'{/Symbol y}', 'ψ'};
+  sym.zeta = {'{/Symbol z}', 'ζ'};
+  sym.sim = {'{/Symbol \176}', '∼'};
+  sym.Upsilon = {'{/Symbol \241}', 'Υ'};
+  sym.prime = {'{/Symbol \242}', '′'};
+  sym.leq = {'{/Symbol \243}', '≤'};
+  sym.infty = {'{/Symbol \245}', '∞'};
+  sym.clubsuit = {'{/Symbol \247}', '♣'};
+  sym.diamondsuit = {'{/Symbol \250}', '♢'};
+  sym.heartsuit = {'{/Symbol \251}', '♡'};
+  sym.spadesuit = {'{/Symbol \252}', '♠'};
+  sym.leftrightarrow = {'{/Symbol \253}', '↔'};
+  sym.leftarrow = {'{/Symbol \254}', '←'};
+  sym.uparrow = {'{/Symbol \255}', '↑'};
+  sym.rightarrow = {'{/Symbol \256}', '→'};
+  sym.downarrow = {'{/Symbol \257}', '↓'};
+  sym.circ = {'{/Symbol \260}', '∘'};
+  # degree symbol, not circ as in FLTK
+  sym.deg = {'{/Symbol \260}', '°'};
+  sym.ast = {'{/Symbol *}', '∗'};
+  sym.pm = {'{/Symbol \261}', '±'};
+  sym.geq = {'{/Symbol \263}', '≥'};
+  sym.times = {'{/Symbol \264}', '×'};
+  sym.propto = {'{/Symbol \265}', '∝'};
+  sym.partial = {'{/Symbol \266}', '∂'};
+  sym.bullet = {'{/Symbol \267}', '∙'};
+  sym.div = {'{/Symbol \270}', '÷'};
+  sym.neq = {'{/Symbol \271}', '≠'};
+  sym.equiv = {'{/Symbol \272}', '≡'};
+  sym.approx = {'{/Symbol \273}', '≈'};
+  sym.ldots = {'{/Symbol \274}', '…'};
+  sym.mid = {'{/Symbol \275}', '∣'};
+  sym.aleph = {'{/Symbol \300}', 'ℵ'};
+  sym.Im = {'{/Symbol \301}', 'ℑ'};
+  sym.Re = {'{/Symbol \302}', 'ℜ'};
+  sym.wp = {'{/Symbol \303}', '℘'};
+  sym.otimes = {'{/Symbol \304}', '⊗'};
+  sym.oplus = {'{/Symbol \305}', '⊕'};
   ## empty set, not circled slash division operator as in FLTK.
-  sym.oslash = '{/Symbol \306}';
-  sym.cap = '{/Symbol \307}';
-  sym.cup = '{/Symbol \310}';
-  sym.supset = '{/Symbol \311}';
-  sym.supseteq = '{/Symbol \312}';
-  sym.subset = '{/Symbol \314}';
-  sym.subseteq = '{/Symbol \315}';
-  sym.in = '{/Symbol \316}';
-  sym.notin = '{/Symbol \317}';            # Not in OpenGL
-  sym.angle = '{/Symbol \320}';
-  sym.bigtriangledown = '{/Symbol \321}';  # Not in OpenGL
-  sym.langle = '{/Symbol \341}';
-  sym.rangle = '{/Symbol \361}';
-  sym.nabla = '{/Symbol \321}';
-  sym.prod = '{/Symbol \325}';             # Not in OpenGL
-  sym.surd = '{/Symbol \326}';
-  sym.cdot = '{/Symbol \327}';
-  sym.neg = '{/Symbol \330}';
-  sym.wedge = '{/Symbol \331}';
-  sym.vee = '{/Symbol \332}';
-  sym.Leftrightarrow = '{/Symbol \333}';   # Not in OpenGL
-  sym.Leftarrow = '{/Symbol \334}';
-  sym.Uparrow = '{/Symbol \335}';          # Not in OpenGL
-  sym.Rightarrow = '{/Symbol \336}';
-  sym.Downarrow = '{/Symbol \337}';        # Not in OpenGL
-  sym.diamond = '{/Symbol \340}';          # Not in OpenGL
-  sym.copyright = '{/Symbol \343}';
-  sym.lfloor = '{/Symbol \353}';
-  sym.lceil = '{/Symbol \351}';
-  sym.rfloor = '{/Symbol \373}';
-  sym.rceil = '{/Symbol \371}';
-  sym.int = '{/Symbol \362}';
+  sym.oslash = {'{/Symbol \306}', '⊘'};
+  sym.emptyset = {'{/Symbol \306}', '∅'};
+  sym.cap = {'{/Symbol \307}', '∩'};
+  sym.cup = {'{/Symbol \310}', '∪'};
+  sym.supset = {'{/Symbol \311}', '⊃'};
+  sym.supseteq = {'{/Symbol \312}', '⊇'};
+  sym.subset = {'{/Symbol \314}', '⊂'};
+  sym.subseteq = {'{/Symbol \315}', '⊑'};
+  sym.in = {'{/Symbol \316}', '∈'};
+  sym.notin = {'{/Symbol \317}', '∋'};            # Not in OpenGL
+  sym.angle = {'{/Symbol \320}', '∠'};
+  sym.bigtriangledown = {'{/Symbol \321}', '▽'};  # Not in OpenGL
+  sym.langle = {'{/Symbol \341}', '〈'};
+  sym.rangle = {'{/Symbol \361}', '〉'};
+  sym.nabla = {'{/Symbol \321}', '∇'};
+  sym.prod = {'{/Symbol \325}', '∏'};             # Not in OpenGL
+  sym.surd = {'{/Symbol \326}', '√'};
+  sym.cdot = {'{/Symbol \327}', '⋅'};
+  sym.neg = {'{/Symbol \330}', '¬'};
+  sym.wedge = {'{/Symbol \331}', '∧'};
+  sym.vee = {'{/Symbol \332}', '∨'};
+  sym.Leftrightarrow = {'{/Symbol \333}', '⇔'};   # Not in OpenGL
+  sym.Leftarrow = {'{/Symbol \334}', '⇐'};
+  sym.Uparrow = {'{/Symbol \335}', '⇑'};          # Not in OpenGL
+  sym.Rightarrow = {'{/Symbol \336}', '⇒'};
+  sym.Downarrow = {'{/Symbol \337}', '⇓'};        # Not in OpenGL
+  sym.diamond = {'{/Symbol \340}', '⋄'};          # Not in OpenGL
+  sym.copyright = {'{/Symbol \343}', '©'};
+  sym.lfloor = {'{/Symbol \353}', '⌊'};
+  sym.lceil = {'{/Symbol \351}', '⌈'};
+  sym.rfloor = {'{/Symbol \373}', '⌋'};
+  sym.rceil = {'{/Symbol \371}', '⌉'};
+  sym.int = {'{/Symbol \362}', '∫'};
 endfunction
 
 function retval = __do_enhanced_option__ (enhanced, obj)
exporting patch:
<fdopen>
