]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc
ocaml 3.09 transition
[helm.git] / helm / DEVEL / mathml_editor / ocaml / c_mathml_editor.cc
index 8c305ed39d2b2ca05538935bb3286d1f0f2374e1..25759823ba05e8351b9d8b6ab6347121bde9a782 100644 (file)
@@ -1,34 +1,36 @@
-/* Copyright (C) 2002-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                    2003, Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax
+/* This file is part of EdiTeX, an editor of mathematical
+ * expressions based on TeX syntax.
  * 
- * EdiTeX is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
+ *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * EdiTeX is distributed in the hope that it will be useful,
+ * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with EdiTeX; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the EdiTeX World-Wide-Web page,
- * http://helm.cs.unibo.it/editex, or send a mail to
- * <luca.padovani@cs.unibo.it>
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * For more information, please visit the project's home page
+ * http://helm.cs.unibo.it/editex/
+ * or send an email to <lpadovan@cs.unibo.it>
  */
 
 #include <GdomeSmartDOMXSLT.hh>
+#include <cassert>
 
 #include "ALogger.hh"
 #include "TDictionary.hh"
 #include "CMathMLFactoryXSLT.hh"
 #include "TPushLexer.hh"
+#include "LPushLexer.hh"
 #include "TPushParser.hh"
 
 class CCallbackLogger : public ALogger
@@ -59,7 +61,7 @@ CCallbackLogger::message(Level l, const std::string& s)
 
 struct Editor
 {
-  Editor(const DOM::Document&, const DOM::Document&, const DOM::Document&, void (*)(int, const char*, void*), void*);
+  Editor(const char*, const char*, const char*, void (*)(int, const char*, void*), void*, bool);
   ~Editor();
 
   ALogger*        logger;
@@ -71,18 +73,25 @@ struct Editor
   APushLexer*     lexer;
 };
 
-Editor::Editor(const DOM::Document& dict, const DOM::Document& mml, const DOM::Document& tex,
-              void (*cb)(int, const char*, void*), void* data)
+Editor::Editor(const char* dict_uri, const char* mml_uri, const char* tex_uri,
+              void (*cb)(int, const char*, void*), void* data, bool alt)
 {
+  assert(dict_uri);
+  assert(mml_uri);
+  assert(tex_uri);
   assert(cb);
   logger = new CCallbackLogger(cb, data);
   dictionary = new TDictionary(*logger);
-  dictionary->load(DOM::Document(dict));
+  dictionary->load(dict_uri);
+  DOM::DOMImplementation di;
+  DOM::Document mml = di.createDocumentFromURI(mml_uri);
+  DOM::Document tex = di.createDocumentFromURI(tex_uri);
   tml_mml = new DOMX::XSLTStylesheet(mml);
   tml_tex = new DOMX::XSLTStylesheet(tex);
   factory = new CMathMLFactoryXSLT(*logger, *tml_mml);
   parser = new TPushParser(*logger, *factory, *dictionary);
-  lexer = new TPushLexer(*logger, *parser);
+  if (alt) lexer = new LPushLexer(*logger, *parser);
+  else lexer = new TPushLexer(*logger, *parser);
 }
 
 Editor::~Editor()
@@ -96,16 +105,33 @@ Editor::~Editor()
   delete logger;
 }
 
+extern "C" const char*
+c_mathml_editor_get_default_dictionary_path()
+{
+  return TDictionary::getDefaultDictionaryPath().c_str();
+}
+
+extern "C" const char*
+c_mathml_editor_get_default_mathml_stylesheet_path()
+{
+  return AMathMLFactory::getDefaultMathMLStylesheetPath().c_str();
+}
+
+extern "C" const char*
+c_mathml_editor_get_default_tex_stylesheet_path()
+{
+  return AMathMLFactory::getDefaultTeXStylesheetPath().c_str();
+}
+
 extern "C" Editor*
-c_mathml_editor_new(GdomeDocument* dictionary,
-                   GdomeDocument* tml_mml,
-                   GdomeDocument* tml_tex,
+c_mathml_editor_new(bool alt,
+                   const char* dictionary_uri,
+                   const char* tml_mml_uri,
+                   const char* tml_tex_uri,
                    void (*log_message_cb)(int, const char*, void*),
                    void* user_data)
 {
-  return new Editor(DOM::Document(dictionary),
-                   DOM::Document(tml_mml),
-                   DOM::Document(tml_tex), log_message_cb, user_data);
+  return new Editor(dictionary_uri, tml_mml_uri, tml_tex_uri, log_message_cb, user_data, alt);
 }
 
 extern "C" void
@@ -172,6 +198,7 @@ extern "C" void
 c_mathml_editor_reset(Editor* editor)
 {
   assert(editor);
+  editor->lexer->reset();
   editor->parser->reset();
 }