diff -u /tmp/gtkmathview-0.2.4/src/MathEngine.cc src/MathEngine.cc --- /tmp/gtkmathview-0.2.4/src/MathEngine.cc Mon Mar 19 07:48:47 2001 +++ src/MathEngine.cc Sun May 13 12:25:54 2001 @@ -140,6 +140,37 @@ } bool +MathEngine::Load(mDOMDocRef d) +{ + assert(d != NULL); + + Clock perf; + perf.Start(); + MathMLParser *parser = new MathMLParser(d); + document = parser->Parse(); + perf.Stop(); + logger(LOG_INFO, "parsing time: %dms", perf()); + delete parser; + + if (document != NULL) { + perf.Start(); + document->Normalize(); + perf.Stop(); + logger(LOG_INFO, "normalization time: %dms", perf()); + + root = document->GetRoot(); + assert(root != NULL); + + Setup(); + + return true; + } else + logger(LOG_WARNING, "error while parsing document 0x%x", d); + + return false; +} + +bool MathEngine::Load(const char* fileName) { assert(fileName != NULL); diff -u /tmp/gtkmathview-0.2.4/src/MathEngine.hh src/MathEngine.hh --- /tmp/gtkmathview-0.2.4/src/MathEngine.hh Wed Dec 13 12:18:40 2000 +++ src/MathEngine.hh Sun May 13 12:21:23 2001 @@ -40,6 +40,7 @@ void Init(class DrawingArea*, class FontManager*); bool Load(const char*); + bool Load(mDOMDocRef); void Unload(void); void Setup(void); diff -u /tmp/gtkmathview-0.2.4/src/Parser.cc src/Parser.cc --- /tmp/gtkmathview-0.2.4/src/Parser.cc Tue Nov 7 05:01:47 2000 +++ src/Parser.cc Sun May 13 12:16:36 2001 @@ -41,6 +41,12 @@ doc = NULL; } +MathMLParser::MathMLParser(mDOMDocRef tree) +{ + fileName = NULL; + doc = tree ; +} + MathMLParser::~MathMLParser() { } @@ -48,7 +54,9 @@ MathMLDocument* MathMLParser::Parse() { - doc = MathMLParseFile(fileName, false); + if ( fileName && !doc ) + doc = MathMLParseFile(fileName, false); + if (doc == NULL) return NULL; MathMLDocument* document = new MathMLDocument(doc); diff -u /tmp/gtkmathview-0.2.4/src/Parser.hh src/Parser.hh --- /tmp/gtkmathview-0.2.4/src/Parser.hh Tue Nov 7 05:01:48 2000 +++ src/Parser.hh Sun May 13 12:16:21 2001 @@ -33,6 +33,7 @@ class MathMLParser { public: MathMLParser(const char*); + MathMLParser(mDOMDocRef); ~MathMLParser(); class MathMLDocument* Parse(void); diff -u /tmp/gtkmathview-0.2.4/src/gtkmathview.cc src/gtkmathview.cc --- /tmp/gtkmathview-0.2.4/src/gtkmathview.cc Wed Dec 13 12:18:40 2000 +++ src/gtkmathview.cc Sun May 13 12:23:32 2001 @@ -707,6 +707,26 @@ } extern "C" gboolean +gtk_math_view_load_tree(GtkMathView* math_view, mDOMDocRef d) +{ + g_return_val_if_fail(math_view != NULL, FALSE); + g_return_val_if_fail(math_view->area != NULL, FALSE); + g_return_val_if_fail(d != NULL, FALSE); + g_return_val_if_fail(math_view->interface != NULL, FALSE); + + bool res = math_view->interface->Load(d); + if (!res) return FALSE; + + math_view->interface->Layout(); + + setup_adjustments(math_view); + + paint_widget(math_view); + + return TRUE; +} + +extern "C" gboolean gtk_math_view_load(GtkMathView* math_view, const gchar* name) { g_return_val_if_fail(math_view != NULL, FALSE); diff -u /tmp/gtkmathview-0.2.4/src/gtkmathview.h src/gtkmathview.h --- /tmp/gtkmathview-0.2.4/src/gtkmathview.h Wed Jan 10 05:28:41 2001 +++ src/gtkmathview.h Sun May 13 12:24:48 2001 @@ -101,6 +101,7 @@ GtkType gtk_math_view_get_type(void); GtkWidget* gtk_math_view_new(GtkAdjustment*, GtkAdjustment*); gboolean gtk_math_view_load(GtkMathView*, const gchar*); + gboolean gtk_math_view_load_tree(GtkMathView*, mDOMDocRef); void gtk_math_view_unload(GtkMathView*); mDOMNodeRef gtk_math_view_get_selection(GtkMathView*); void gtk_math_view_set_selection(GtkMathView*, mDOMNodeRef);