comparison libinterp/corefcn/graphics.cc @ 17269:5b088598df1d

Add simple TeX parser based on flex/bison. * libinterp/corefcn/oct-tex-lexer.ll, libinterp/corefcn/oct-tex-pareser.yy: New files. * libinterp/Makefile.am (BUILT_SOURCES): Add oct-tex-lexer.cc and oct-tex-parser.cc. * libinterp/corefcn/modules.mk (corefcn/oct-tex-lexer.cc, corefcn/oct-tex-parser.h): New rules. * libinterp/corefcn/txt-eng-ft.h (ft_render::text_to_pixels, ft_render::get_extent): Add interpreter argument. * libinterp/corefcn/txt-eng-ft.cc (ft_render::text_to_pixels, ft_render::get_extent): Likewise. Use text_parser::parse(). * libinterp/corefcn/gl-render.cc (opengl_renderer::text_to_pixels): Use new interpreter argument. * libinterp/corefcn/graphics.cc (axes::properties::get_ticklabel_extents): Likewise. (uicontrol::properties::update_text_extent): Use text_parser::parse. * libinterp/corefcn/txt-eng.h (memory, string, caseless-str.h, dMatrix.h): New includes. (class text_element_subscript): Renamed from text_subscript_element. (class text_element_supserscript): Renamed from text_superscript_element. (class text_element_symbol, class text_element_fontstyle, class text_element_fontname, class text_element_fontsize, class text_element_color): New classes. (text_element_list::text_element_list(text_element*)): New constructor. (text_element_subscript::text_element_subscript(text_element*), text_element_subscript::text_element::subscript(char)): New constructors. (text_element_subscript::elem): New member. (text_element_subscript::get_element): New method. Returns it. (text_element_subscript::~text_element_subscript): New destructor. Delete it. (text_element_subscript::text_element_subscript()): Make default constructor private. (text_element_superscript::text_element_superscript(text_element*), text_element_superscript::text_element::superscript(char)): New constructors. (text_element_superscript::elem): New member. (text_element_superscript::get_element): New method. Returns it. (text_element_superscript::~text_element_superscript): New destructor. Delete it. (text_element_superscript::text_element_superscript()): Make default constructor private. (text_processor::visit(text_element_symbol), text_processor::visit(text_element_fontstyle), text_processor::visit(text_element_fontname), text_processor::visit(text_element_fontsize), text_processor::visit(text_element_color)): New methods. (text_parser::parse): New static method. (class text_parser_tex): New class.
author Michael Goffioul <michael.goffioul@gmail.com>
date Sun, 18 Aug 2013 16:36:38 -0400
parents 92effb035b97
children bc924baa2c4e
comparison
equal deleted inserted replaced
17268:1c21f264d26f 17269:5b088598df1d
6290 { 6290 {
6291 std::string label (ticklabels(i)); 6291 std::string label (ticklabels(i));
6292 label.erase (0, label.find_first_not_of (" ")); 6292 label.erase (0, label.find_first_not_of (" "));
6293 label = label.substr (0, label.find_last_not_of (" ")+1); 6293 label = label.substr (0, label.find_last_not_of (" ")+1);
6294 #ifdef HAVE_FREETYPE 6294 #ifdef HAVE_FREETYPE
6295 ext = text_renderer.get_extent (label); 6295 ext = text_renderer.get_extent (label, 0.0, "none");
6296 wmax = std::max (wmax, ext(0)); 6296 wmax = std::max (wmax, ext(0));
6297 hmax = std::max (hmax, ext(1)); 6297 hmax = std::max (hmax, ext(1));
6298 #else 6298 #else
6299 // FIXME: find a better approximation 6299 // FIXME: find a better approximation
6300 int len = label.length (); 6300 int len = label.length ();
7571 Matrix box; 7571 Matrix box;
7572 7572
7573 // FIXME: parsed content should be cached for efficiency 7573 // FIXME: parsed content should be cached for efficiency
7574 // FIXME: support multiline text 7574 // FIXME: support multiline text
7575 7575
7576 elt = text_parser_none ().parse (get_string_string ()); 7576 elt = text_parser::parse (get_string_string (), "none");
7577 #ifdef HAVE_FONTCONFIG 7577 #ifdef HAVE_FONTCONFIG
7578 text_renderer.set_font (get_fontname (), 7578 text_renderer.set_font (get_fontname (),
7579 get_fontweight (), 7579 get_fontweight (),
7580 get_fontangle (), 7580 get_fontangle (),
7581 get_fontsize ()); 7581 get_fontsize ());