Hi all, Is it that the code in the mathtext module looks ugly or is it just me not understanding it? Also, if anyone has some good online sources about parsing etc. on the net, I vwould realy appreciate it.
Considering the folowing code (picked on random, from mathtext.py) === def math_parse_s_ft2font(s, dpi, fontsize, angle=0): """ Parse the math expression s, return the (bbox, fonts) tuple needed to render it. fontsize must be in points return is width, height, fonts """ major, minor1, minor2, tmp, tmp = sys.version_info if major==2 and minor1==2: raise SystemExit('mathtext broken on python2.2. We hope to get this fixed soon') cacheKey = (s, dpi, fontsize, angle) s = s[1:-1] # strip the $ from front and back if math_parse_s_ft2font.cache.has_key(cacheKey): w, h, bfonts = math_parse_s_ft2font.cache[cacheKey] return w, h, bfonts.fonts.values() bakomaFonts = BakomaTrueTypeFonts() Element.fonts = bakomaFonts handler.clear() expression.parseString( s ) handler.expr.set_size_info(fontsize, dpi) # set the origin once to allow w, h compution handler.expr.set_origin(0, 0) xmin = min([e.xmin() for e in handler.symbols]) xmax = max([e.xmax() for e in handler.symbols]) ymin = min([e.ymin() for e in handler.symbols]) ymax = max([e.ymax() for e in handler.symbols]) # now set the true origin - doesn't affect with and height w, h = xmax-xmin, ymax-ymin # a small pad for the canvas size w += 2 h += 2 handler.expr.set_origin(0, h-ymax) Element.fonts.set_canvas_size(w,h) handler.expr.render() handler.clear() math_parse_s_ft2font.cache[cacheKey] = w, h, bakomaFonts return w, h, bakomaFonts.fonts.values() math_parse_s_ft2font.cache = {} ==== I don't understand, for example, what does the statement: expression.parseString( s ) do? "expression" is defined globaly, and is called (that is - its method) only once in the above definition of the function, but I don't understand - what does that particular line do?!? ------ Regarding the unicode support in mathtext, mathtext currently uses the folowing dictionary for getting the glyph info out of the font files: latex_to_bakoma = { r'\oint' : ('cmex10', 45), r'\bigodot' : ('cmex10', 50), r'\bigoplus' : ('cmex10', 55), r'\bigotimes' : ('cmex10', 59), r'\sum' : ('cmex10', 51), r'\prod' : ('cmex10', 24), ... } I managed to build the following dictionary(little more left to be done): tex_to_unicode = { r'\S' : u'\u00a7', r'\P' : u'\u00b6', r'\Gamma' : u'\u0393', r'\Delta' : u'\u0394', r'\Theta' : u'\u0398', r'\Lambda' : u'\u039b', r'\Xi' : u'\u039e', r'\Pi' : u'\u03a0', r'\Sigma' : u'\u03a3', r'\Upsilon' : u'\u03a5', r'\Phi' : u'\u03a6', r'\Psi' : u'\u03a8', r'\Omega' : u'\u03a9', r'\alpha' : u'\u03b1', r'\beta' : u'\u03b2', r'\gamma' : u'\u03b3', r'\delta' : u'\u03b4', r'\varepsilon' : u'\u03b5', r'\zeta' : u'\u03b6', r'\eta' : u'\u03b7', r'\vartheta' : u'\u03b8', r'\iota' : u'\u03b9', r'\kappa' : u'\u03ba', r'\lambda' : u'\u03bb', r'\mu' : u'\u03bc', r'\nu' : u'\u03bd', r'\xi' : u'\u03be', r'\pi' : u'\u03c0', r'\varrho' : u'\u03c1', r'\varsigma' : u'\u03c2', r'\sigma' : u'\u03c3', r'\tau' : u'\u03c4', r'\upsilon' : u'\u03c5', r'\varphi' : u'\u03c6', r'\chi' : u'\u03c7', r'\psi' : u'\u03c8', r'\omega' : u'\u03c9', r'\ell' : u'\u2113', r'\wp' : u'\u2118', r'\Omega' : u'\u2126', r'\Re' : u'\u211c', r'\Im' : u'\u2111', r'\aleph' : u'\u05d0', r'\aleph' : u'\u2135', r'\spadesuit' : u'\u2660', r'\heartsuit' : u'\u2661', r'\diamondsuit' : u'\u2662', r'\clubsuit' : u'\u2663', r'\flat' : u'\u266d', r'\natural' : u'\u266e', r'\sharp' : u'\u266f', r'\leftarrow' : u'\u2190', r'\uparrow' : u'\u2191', r'\rightarrow' : u'\u2192', r'\downarrow' : u'\u2193', r'\Rightarrow' : u'\u21d2', r'\Leftrightarrow' : u'\u21d4', r'\leftrightarrow' : u'\u2194', r'\updownarrow' : u'\u2195', r'\forall' : u'\u2200', r'\exists' : u'\u2203', r'\emptyset' : u'\u2205', r'\Delta' : u'\u2206', r'\nabla' : u'\u2207', r'\in' : u'\u2208', r'\ni' : u'\u220b', r'\prod' : u'\u220f', r'\coprod' : u'\u2210', r'\sum' : u'\u2211', r'-' : u'\u2212', r'\mp' : u'\u2213', r'/' : u'\u2215', r'\ast' : u'\u2217', r'\circ' : u'\u2218', r'\bullet' : u'\u2219', r'\propto' : u'\u221d', r'\infty' : u'\u221e', r'\mid' : u'\u2223', r'\wedge' : u'\u2227', r'\vee' : u'\u2228', r'\cap' : u'\u2229', r'\cup' : u'\u222a', r'\int' : u'\u222b', r'\oint' : u'\u222e', r':' : u'\u2236', r'\sim' : u'\u223c', r'\wr' : u'\u2240', r'\simeq' : u'\u2243', r'\approx' : u'\u2248', r'\asymp' : u'\u224d', r'\equiv' : u'\u2261', r'\leq' : u'\u2264', r'\geq' : u'\u2265', r'\ll' : u'\u226a', r'\gg' : u'\u226b', r'\prec' : u'\u227a', r'\succ' : u'\u227b', r'\subset' : u'\u2282', r'\supset' : u'\u2283', r'\subseteq' : u'\u2286', r'\supseteq' : u'\u2287', r'\uplus' : u'\u228e', r'\sqsubseteq' : u'\u2291', r'\sqsupseteq' : u'\u2292', r'\sqcap' : u'\u2293', r'\sqcup' : u'\u2294', r'\oplus' : u'\u2295', r'\ominus' : u'\u2296', r'\otimes' : u'\u2297', r'\oslash' : u'\u2298', r'\odot' : u'\u2299', r'\vdash' : u'\u22a2', r'\dashv' : u'\u22a3', r'\top' : u'\u22a4', r'\bot' : u'\u22a5', r'\bigwedge' : u'\u22c0', r'\bigvee' : u'\u22c1', r'\bigcap' : u'\u22c2', r'\bigcup' : u'\u22c3', r'\diamond' : u'\u22c4', r'\cdot' : u'\u22c5', r'\lceil' : u'\u2308', r'\rceil' : u'\u2309', r'\lfloor' : u'\u230a', r'\rfloor' : u'\u230b', r'\langle' : u'\u27e8', r'\rangle' : u'\u27e9', r'\dag' : u'\u2020', r'\ddag' : u'\u2021', } unicode_to_tex is straight forward. Am I on the right track? What should I do next? I also noticed that some TeX commands (commands in the sense that they can have arguments enclosed in brackets {}) are defined as only symbols: \sqrt alone, for example, displays just the begining of the square root:√, and \sqrt{123} triggers an error. That's it for now Thanks in advance, Edin _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel