--- loncom/xml/lonplot.pm 2008/05/20 10:53:07 1.140 +++ loncom/xml/lonplot.pm 2008/05/27 10:40:30 1.143 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.140 2008/05/20 10:53:07 foxr Exp $ +# $Id: lonplot.pm,v 1.143 2008/05/27 10:40:30 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -819,6 +819,13 @@ sub parse_label { return $result; } +# +# Note that there are severe restrictions on font selection in the +# ps driver now. later in life Gnuplot is supposed to support +# utf-8 fonts in the posts script driver. When this happens, +# the tex entries with comments that include the word +# should be changed to print the correct glyphs rather than some +# approximation or fallback of what is intended. my %lookup = ( # Greek alphabet: @@ -888,31 +895,31 @@ my %lookup = '#134' => {'tex' => '{/Text \262}', 'web' => "\x{2020}"}, '#135' => {'tex' => '{/Text \263}', 'web' => "\x{2021}"}, '#136' => {'tex' => '\\\\^', 'web' => '\\\\^'}, - '#137' => {'tex' => '{/Text \275}', 'web' => "\x{2030}"}, - '#138' => {'tex' => 'S', 'web' => "\x{160}"}, # no S-caron in ps fonts. + '#137' => {'tex' => '%o', 'web' => "\x{2030}"}, # Per Mille + '#138' => {'tex' => 'S', 'web' => "\x{160}"}, # S-Caron '#139' => {'tex' => '<', 'web' => '<'}, - '#140' => {'tex' => '{/Text \352}', 'web' => "\x{152}"}, + '#140' => {'tex' => 'AE', 'web' => "\x{152}"}, # AE ligature '#145' => {'tex' => '\140', 'web' => "\x{2018}"}, '#146' => {'tex' => '\47', 'web' => "\x{2019}"}, - '#147' => {'tex' => '{/Text \252}', 'web' => "\x{201c}"}, - '#148' => {'tex' => '{/Text \315}', 'web' => '\\"'}, + '#147' => {'tex' => '\140\140', 'web' => "\x{201c}"}, # Left " + '#148' => {'tex' => '\47\47', 'web' => '\\"'}, # Right " '#149' => {'tex' => '{/Symbol \267}', 'web' => "\x{2022}"}, - '#150' => {'tex' => '{/Text \55}', 'web' => "\x{2013}"}, #Untested here en dash + '#150' => {'tex' => '{/Text \55}', 'web' => "\x{2013}"}, # en dash '#151' => {'tex' => '{/Symbol \55}', 'web' => "\x{2014}"}, # em dash - '#152' => {'tex' => '~', 'web' => '~'}, - '#153' => {'tex' => '{/Text \324}', 'web' => "\x{2122}"}, # trademark + '#152' => {'tex' => '\\\\~', 'web' => '\\\\~'}, + '#153' => {'tex' => '{/Symbol \324}', 'web' => "\x{2122}"}, # trademark # Accented letters, and other furreign language glyphs. '#154' => {'tex' => 's', 'web' => "\x{161}"}, # small s-caron no ps. '#155' => {'tex' => '>', 'web' => '\76'}, # > - '#156' => {'tex' => '{/Text \372}', 'web' => "\x{153}"}, # oe ligature. - '#159', => {'tex' => 'Y', 'web' => "\x{178}"}, # Y-umlaut - can't print + '#156' => {'tex' => '{/Text \366}', 'web' => "\x{153}"}, # oe ligature. + '#159', => {'tex' => 'Y', 'web' => "\x{178}"}, # Y-umlaut - can't print '(nbsp|#160)' => {'tex' => ' ', 'web' => ' '}, # non breaking space. '(iexcl|#161)' => {'tex' => '{/Text \241}', 'web' => "\x{a1}"}, # inverted ! '(cent|#162)' => {'tex' => '{/Text \242}', 'web' => "\x{a2}"}, # Cent currency. - '(pound|#163}' => {'tex' => '{/Text \243}', 'web' => "\x{a3}"}, # GB Pound currency. - '(curren|#164)' => {'tex' => '{/Text \250}', 'web' => "\x{a4}"}, # Generic currency symb. + '(pound|#163)' => {'tex' => '{/Text \243}', 'web' => "\x{a3}"}, # GB Pound currency. + '(curren|#164)' => {'tex' => '{/ZapfDingbats \161}','web' => "\x{a4}"}, # Generic currency symb. '(yen|#165)' => {'tex' => '{/Text \245}', 'web' => "\x{a5}"}, # Yen currency. '(brvbar|#166)' => {'tex' => '{/Symbol \174}', 'web' => "\x{a6}"}, # Broken vert bar no print. '(sect|#167)' => {'tex' => '{\247}', 'web' => "\x{a7}"}, # Section symbol. @@ -921,20 +928,20 @@ my %lookup = '(ordf|#170)' => {'tex' => '{/Text \343}', 'web' => "\x{aa}"}, # Feminine ordinal. '(laquo|#171)' => {'tex' => '{/Text \253}', 'web' => "\x{ab}"}, # << quotes. '(not|#172)' => {'tex' => '\254', 'web' => "\x{ac}"}, # Logical not. - '(shy|#173)' => {'tex' => '-', 'web' => "\x{ad}"}, # soft hyphen. + '(shy|#173)' => {'tex' => '\255', 'web' => "\x{ad}"}, # soft hyphen. '(reg|#174)' => {'tex' => '{/Symbol \342}', 'web' => "\x{ae}"}, # Registered tm. - '(macr|#175)' => {'tex' => '^{-}', 'web' => "\x{af}"}, # 'naked' macron (overbar). - '(deg|#176)' => {'tex' => '{/Text \312}', 'web' => "\x{b0}"}, # Degree symbo.. + '(macr|#175)' => {'tex' => '^{\255}', 'web' => "\x{af}"}, # 'naked' macron (overbar). + '(deg|#176)' => {'tex' => '{/Text \260}', 'web' => "\x{b0}"}, # Degree symbo..` '(plusmn|#177)' => {'tex' => '{/Symbol \261}', 'web' => "\x{b1}"}, # +/- symbol. '(sup2|#178)' => {'tex' => '^2', 'web' => "\x{b2}"}, # Superscript 2. '(sup3|#179)' => {'tex' => '^3', 'web' => "\x{b3}"}, # Superscript 3. - '(acute|#180)' => {'tex' => '{/Text \302}', 'web' => "\x{b4}"}, # 'naked' acute accent. + '(acute|#180)' => {'tex' => '{/Text \222}', 'web' => "\x{b4}"}, # 'naked' acute accent. '(micro|#181)' => {'tex' => '{/Symbol \155}', 'web' => "\x{b5}"}, # Micro (small mu). '(para|#182)' => {'tex' => '{/Text \266}', 'web' => "\x{b6}"}, # Paragraph symbol. - '(middot|#183)' => {'tex' => '^.', 'web' => "\x{b7}"}, # middle dot (maybe text 267 is better)? + '(middot|#183)' => {'tex' => '\267', 'web' => "\x{b7}"}, # middle dot '(cedil|#184)' => {'tex' => '\233', 'web' => "\x{b8}"}, # 'naked' cedilla. '(sup1|#185)' => {'tex' => '^1', 'web' => "\x{b9}"}, # superscript 1. - '(ordm|#186)' => {'tex' => '\353', 'web' => "\x{ba}"}, # masculine ordinal. + '(ordm|#186)' => {'tex' => '{\260}', 'web' => "\x{ba}"}, # masculine ordinal. '(raquo|#187)', => {'tex' => '\273', 'web' => "\x{bb}"}, # Right angle quotes. '(frac14|#188)' => {'tex' => '\274', 'web' => "\x{bc}"}, # 1/4. '(frac12|#189)' => {'tex' => '\275', 'web' => "\x{bd}"}, # 1/2. @@ -979,20 +986,20 @@ my %lookup = '(auml|#228)' => {'tex' => '\344', 'web' => "\x{e4}"}, # a umlaut '(aring|#229)' => {'tex' => '\345', 'web' => "\x{e5}"}, # a ring on top. '(aelig|#230)' => {'tex' => '\346', 'web' => "\x{e6}"}, # ae ligature. - '{ccedil|#231)' => {'tex' => '\347', 'web' => "\x{e7}"}, # C cedilla + '(ccedil|#231)' => {'tex' => '\347', 'web' => "\x{e7}"}, # C cedilla '(egrave|#232)' => {'tex' => '\350', 'web' => "\x{e8}"}, # e accent grave. '(eacute|#233)' => {'tex' => '\351', 'web' => "\x{e9}"}, # e accent acute. '(ecirc|#234)' => {'tex' => '\352', 'web' => "\x{ea}" }, # e circumflex. '(euml|#235)' => {'tex' => '\353', 'web' => "\x{eb}"}, # e umlaut. '(igrave|#236)' => {'tex' => '\354', 'web' => "\x{ec}"}, # i grave. - '(iacute|#237}' => {'tex' => '\355', 'web' => "\x{ed}"}, # i acute. - '(icirc|#238}' => {'tex' => '\356', 'web' => "\x{ee}"}, # i circumflex. + '(iacute|#237)' => {'tex' => '\355', 'web' => "\x{ed}"}, # i acute. + '(icirc|#238)' => {'tex' => '\356', 'web' => "\x{ee}"}, # i circumflex. '(iuml|#239)' => {'tex' => '\357', 'web' => "\x{ef}"}, # i umlaut. '(eth|#240)' => {'tex' => '\360', 'web' => "\x{f0}"}, # Icelandic eth. '(ntilde|#241)' => {'tex' => '\361', 'web' => "\x{f1}"}, # n tilde. '(ograve|#242)' => {'tex' => '\362', 'web' => "\x{f2}"}, # o grave. '(oacute|#243)' => {'tex' => '\363', 'web' => "\x{f3}"}, # o acute. - '(ocirc'|#244)' => {'tex' => '\364', 'web' => "\x{f4}"}, # o circumflex. + '(ocirc|#244)' => {'tex' => '\364', 'web' => "\x{f4}"}, # o circumflex. '(otilde|#245)' => {'tex' => '\365', 'web' => "\x{f5}"}, # o tilde. '(ouml|#246)' => {'tex' => '\366', 'web' => "\x{f6}"}, # o umlaut. '(divide|#247)' => {'tex' => '\367', 'web' => "\x{f7}"}, # division symbol @@ -1007,15 +1014,15 @@ my %lookup = # Latin extended A entities: - '(OElig|#338)' => {'tex' => '{/Text \352}', 'web' => "\x{152}"}, # OE ligature. - '(oelig|#339)' => {'tex' => '{/Text \372}', 'web' => "\x{153}"}, # oe ligature. + '(OElig|#338)' => {'tex' => '{/Text \326}', 'web' => "\x{152}"}, # OE ligature. + '(oelig|#339)' => {'tex' => '{/Text \366}', 'web' => "\x{153}"}, # oe ligature. '(Scaron|#352)' => {'tex' => 'S', 'web' => "\x{160}"}, # S caron no printable. '(scaron|#353)' => {'tex' => 's', 'web' => "\x{161}"}, # s caron no printable. '(Yuml|#376)' => {'tex' => 'Y', 'web' => "\x{178}"}, # Y umlaut - no printable. # Latin extended B. - '(fnof|#402)' => {'tex' =>'{/Symbol 246}', 'web' => "\x{192}"}, # f with little hook. + '(fnof|#402)' => {'tex' =>'{/Symbol \246}', 'web' => "\x{192}"}, # f with little hook. # Standalone accents: @@ -1065,7 +1072,7 @@ my %lookup = # Arrows of various types and directions. '(larr|#8592)' => {'tex' => '{/Symbol \254}', 'web' => "\x{2190}"}, # <-- - '(uarr|#8593}' => {'tex' => '{/Symbol \255}', 'web' => "\x{2191}"}, # up arrow. + '(uarr|#8593)' => {'tex' => '{/Symbol \255}', 'web' => "\x{2191}"}, # up arrow. '(rarr|#8594)' => {'tex' => '{/Symbol \256}', 'web' => "\x{2192}"}, # --> '(darr|#8595)' => {'tex' => '{/Symbol \257}', 'web' => "\x{2193}"}, # down arrow. '(harr|#8596)' => {'tex' => '{/Symbol \253}', 'web' => "\x{2194}"}, # <--> @@ -1101,7 +1108,40 @@ my %lookup = '(there4|#8756)' => {'tex' => '{/Symbol \134}', 'web' => "\x{2234}"}, # Therefore triple dots. '(sim|#8764)' => {'tex' => '~', 'web' => "\x{223c}"}, # Simlar to. '(cong|#8773)' => {'tex' => '{/Symbol \100}', 'web' => "\x{2245}"}, # Congruent to/with. - + '(asymp|#8776)' => {'tex' => '{/Symbol \278}', 'web' => "\x{2248}"}, # Asymptotic to. + '(ne|#8800)' => {'tex' => '{/Symbol \271}', 'web' => "\x{2260}"}, # not equal to. + '(equiv|#8801)' => {'tex' => '{/Symbol \272}', 'web' => "\x{2261}"}, # Equivalent to. + '(le|8804)' => {'tex' => '{/Symbol \243}', 'web' => "\x{2264}"}, # Less than or equal to. + '(ge|8805)' => {'tex' => '{/Symbol \263}', 'web' => "\x{2265}"}, # Greater than or equal to + '(sub|8834)' => {'tex' => '{/Symbol \314}', 'web' => "\x{2282}"}, # Subset of. + '(sup|8835)' => {'tex' => '{/Symbol \311}', 'web' => "\x{2283}"}, # Super set of. + '(nsub|8836)' => {'tex' => '{/Symbol \313}', 'web' => "\x{2284}"}, # not subset of. + '(sube|8838)' => {'tex' => '{/Symbol \315}', 'web' => "\x{2286}"}, # Subset or equal. + '(supe|8839)' => {'tex' => '{/Symbol \312}', 'web' => "\x{2287}"}, # Superset or equal + '(oplus|8853)' => {'tex' => '{/Symbol \305}', 'web' => "\x{2295}"}, # O with plus inside + '(otimes|8855)' => {'tex' => '{/Symbol \304}', 'web' => "\x{2297}"}, # O with times. + '(perp|8869)' => {'tex' => '{/Symbol \136}', 'web' => "\x{22a5}"}, # Perpendicular. + '(sdot|8901)' => {'tex' => '{/Symbol \227}', 'web' => "\x{22c5}"}, # Dot operator. + + # Misc. technical symbols: + + '(lceil|8698)' => {'tex' => '{/Symbol \351}', 'web' => "\x{2308}"}, # Left ceiling. + '(rceil|8969)' => {'tex' => '{/Symbol \371}', 'web' => "\x{2309}"}, # Right ceiling. + '(lfloor|8970)' => {'tex' => '{/Symbol \353}', 'web' => "\x{230a}"}, # Left floor. + '(rfloor|8971)' => {'tex' => '{/Symbol \373}', 'web' => "\x{230b}"}, # Right floor. + '(lang|9001)' => {'tex' => '{/Symbol \341}', 'web' => "\x{2329}"}, # Left angle bracket. + '(rang|9002)' => {'tex' => '{/Symbol \361}', 'web' => "\x{232a}"}, # Right angle bracket. + + # Gemoetric shapes. + + '(loz|9674)' => {'tex' => '{/Symbol \340}', 'web' => "\x{25ca}"}, # Lozenge. + + # Misc. symbols + + '(spades|9824)' => {'tex' => '{/Symbol \252}', 'web' => "\x{2660}"}, + '(clubs|9827)' => {'tex' => '{/Symbol \247}', 'web' => "\x{2663}"}, + '(hearts|9829)' => {'tex' => '{/Symbol \251}', 'web' => "\x{2665}"}, + '(diams|9830)' => {'tex' => '{/Symbol \250}', 'web' => "\x{2666}"} ); @@ -1537,6 +1577,8 @@ sub write_gnuplot_file { $gnuplot_input .= $fontsize; $gnuplot_input .= "\nset output \"/home/httpd/perl/tmp/". &unescape($filename).".eps\"\n"; + $gnuplot_input .= "set encoding iso_8859_1\n"; # Get access to extended font. + } # cartesian or polar plot? if (lc($Apache::lonplot::plot{'plottype'}) eq 'polar') {