From dcc5749e8534ee245bc89e73f4fb6ca1b99c5fa6 Mon Sep 17 00:00:00 2001 From: no author Date: Mon, 7 Oct 2002 16:25:56 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'initial'. --- ...lgtk-20000829_gtkmathview-0.1.0-1.i386.rpm | Bin 0 -> 16862 bytes .../lablgtk-20000829_gtkmathview-0.1.0-1.spec | 25 + ...blgtk-20000829_gtkmathview-0.1.0-1.src.rpm | Bin 0 -> 7616 bytes .../lablgtk-20000829_gtkmathview-0.1.0.tar.gz | Bin 0 -> 5777 bytes .../.depend | 4 + .../COPYING | 11 + .../Makefile | 98 + .../config.make | 15 + .../configure.mk | 53 + .../gMathView.ml | 50 + .../gtkMathView.ml | 61 + .../gtk_mathview.ml | 1 + .../ml_gtk_mathview.c | 55 + .../test/Makefile | 36 + .../test/test.ml | 141 ++ .../test/test.xml | 123 ++ .../.cvsignore | 1 + .../.depend | 4 + .../COPYING | 11 + .../Makefile | 109 + .../configure.mk | 59 + .../gMathView.ml | 80 + .../gtkMathView.ml | 118 + .../gtk_mathview.ml | 1 + .../minidom/.cvsignore | 1 + .../minidom/Makefile | 51 + .../minidom/minidom.ml | 61 + .../minidom/minidom.mli | 50 + .../minidom/ml_minidom.c | 288 +++ .../minidom/ml_minidom.h | 18 + .../minidom/ominidom.ml | 156 ++ .../minidom/ominidom.mli | 64 + .../minidom/test.ml | 84 + .../minidom/test.xml | 505 +++++ .../ml_gtk_mathview.c | 159 ++ .../test/.cvsignore | 1 + .../test/Makefile | 45 + .../test/t1.config | 3 + .../test/test.ml | 297 +++ .../test/test.xml | 123 ++ helm/cgi/mkindex.pl | 93 + .../local/etc/helm/configuration.dtd | 34 + .../local/etc/helm/configuration.xml | 22 + .../local/lib/helm/configuration.pl | 35 + helm/dtd/annotations.dtd | 29 + helm/dtd/cic.dtd | 176 ++ helm/dtd/cicobject.dtd | 97 + helm/dtd/isoamsa.ent | 173 ++ helm/dtd/isoamsb.ent | 146 ++ helm/dtd/isoamsc.ent | 49 + helm/dtd/isoamsn.ent | 117 + helm/dtd/isoamso.ent | 77 + helm/dtd/isoamsr.ent | 205 ++ helm/dtd/isobox.ent | 67 + helm/dtd/isocyr1.ent | 94 + helm/dtd/isocyr2.ent | 53 + helm/dtd/isodia.ent | 41 + helm/dtd/isogrk3.ent | 70 + helm/dtd/isolat1.ent | 89 + helm/dtd/isolat2.ent | 148 ++ helm/dtd/isomfrk.ent | 79 + helm/dtd/isomopf.ent | 53 + helm/dtd/isomscr.ent | 79 + helm/dtd/isonum.ent | 106 + helm/dtd/isopub.ent | 111 + helm/dtd/isotech.ent | 183 ++ helm/dtd/mathml2-qname-1.mod | 268 +++ helm/dtd/mathml2.dtd | 1948 ++++++++++++++++ helm/dtd/maththeory.dtd | 73 + helm/dtd/mmlalias.ent | 529 +++++ helm/dtd/mmlextra.ent | 134 ++ helm/dtd/provastruct.theory.xml | 158 ++ helm/dtd/theoryobject.dtd | 14 + helm/header/getheader.xml | 21 + helm/header/provaurl | 1 + helm/header/provaurl1 | 2 + helm/header/setheader.xsl | 33 + helm/http_getter/cadet | 9 + helm/http_getter/http_getter.pl | 329 +++ helm/interface/.depend | 92 + helm/interface/ISTRUZIONI | 22 + helm/interface/Makefile | 180 ++ helm/interface/NON_VA | 29 + helm/interface/PER_FARLO_ANDARE | 2 + helm/interface/PER_FARLO_ANDARE_TCSH | 4 + helm/interface/PER_FARLO_ANDARE_TCSH_D01 | 4 + helm/interface/README | 44 + helm/interface/TEMPI | 214 ++ helm/interface/WGET | 3 + helm/interface/annotation2Xml.ml | 190 ++ helm/interface/annotationParser.ml | 30 + helm/interface/annotationParser2.ml | 103 + helm/interface/cadet | 13 + helm/interface/cic.ml | 134 ++ helm/interface/cic2Xml.ml | 217 ++ helm/interface/cicAnnotationHinter.ml | 337 +++ helm/interface/cicCache.ml | 187 ++ helm/interface/cicCache.mli | 56 + helm/interface/cicCooking.ml | 182 ++ helm/interface/cicCooking.mli | 6 + helm/interface/cicFindParameters.ml | 137 ++ helm/interface/cicParser.ml | 69 + helm/interface/cicParser.mli | 19 + helm/interface/cicParser2.ml | 250 +++ helm/interface/cicParser2.mli | 32 + helm/interface/cicParser3.ml | 515 +++++ helm/interface/cicParser3.mli | 42 + helm/interface/cicPp.ml | 183 ++ helm/interface/cicPp.mli | 16 + helm/interface/cicReduction.ml | 253 +++ helm/interface/cicReduction.mli | 9 + helm/interface/cicSubstitution.ml | 115 + helm/interface/cicSubstitution.mli | 3 + helm/interface/cicTypeChecker.ml | 1200 ++++++++++ helm/interface/cicTypeChecker.mli | 9 + helm/interface/cicXPath.ml | 51 + .../cicXPath.prima_degli_identificatori.ml | 102 + helm/interface/configuration.ml | 78 + helm/interface/deannotate.ml | 69 + helm/interface/experiment.ml | 84 + helm/interface/fix_params.ml | 49 + helm/interface/getter.ml | 143 ++ helm/interface/getter.mli | 25 + helm/interface/gmon.out | Bin 0 -> 1421 bytes helm/interface/http_getter/http_getter.pl | 272 +++ helm/interface/http_getter/http_getter.pl2 | 199 ++ helm/interface/isterix | 12 + helm/interface/javacore15005.txt | 195 ++ helm/interface/javacore15021.txt | 195 ++ helm/interface/latinize.pl | 10 + helm/interface/mkindex.sh | 3 + helm/interface/mml.dtd | 55 + helm/interface/mml.ml | 11 + helm/interface/mmlinterface.ml | 653 ++++++ helm/interface/mmlinterface.opt.saved | Bin 0 -> 2002374 bytes helm/interface/pxpUriResolver.ml | 101 + helm/interface/reduction.ml | 70 + helm/interface/servers.txt | 2 + helm/interface/servers.txt.example | 2 + helm/interface/servers.txt.universita | 2 + helm/interface/theory.ml | 9 + helm/interface/theoryCache.ml | 32 + helm/interface/theoryParser.ml | 29 + helm/interface/theoryParser2.ml | 41 + helm/interface/theoryTypeChecker.ml | 29 + helm/interface/toglie_helm_xref.pl | 8 + helm/interface/toglie_helm_xref.sh | 5 + helm/interface/uriManager.ml | 86 + .../uriManager.ml.implementazione_banale | 18 + .../uriManager.ml.implementazione_doppia | 86 + .../uriManager.ml.implementazione_semplice | 39 + helm/interface/uriManager.mli | 15 + helm/interface/uris_of_filenames.pl | 15 + helm/interface/urls_of_uris.db | Bin 0 -> 1261564 bytes helm/interface/xaland-cpp/xaland.cpp | 207 ++ helm/interface/xaland-java/rompi.class | Bin 0 -> 732 bytes helm/interface/xaland-java/rompi.java | 12 + helm/interface/xaland-java/sped.class | Bin 0 -> 1142 bytes helm/interface/xaland-java/sped.java | 28 + helm/interface/xaland-java/xaland.class | Bin 0 -> 3509 bytes helm/interface/xaland-java/xaland.java | 89 + .../xaland.java.prima_del_loro_baco | 85 + ...d.java.prima_del_loro_baco_ma_dopo_i_reset | 87 + helm/interface/xaland.class | Bin 0 -> 3509 bytes helm/interface/xml.ml | 72 + helm/interface/xml.mli | 35 + helm/interface/xsltProcessor.ml | 64 + helm/pacchetti/Makefile | 76 + helm/scripts/Makefile | 18 + helm/scripts/makeit | 11 + helm/scripts/start-tomcat | 8 + helm/scripts/start-tomcat-debug | 2 + helm/scripts/stop-tomcat-debug | 2 + helm/scripts/template.cshrc | 69 + helm/scripts/template.rc | 61 + helm/style/annotatedcont.xsl | 73 + helm/style/annotatedcont.xsl.csc | 66 + helm/style/annotatedpres.xsl | 34 + helm/style/basic.xsl | 253 +++ helm/style/content.xsl | 274 +++ helm/style/content.xsl.csc | 258 +++ helm/style/content_senza_tipi.13.9.00.xsl | 215 ++ helm/style/content_to_html.xsl | 657 ++++++ helm/style/html_init.xsl | 259 +++ helm/style/html_reals.xsl | 234 ++ helm/style/html_set.xsl | 463 ++++ helm/style/mml2mmlv1_0.xsl | 1957 +++++++++++++++++ helm/style/mml2mmlv1_0_original.xsl | 1848 ++++++++++++++++ helm/style/mmlextension.xsl | 1382 ++++++++++++ helm/style/mmlextension_andrea.xsl | 1052 +++++++++ helm/style/mmlextension_irene.xsl | 868 ++++++++ helm/style/objcontent.xsl | 232 ++ helm/style/objcontent.xsl.csc | 223 ++ helm/style/objcontent_old.xsl | 220 ++ helm/style/params.xsl | 191 ++ helm/style/proof31-10-00.xsl | 210 ++ helm/style/proofs.xsl | 243 ++ helm/style/reals.xsl | 277 +++ helm/style/ricerca.xsl | 91 + helm/style/rootcontent.xsl | 30 + helm/style/rootcontent_withproofs.xsl | 29 + helm/style/roottheory.xsl | 22 + helm/style/set.xsl | 487 ++++ helm/style/theory_content.xsl | 57 + helm/style/theory_pres.xsl | 34 + helm/xmltheory/Coq_v2theoryxml/.depend | 0 helm/xmltheory/Coq_v2theoryxml/Makefile | 17 + .../Coq_v2theoryxml/coq_v2theoryxml.ml | 176 ++ helm/xmltheory/FakeCoq_vo2xml/README | 3 + helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml | 4 + helm/xmltheory/XmlTheory/.depend | 8 + helm/xmltheory/XmlTheory/COME_COMPILARE | 5 + helm/xmltheory/XmlTheory/Make | 5 + helm/xmltheory/XmlTheory/Makefile | 165 ++ helm/xmltheory/XmlTheory/README | 78 + helm/xmltheory/XmlTheory/XmlTheory.v | 15 + helm/xmltheory/XmlTheory/iXml.ml | 53 + helm/xmltheory/XmlTheory/iXml.mli | 7 + helm/xmltheory/XmlTheory/xmltheoryentries.ml | 371 ++++ helm/xmltheory/maththeory.dtd | 78 + helm/xsltd/Makefile | 29 + helm/xsltd/cadet | 11 + helm/xsltd/isterix | 10 + helm/xsltd/xaland-cpp/xaland.cpp | 207 ++ helm/xsltd/xaland-java/rompi.class | Bin 0 -> 732 bytes helm/xsltd/xaland-java/rompi.java | 12 + helm/xsltd/xaland-java/sped.class | Bin 0 -> 1142 bytes helm/xsltd/xaland-java/sped.java | 28 + helm/xsltd/xaland-java/xaland.class | Bin 0 -> 3509 bytes helm/xsltd/xaland-java/xaland.java | 91 + .../xaland.java.prima_del_loro_baco | 85 + ...d.java.prima_del_loro_baco_ma_dopo_i_reset | 87 + helm/xsltd/xaland-java2/xaland2.class | Bin 0 -> 3773 bytes helm/xsltd/xaland-java2/xaland2.java | 134 ++ 234 files changed, 31447 insertions(+) create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.spec create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.src.rpm create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml create mode 100644 helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml create mode 100755 helm/cgi/mkindex.pl create mode 100644 helm/configuration/local/etc/helm/configuration.dtd create mode 100644 helm/configuration/local/etc/helm/configuration.xml create mode 100644 helm/configuration/local/lib/helm/configuration.pl create mode 100644 helm/dtd/annotations.dtd create mode 100644 helm/dtd/cic.dtd create mode 100644 helm/dtd/cicobject.dtd create mode 100644 helm/dtd/isoamsa.ent create mode 100644 helm/dtd/isoamsb.ent create mode 100644 helm/dtd/isoamsc.ent create mode 100644 helm/dtd/isoamsn.ent create mode 100644 helm/dtd/isoamso.ent create mode 100644 helm/dtd/isoamsr.ent create mode 100644 helm/dtd/isobox.ent create mode 100644 helm/dtd/isocyr1.ent create mode 100644 helm/dtd/isocyr2.ent create mode 100644 helm/dtd/isodia.ent create mode 100644 helm/dtd/isogrk3.ent create mode 100644 helm/dtd/isolat1.ent create mode 100644 helm/dtd/isolat2.ent create mode 100644 helm/dtd/isomfrk.ent create mode 100644 helm/dtd/isomopf.ent create mode 100644 helm/dtd/isomscr.ent create mode 100644 helm/dtd/isonum.ent create mode 100644 helm/dtd/isopub.ent create mode 100644 helm/dtd/isotech.ent create mode 100644 helm/dtd/mathml2-qname-1.mod create mode 100644 helm/dtd/mathml2.dtd create mode 100644 helm/dtd/maththeory.dtd create mode 100644 helm/dtd/mmlalias.ent create mode 100644 helm/dtd/mmlextra.ent create mode 100644 helm/dtd/provastruct.theory.xml create mode 100644 helm/dtd/theoryobject.dtd create mode 100644 helm/header/getheader.xml create mode 100644 helm/header/provaurl create mode 100644 helm/header/provaurl1 create mode 100644 helm/header/setheader.xsl create mode 100755 helm/http_getter/cadet create mode 100755 helm/http_getter/http_getter.pl create mode 100644 helm/interface/.depend create mode 100644 helm/interface/ISTRUZIONI create mode 100644 helm/interface/Makefile create mode 100644 helm/interface/NON_VA create mode 100644 helm/interface/PER_FARLO_ANDARE create mode 100644 helm/interface/PER_FARLO_ANDARE_TCSH create mode 100644 helm/interface/PER_FARLO_ANDARE_TCSH_D01 create mode 100644 helm/interface/README create mode 100644 helm/interface/TEMPI create mode 100644 helm/interface/WGET create mode 100644 helm/interface/annotation2Xml.ml create mode 100644 helm/interface/annotationParser.ml create mode 100644 helm/interface/annotationParser2.ml create mode 100755 helm/interface/cadet create mode 100644 helm/interface/cic.ml create mode 100644 helm/interface/cic2Xml.ml create mode 100644 helm/interface/cicAnnotationHinter.ml create mode 100644 helm/interface/cicCache.ml create mode 100644 helm/interface/cicCache.mli create mode 100644 helm/interface/cicCooking.ml create mode 100644 helm/interface/cicCooking.mli create mode 100644 helm/interface/cicFindParameters.ml create mode 100644 helm/interface/cicParser.ml create mode 100644 helm/interface/cicParser.mli create mode 100644 helm/interface/cicParser2.ml create mode 100644 helm/interface/cicParser2.mli create mode 100644 helm/interface/cicParser3.ml create mode 100644 helm/interface/cicParser3.mli create mode 100644 helm/interface/cicPp.ml create mode 100644 helm/interface/cicPp.mli create mode 100644 helm/interface/cicReduction.ml create mode 100644 helm/interface/cicReduction.mli create mode 100644 helm/interface/cicSubstitution.ml create mode 100644 helm/interface/cicSubstitution.mli create mode 100644 helm/interface/cicTypeChecker.ml create mode 100644 helm/interface/cicTypeChecker.mli create mode 100644 helm/interface/cicXPath.ml create mode 100644 helm/interface/cicXPath.prima_degli_identificatori.ml create mode 100644 helm/interface/configuration.ml create mode 100644 helm/interface/deannotate.ml create mode 100644 helm/interface/experiment.ml create mode 100644 helm/interface/fix_params.ml create mode 100644 helm/interface/getter.ml create mode 100644 helm/interface/getter.mli create mode 100644 helm/interface/gmon.out create mode 100755 helm/interface/http_getter/http_getter.pl create mode 100755 helm/interface/http_getter/http_getter.pl2 create mode 100755 helm/interface/isterix create mode 100644 helm/interface/javacore15005.txt create mode 100644 helm/interface/javacore15021.txt create mode 100755 helm/interface/latinize.pl create mode 100755 helm/interface/mkindex.sh create mode 100644 helm/interface/mml.dtd create mode 100644 helm/interface/mml.ml create mode 100755 helm/interface/mmlinterface.ml create mode 100755 helm/interface/mmlinterface.opt.saved create mode 100644 helm/interface/pxpUriResolver.ml create mode 100644 helm/interface/reduction.ml create mode 100644 helm/interface/servers.txt create mode 100644 helm/interface/servers.txt.example create mode 100755 helm/interface/servers.txt.universita create mode 100644 helm/interface/theory.ml create mode 100644 helm/interface/theoryCache.ml create mode 100644 helm/interface/theoryParser.ml create mode 100644 helm/interface/theoryParser2.ml create mode 100644 helm/interface/theoryTypeChecker.ml create mode 100755 helm/interface/toglie_helm_xref.pl create mode 100755 helm/interface/toglie_helm_xref.sh create mode 100644 helm/interface/uriManager.ml create mode 100644 helm/interface/uriManager.ml.implementazione_banale create mode 100644 helm/interface/uriManager.ml.implementazione_doppia create mode 100644 helm/interface/uriManager.ml.implementazione_semplice create mode 100644 helm/interface/uriManager.mli create mode 100755 helm/interface/uris_of_filenames.pl create mode 100644 helm/interface/urls_of_uris.db create mode 100644 helm/interface/xaland-cpp/xaland.cpp create mode 100644 helm/interface/xaland-java/rompi.class create mode 100644 helm/interface/xaland-java/rompi.java create mode 100644 helm/interface/xaland-java/sped.class create mode 100644 helm/interface/xaland-java/sped.java create mode 100644 helm/interface/xaland-java/xaland.class create mode 100644 helm/interface/xaland-java/xaland.java create mode 100644 helm/interface/xaland-java/xaland.java.prima_del_loro_baco create mode 100644 helm/interface/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset create mode 100644 helm/interface/xaland.class create mode 100644 helm/interface/xml.ml create mode 100644 helm/interface/xml.mli create mode 100644 helm/interface/xsltProcessor.ml create mode 100644 helm/pacchetti/Makefile create mode 100644 helm/scripts/Makefile create mode 100755 helm/scripts/makeit create mode 100755 helm/scripts/start-tomcat create mode 100755 helm/scripts/start-tomcat-debug create mode 100755 helm/scripts/stop-tomcat-debug create mode 100644 helm/scripts/template.cshrc create mode 100644 helm/scripts/template.rc create mode 100644 helm/style/annotatedcont.xsl create mode 100644 helm/style/annotatedcont.xsl.csc create mode 100644 helm/style/annotatedpres.xsl create mode 100644 helm/style/basic.xsl create mode 100644 helm/style/content.xsl create mode 100644 helm/style/content.xsl.csc create mode 100644 helm/style/content_senza_tipi.13.9.00.xsl create mode 100644 helm/style/content_to_html.xsl create mode 100644 helm/style/html_init.xsl create mode 100644 helm/style/html_reals.xsl create mode 100644 helm/style/html_set.xsl create mode 100644 helm/style/mml2mmlv1_0.xsl create mode 100644 helm/style/mml2mmlv1_0_original.xsl create mode 100644 helm/style/mmlextension.xsl create mode 100644 helm/style/mmlextension_andrea.xsl create mode 100644 helm/style/mmlextension_irene.xsl create mode 100644 helm/style/objcontent.xsl create mode 100644 helm/style/objcontent.xsl.csc create mode 100644 helm/style/objcontent_old.xsl create mode 100644 helm/style/params.xsl create mode 100644 helm/style/proof31-10-00.xsl create mode 100644 helm/style/proofs.xsl create mode 100644 helm/style/reals.xsl create mode 100644 helm/style/ricerca.xsl create mode 100644 helm/style/rootcontent.xsl create mode 100644 helm/style/rootcontent_withproofs.xsl create mode 100644 helm/style/roottheory.xsl create mode 100644 helm/style/set.xsl create mode 100644 helm/style/theory_content.xsl create mode 100644 helm/style/theory_pres.xsl create mode 100644 helm/xmltheory/Coq_v2theoryxml/.depend create mode 100644 helm/xmltheory/Coq_v2theoryxml/Makefile create mode 100644 helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml create mode 100644 helm/xmltheory/FakeCoq_vo2xml/README create mode 100755 helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml create mode 100644 helm/xmltheory/XmlTheory/.depend create mode 100644 helm/xmltheory/XmlTheory/COME_COMPILARE create mode 100644 helm/xmltheory/XmlTheory/Make create mode 100644 helm/xmltheory/XmlTheory/Makefile create mode 100644 helm/xmltheory/XmlTheory/README create mode 100644 helm/xmltheory/XmlTheory/XmlTheory.v create mode 100644 helm/xmltheory/XmlTheory/iXml.ml create mode 100644 helm/xmltheory/XmlTheory/iXml.mli create mode 100644 helm/xmltheory/XmlTheory/xmltheoryentries.ml create mode 100644 helm/xmltheory/maththeory.dtd create mode 100644 helm/xsltd/Makefile create mode 100755 helm/xsltd/cadet create mode 100755 helm/xsltd/isterix create mode 100644 helm/xsltd/xaland-cpp/xaland.cpp create mode 100644 helm/xsltd/xaland-java/rompi.class create mode 100644 helm/xsltd/xaland-java/rompi.java create mode 100644 helm/xsltd/xaland-java/sped.class create mode 100644 helm/xsltd/xaland-java/sped.java create mode 100644 helm/xsltd/xaland-java/xaland.class create mode 100644 helm/xsltd/xaland-java/xaland.java create mode 100644 helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco create mode 100644 helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset create mode 100644 helm/xsltd/xaland-java2/xaland2.class create mode 100644 helm/xsltd/xaland-java2/xaland2.java diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm new file mode 100644 index 0000000000000000000000000000000000000000..e759a668b59b21fc56addbe331bfc3f81f8aa944 GIT binary patch literal 16862 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 literal 0 HcmV?d00001 diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..73f44b3641b51a61bb03a72124437196596ec844 GIT binary patch literal 5777 zcmb7{bz2h-!$#>CyFeNQX{14E9NjsQ1_3FlfpoWo(jC$z-91{mTN*}5jb`M4J-_!O zy#L)_;9U1P^wD@|7SL@mG|W>Ih}W9%+?4*cetyG8H7JG0<*5m)9-KW6K9rulY}d}F zVU=0TvPf2*l)`;p@^T8o3})$#W&s)6Ak#!60T=?)z%v0fWzb`)0A4Mm8Yc_|c`m{w zVwRuDIR+J!0OuR%Y=m22hFuKMHIFR#$0izKNwbvZLsa%tPP)-pKzl)l_#ic*OnEIW zQ#LucLbZx-$uYhyA@y_p`)bT;*|WzP_8Q5C5js8hyf#zig*Kg(2nyE1$|PsJ(-XL- z8L`lO=X*nLYqRjKURP*c$+x_zTr*c>i6d4Tw8Qv0*08As7=SVe%>PRW0;>D0+EVjwun{vAD899@AOvWEf zI*HBft*rWR&5^G>Qx8d2y1cOo%r`U>*_)J(ABaxv=g#F|8oF#BHI@Qkr4kAF0pB`a zt0fH93#z93yB zBab?vB~|I^_ioZzz4`TdKj)9sBJ6nD6!OVOocXI$T>IMj!>+gfT-o=$pMG;ht?P`M z=m5M709CKP_!&N}g?&Bgv8oQrz;5e(!OZGOT@I?oSq)lCFj)5fp(uf+$ zJuQqaiV=6ifCnwenXO_8ILS_mWRCzPdLIgM>Vv1su#3ZA9OLJ8u!o zMG826{K}mxd5shA>ON31hzC zv;-FF^>_0g48?O^MUaI^PLIEicDi9)R=NUT?RxzWI0 z$3ErP_8hFdpT*I?`RMMGi!n~(Wd+)q&x`f7{WWA6?pz$Y1)k=K-2<61Cu8O?_U_UJ zk^M{?9J(bCmRoo>U8{W7uqeBXN&12kqy^1H;ogHxE2k91U?rFrI_6=j<$;B(M)T~_ z(&^0i+1LaxGL1E@d`2*PAjoDul9Quh7LzD#)JlhWgD9eXzGxv}F8XSwwCMUxP}l`s z*a6c3QAXI??Q zolsyS&qNAptrpOw>3o+;zEb*3tfntBP?t~PZT|PzCOwsaoA;Z%rsj_Fwp2atcTfbX zr-k)q38=P=%C!3{2Ke|EoK? z_cFxP)^-twndUe^ek%}>HqK}Q+SpP}DXP{y@{-<2=HBo}@SP}XZGAo5+s($SLmcIo zQs;o&ji3I2TI0+_WmT8dp&C~#4uaO!{ym|nWK2+n1r=p*7V`Eu$@h-&+1IaIRF*LN zpAB_(rCx{N5dKLmT`^}H%p%CZuRitNrS~}LBTz}l>{L=l%6@t^5_s*p*MJ zA~l#PuaG7PV~3NqL%#-|x2Yfa9JLtf8Sj|OpZ4`C_R3`+r&y@IpIiARzY=*SpY<`P zaU{{)BX1g=#rE;K-Ty1bK#no{TyD#`>pZ*5IaxKM;wbFO{*xPkzqe)JXQb-QP8rrR*X;qEzOZ6 z@${u+WIq1J+ui)`%$)z+VkdOJMmYAq?NL3Ef~^fIei z>zl8Z_s){$Vs5f^hJVcm$`)K#CY)*g1h6>IeE5Fg&RERP%_|GI%~ihR5g9VH&NW0Uoe3p0m1;YD!IBStp z<gePVOU4-ecXi|PANIT|@rW<=FGDQL z;j^d793U47^{Ip1{;3R5zCB_lCSS~Qn&=u^3(*#F7AlDwUkDgHey#d9m6w)g(EJc8 z5lDSPl!B1Jw3#9~iD}xLSElA_3D1r#4R|ts2TL+{@H) zc}|5Ehva;n_F8mxUbdaWD9$dT1=DsJN{+5@%w!SH`{#V+D+$hv9rX`R5l9M6c!SShQHO5NEWe;pTW1cd_5%kDE~PErioo4S3G-2#L|noeKofKMUcA#6;$}; zvp3%)yifm3-_s`x=mwPei zs54Q=<5rH~0gKlIWZ0HZD^xyXW0_;B=y*5?94C2uy0wl2a&)T?bSm^v;jfH694jWb z7}bSiWZ=dd;}_+;^@&XMWCVHn0`0|5mD4s!{HG5k7l*Zz`&n<&g8ME?eRAUWvReOh zAwcnVdL_eolq&9bN5a2;_OoOU27f2NMxs}{mLGC)yKg6u zJ;Y}oFH(NX*uf76D1gCB(KTuj+^7OWEpx(9-q{yGnyd`Zcbd#oze?ZPzK>Crt zTuHqS^x@swo3G)R^iXY3T`euVkIoQX$<(}901W71p8>e~Ppc$sMG-q+w6pUTslKDO z3BDXXZQ2_BYC)CA9T90Av&&cZM6WO=Ctk6@LfwYn9wXxoH}E3|E&Lg-be|~Wz)Dny zcCoO@q(OeFs;sh<6UctvU(Zz*<2iux4IAAD|! zM$NS0d`-YoH-VMbMtuEyFc!*`$Yd_WS-lSWw@>k!J%ZQ17I8SXU@%vZ&R+2@s-b-e zuqsbGpr%4)!;06>bl*?pRy?9{=-Cpc#j_F?Gy&<$EVi2abp=wd&`aKAOZ%D1@@;3D zM$T$~`OL#lx%4;>mfI;=TI!Y>cSf^q7P&n*z*n`j_zb@>m18cwvn&XXo$M|E-o=%+L5#H~}%s|$S5GN7G{ZcY4$RBV zp{=uR?I`UO^?tc^{uokb&hB*kF+M)`{GpwI_cz8TXTTkkS1WispZT z5;;6cc_22 z;r)$A_`&TTG>=XyW9hxpPQfrVv51aMS^2O<$px{wE9$Yc%ZB(@^n=)*PHfYMb>!|C zdt+BVT$pW;U1Gb(#lZI^?>_*!nJ^#}}@EakZ$^(xB7Gg*CFA7e-f6izZb>8pm3)M@oIan4u$?`=cFl+-(?A z+{-`eCG%X=viTN%^XR2IF@o5-;!QPRt58hpe{WCG>t85vj*Pz{fHI zpwiTD3$c*qFm->Ar8BPVBuh1SyejrfmW8)Z0Xj^}zoYs{*Tw*juHH=WHh3qvH3vkj zjU^8azE>Kj@(rVwfpEgC&y;5{0IP~IQQyS8T=AikO(hK@#{BkLE~+up%x9irUt2%R z4>>dlrM~bo6^ag0t*2N%=Sk@B5!gZtDC5U5_`f}j%5?lh``M=Y(ue9_rFdeK2(c-HxsbYGnh`P^g(p$QKz-u(!gpblfp0P^8Vtc zzT{~>E5YpWzZeDHlq=wvD!Wr1?5-UG6pM?_t1kKcSER#hCGE!)QYzzz38?~D5O`Ff zDFlESvr>;S>+Pd4nv-!vQ&=eu~`u8TDR#ewE=vvv_`| z<;Jj+?=3k^vm8}k>O{VOKD|M)+%zuNuBlV6pprlsvb(a7P%-P)$}YMr~2y_?xf^lK?-9tK|35c(d@mzUq^XWOmlfhR|mOcqgt z{_cN%8KMdQpflF!-sbeNQtLQl8(u#hhvS&!DwTu3$N=AtQFkd&hDpLXCgy*G<4KU2 z&FBRY;$FB+fhSpsM=?1|KghwyZJ7Jex1u)1w-~K5;A!8DJi_)`-;HOt!(r~r!C5hP z*Nf47)jK|4sZoBYli#H_kb*EkO@xuvger~rC$>d*?p$hCu1RRc8&)tSi{e$;K1M*( zv$_1*LTW}EiCwGern=ds$xb`P6T>^BW)Ag?)r1+i=L{4XWo>&xsL$PzX}qu_RvxqG zs!ur1J!NJBn3E|H4zsEztf$bM7Es334>(myvm5v|Lr^NqOLif9hpR^=JskAnb_T?f z2)6ku2~K%nO1dwW#yyA;rF#eHX9Ov2%P)TIrkFFYiq+^+a-x_cmKPby2YTkM2nZ!B z6JBWFKHmuYsMh@&J$!9VphZ(!{wREJnlYv;Cq_3`U&&w2P%+)A(gw7g$oopv`O0t4 zDxZU#%QleCF-kVJo3S})wp$gQ^SgztgtZ4LAjK;*xk%G174LPFMj|*Y1y+c;;h<5P z_1b4uR^Q;yrznB>k{h`8Z*y#}1|D~h3 zIeIt9t+5mJ%x*4Z#GY60&PeuXi?zGpo+MyMT{B; zm0$qY`_lSGJ?G@0UJ9ODf@l|p%z>x zaut0)3131Ky$n7f!k>N**t9nwcwaiLEj{qHzxPQd=^_9Dg$@22^n#URJ+pp&JT3Kv zAB1%?9|cv5ku{o3Fu+^z$lPVLb0ff2joy{DjDrc literal 0 HcmV?d00001 diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend new file mode 100644 index 000000000..600449bb8 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend @@ -0,0 +1,4 @@ +gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo +gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx +gtkMathView.cmo: gtk_mathview.cmo +gtkMathView.cmx: gtk_mathview.cmx diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING new file mode 100644 index 000000000..20b480a10 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING @@ -0,0 +1,11 @@ +This library is made available under the LGPL. +You should have got a copy of the LGPL with Objective Caml. +The LGPL applies to all the files in this directory, but not in +subdirectories. + +For the test subdirectory, there is no specific licensing policy, +but you may freely take inspiration from the code, and copy parts of +it in your application. + +Author: + Claudio Sacerdoti Coen diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile new file mode 100644 index 000000000..1195de528 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile @@ -0,0 +1,98 @@ +# Makefile for lablgtk_mathview. + +LABLGTKDIR = /usr/local/lib/ocaml/lablgtk +MLFLAGS += -I $(LABLGTKDIR) + +TARGETS = ml_gtk_mathview.o lablgtkmathview.cma + +all: $(TARGETS) + +opt: lablgtkmathviewopt + +configure: + @rm -f config.make + @$(MAKE) --no-print-directory -f configure.mk + +depend: + @rm -f .depend + @$(MAKE) --no-print-directory -f configure.mk .depend + +.depend config.make: + @$(MAKE) --no-print-directory -f configure.mk + +COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c +LINKER = $(CAMLC) $(MLFLAGS) +COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c +LINKOPT = $(CAMLOPT) $(MLFLAGS) + +include config.make + +INSTALLDIR = $(LIBDIR)/lablgtk/mathview + +MLLIBS = lablgtkmathview.cma +CLIBS = +MLLINK = unix.cma str.cma + +ifdef DEBUG +CFLAGS = -g $(GTKCFLAGS) +MLLINK += -cclib -lcamlrund +MLFLAGS += -g +else +CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS) +endif + +THFLAGS = -thread +THLINK = unix.cma threads.cma + +ifdef USE_CC +CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS) +else +CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)" +endif + +# Rules +.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def +.c.o: + $(CCOMPILER) $< +.ml.cmo: + $(COMPILER) $< +.mli.cmi: + $(COMPILER) $< +.ml.cmx: + $(COMPOPT) $< +.var.h: + ./var2def < $< > $@ +.var.c: + ./var2conv < $< > $@ + +# Targets +COBJS = ml_gtk_mathview.o +MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo +ALLOBJS = $(MLOBJS) + +lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa) + +install: + if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi + cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR) + if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi + cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR) + cp $(MLLIBS) $(INSTALLDIR) + cp $(COBJS) $(INSTALLDIR) + if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi + if test -f lablgtkmathview.cmxa; then \ + cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \ + $(INSTALLDIR); fi + +lablgtkmathview.cma: $(MLOBJS) + $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) $(GTKMATHVIEWLIBS) +lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) $(GTKMATHVIEWLIBS) + +ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \ + $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h + +clean: + rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS) + +include .depend diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make new file mode 100644 index 000000000..d50ffb585 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make @@ -0,0 +1,15 @@ +CAMLC=ocamlc +CAMLOPT=ocamlopt +USE_GL= +USE_GNOME= +USE_CC= +DEBUG= +CC=cc +RANLIB=ranlib +LIBDIR=/usr/lib/ocaml +BINDIR=/usr/bin +INSTALLDIR=/usr/lib/ocaml/lablgtk/mathview +GTKCFLAGS=-I/usr/lib/glib/include -I/usr/X11R6/include -I/usr/lib/ocaml/lablgtk +GTKLIBS=-ccopt -L/usr/lib -ccopt -L/usr/X11R6/lib -cclib -lgtk -cclib -lgdk -ccopt -rdynamic -cclib -lgmodule -cclib -lglib -cclib -ldl -cclib -lXi -cclib -lXext -cclib -lX11 -cclib -lm +GTKMATHVIEWLIBS=-ccopt -L/usr/local/lib/gtkmathview -cclib -lgtkmathview +GNOMELIBS= diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk new file mode 100644 index 000000000..73cfc3d35 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk @@ -0,0 +1,53 @@ +# makefile for configuring lablGTK_mathview + +# Default compilers +CAMLC = ocamlc +CAMLOPT = ocamlopt + +# Default installation directories +BINDIR = `$(GETBINDIR)` +INSTALLDIR = $(LIBDIR)/lablgtk/mathview + +# Autoconf +GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//' +LIBDIR = `$(GETLIBDIR)` +GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|' +GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/' + +ifdef USE_GNOME +GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir +GNOMELIBS = `gnome-config --libs gtkxmhtml` +else +GTKGETCFLAGS = gtk-config --cflags +endif + +GTKGETLIBS = gtk-config --libs + +configure: .depend config.make + +.depend: + ocamldep *.ml *.mli > .depend + +config.make: + @echo CAMLC=$(CAMLC) > config.make + @echo CAMLOPT=$(CAMLOPT) >> config.make + @echo USE_GL=$(USE_GL) >> config.make + @echo USE_GNOME=$(USE_GNOME) >> config.make + @echo USE_CC=$(USE_CC) >> config.make + @echo DEBUG=$(DEBUG) >> config.make + @echo CC=$(CC) >> config.make + @echo RANLIB=`$(GETRANLIB)` >> config.make + @echo LIBDIR=$(LIBDIR) >> config.make + @echo BINDIR=`$(GETBINDIR)` >> config.make + @echo INSTALLDIR=$(INSTALLDIR) >> config.make + @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make + @echo GTKLIBS=`$(GTKGETLIBS)` | \ + sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \ + >> config.make + # + echo GTKMATHVIEWLIBS="-ccopt -L/usr/local/lib/gtkmathview -cclib -lgtkmathview " >> config.make + # + @echo GNOMELIBS=$(GNOMELIBS) | \ + sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \ + >> config.make + cat config.make diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml new file mode 100644 index 000000000..b79c81244 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml @@ -0,0 +1,50 @@ +open Gaux +open Gtk +open Gtk_mathview +open GtkBase +open GtkMathView +open GObj + +exception ErrorLoadingFile of string;; + +class math_view_signals obj = object + inherit GContainer.container_signals obj + method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after + method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after +end + +class math_view obj = object + inherit GContainer.container (obj : Gtk_mathview.math_view obj) + method connect = new math_view_signals obj + method load ~filename = + if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename) + method get_selection = MathView.get_selection obj + method unload = MathView.unload obj + method dump = MathView.dump obj + method get_width = MathView.get_width obj + method get_height = MathView.get_height obj + method set_adjustments = + fun adj1 adj2 -> + MathView.set_adjustments obj (GData.as_adjustment adj1) + (GData.as_adjustment adj2) + method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj) + method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj) + method get_buffer = MathView.get_buffer obj + method get_frame = new GBin.frame (MathView.get_frame obj) + method set_font_size = MathView.set_font_size obj + (*method get_top = MathView.get_top obj + method set_top = MathView.set_top obj*) +end + +let math_view ?adjustmenth ?adjustmentv ?border_width ?width ?height + ?packing ?show () += + let w = + MathView.create + ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth) + ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv) + () + in + Container.set w ?border_width ?width ?height; + pack_return (new math_view w) ~packing ~show +;; diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml new file mode 100644 index 000000000..9ed42b8b7 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml @@ -0,0 +1,61 @@ +open Gtk +open Gtk_mathview +open Tags +open GtkBase +open Gpointer + +module MathView = struct + let cast w : math_view obj = Object.try_cast w "GtkMathView" + external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> + math_view obj = "ml_gtk_math_view_new" + let create ~adjustmenth ~adjustmentv () = + create (optboxed adjustmenth) (optboxed adjustmentv) + external load : [>`math_view] obj -> filename:string -> bool = + "ml_gtk_math_view_load" + external get_selection : [>`math_view] obj -> string option = + "ml_gtk_math_view_get_selection" + external unload : [>`math_view] obj -> unit = + "ml_gtk_math_view_unload" + external dump : [>`math_view] obj -> unit = + "ml_gtk_math_view_dump" + external get_width : [>`math_view] obj -> int = + "ml_gtk_math_view_get_width" + external get_height : [>`math_view] obj -> int = + "ml_gtk_math_view_get_height" + external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit = + "ml_gtk_math_view_set_adjustments" + external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj = + "ml_gtk_math_view_get_hadjustment" + external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj = + "ml_gtk_math_view_get_vadjustment" + external get_buffer : [>`math_view] obj -> Gdk.pixmap = + "ml_gtk_math_view_get_buffer" + external get_frame : [>`math_view] obj -> [`frame] obj = + "ml_gtk_math_view_get_frame" + external set_font_size : [>`math_view] obj -> int -> unit = + "ml_gtk_math_view_set_font_size" + (*external get_top : [>`math_view] obj -> (int * int) = + "ml_gtk_math_view_get_top" + external set_top : [>`math_view] obj -> int -> int -> unit = + "ml_gtk_math_view_set_top"*) + + module Signals = struct + open GtkSignal + + let jump : ([>`math_view],_) t = + let marshal_jump f _ = + function + [GtkArgv.STRING (Some str)] -> f str + | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump" + in + { name = "jump"; marshaller = marshal_jump } + + let clicked : ([>`math_view],_) t = + let marshal_clicked f _ = + function + [] -> f () + | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked" + in + { name = "clicked"; marshaller = marshal_clicked } + end +end diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml new file mode 100644 index 000000000..745a1ba82 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml @@ -0,0 +1 @@ +type math_view = [`widget|`container|`bin|`eventbox|`math_view] diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c new file mode 100644 index 000000000..b16f68e50 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +/* : Next row should be put in a .h of lablgtk. */ +#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val) + +#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val) +ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val,Val_GtkWidget_sink) +ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool) +ML_1 (gtk_math_view_unload, GtkMathView_val, Unit) +ML_1 (gtk_math_view_dump, GtkMathView_val, Unit) +ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int) +ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int) +//ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit) +ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit) +ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget) +ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget) +ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap) +ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget) +ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit) + +/* +value ml_gtk_math_view_get_top (value arg1) +{ + CAMLparam1(arg1); + CAMLlocal1 (result); + int x, y; + gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y); + result = alloc(2, 0); + Store_field(result, 0, Val_int(x)); + Store_field(result, 0, Val_int(y)); + CAMLreturn (result); +} +*/ + +value ml_gtk_math_view_get_selection (value arg1) +{ + const char *stringa; + stringa = gtk_math_view_get_selection (GtkMathView_val (arg1)); + return Val_option (stringa, Val_string); +} diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile new file mode 100644 index 000000000..cc5bd50f5 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile @@ -0,0 +1,36 @@ +LABLGTK_DIR = ../../lablgtk-20000829 +LABLGTK_MATHVIEW_DIR = .. +OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlmathview +OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlmathview + +all: test +opt: test.opt + +test: test.cmo + $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \ + test.cmo \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" + +test.opt: test.cmx + $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \ + test.cmx \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" + +.SUFFIXES: .ml .mli .cmo .cmi .cmx +.ml.cmo: + $(OCAMLC) -c $< +.mli.cmi: + $(OCAMLC) -c $< +.ml.cmx: + $(OCAMLOPT) -c $< + +clean: + rm -f *.cm[iox] *.o test test.opt diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml new file mode 100644 index 000000000..e914f4d6b --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml @@ -0,0 +1,141 @@ +(******************************************************************************) +(* Claudio Sacerdoti Coen *) +(* 25/09/2000 *) +(* *) +(* This is a simple test for the OCaml (LablGtk indeed) binding of the *) +(* MathView widget *) +(******************************************************************************) + +(* Callbacks *) +let jump s = + print_string ("jump: " ^ s ^ "\n") ; + flush stdout +;; + +let clicked () = + print_string "clicked: IT WORKS\n" ; + flush stdout +;; + +let load mathview () = + mathview#load "test.xml" ; + print_string "load: SEEMS TO WORK\n" ; + flush stdout +;; + +exception Ok;; +let get_selection mathview () = + let selection = + match mathview#get_selection with + None -> "NO SELECTION" + | Some s -> s + in + print_string ("get_selection: " ^ selection ^ "\n") ; + flush stdout +;; + +let unload mathview () = + mathview#unload ; + print_string "unload: SEEMS TO WORK\n" ; + flush stdout +;; + +let dump mathview () = + mathview#dump ; + print_string "dump: SEEMS TO WORK\n" ; + flush stdout +;; + +let get_width mathview () = + print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ; + flush stdout +;; + +let get_height mathview () = + print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ; + flush stdout +;; + +let set_adjustments mathview () = + let adj1 = GData.adjustment () in + let adj2 = GData.adjustment () in + mathview#set_adjustments adj1 adj2 ; + adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ; + adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ; + print_string "set_adjustments: SEEM TO WORK\n" ; + flush stdout +;; + +let get_hadjustment mathview () = + let adj = mathview#get_hadjustment in + adj#set_value ((adj#lower +. adj#upper) /. 2.0) ; + print_string "get_hadjustment: SEEM TO WORK\n" ; + flush stdout +;; + +let get_vadjustment mathview () = + let adj = mathview#get_vadjustment in + adj#set_value ((adj#lower +. adj#upper) /. 2.0) ; + print_string "get_vadjustment: SEEM TO WORK\n" ; + flush stdout +;; + +let get_buffer mathview () = + let buffer = mathview#get_buffer in + Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0 + ~width:50 ~height:50 ~filled:true () ; + print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n"; + flush stdout +;; + +let get_frame mathview () = + let frame = mathview#get_frame in + frame#set_shadow_type `NONE ; + print_string "get_frame: SEEMS TO WORK\n" ; + flush stdout +;; + +let set_font_size mathview () = + mathview#set_font_size 24 ; + print_string "set_font_size: FONT IS NOW 24\n" ; + flush stdout +;; + +(* Widget creation *) +let main_window = GWindow.window ~title:"GtkMathView test" () in +let vbox = GPack.vbox ~packing:main_window#add () in +let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in +(*let mathview = GMathView.math_view ~packing:sw#add_with_viewport ~width:50 ~height:50 () in*) +let mathview = GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in +let hbox = GPack.hbox ~packing:vbox#pack () in +let button_load = GButton.button ~label:"load" ~packing:hbox#pack () in +let button_get_selection = GButton.button ~label:"get_selection" ~packing:hbox#pack () in +let button_unload = GButton.button ~label:"unload" ~packing:hbox#pack () in +let button_dump = GButton.button ~label:"dump" ~packing:hbox#pack () in +let button_get_width = GButton.button ~label:"get_width" ~packing:hbox#pack () in +let button_get_height = GButton.button ~label:"get_height" ~packing:hbox#pack () in +let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:hbox#pack () in +let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:hbox#pack () in +let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:hbox#pack () in +let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:hbox#pack () in +let button_get_frame = GButton.button ~label:"get_frame" ~packing:hbox#pack () in +let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:hbox#pack () in +(* Signals connection *) +ignore(button_load#connect#clicked (load mathview)) ; +ignore(button_get_selection#connect#clicked (get_selection mathview)) ; +ignore(button_unload#connect#clicked (unload mathview)) ; +ignore(button_dump#connect#clicked (dump mathview)) ; +ignore(button_get_width#connect#clicked (get_width mathview)) ; +ignore(button_get_height#connect#clicked (get_height mathview)) ; +ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ; +ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ; +ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ; +ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ; +ignore(button_get_frame#connect#clicked (get_frame mathview)) ; +ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ; +ignore(mathview#connect#jump jump) ; +ignore(mathview#connect#clicked clicked) ; +(* Main Loop *) +main_window#show () ; +GMain.Main.main () +;; diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml new file mode 100644 index 000000000..b0f8c1563 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml @@ -0,0 +1,123 @@ + + + + + + + + a + + x + + + + b + + + + x + 2 + + + + + p + + x + + + + q + + + + d + x + = + + + a2 + + + ln + + + ( + + x2 + + + + p + + x + + + + q + + ) + + + + + + + + + + 2 + + b + + - + + a + + p + + + + + + 4 + + q + + - + + p + 2 + + + + + + + arctg + + + + + 2 + + x + + + + p + + + + + 4 + + q + + - + + p + 2 + + + + + + + + + c + + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore new file mode 100644 index 000000000..cd9e25037 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore @@ -0,0 +1 @@ +*.cmi *.cmo *.cmx *.cma *.cmxa config.make diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend new file mode 100644 index 000000000..600449bb8 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend @@ -0,0 +1,4 @@ +gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo +gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx +gtkMathView.cmo: gtk_mathview.cmo +gtkMathView.cmx: gtk_mathview.cmx diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING new file mode 100644 index 000000000..20b480a10 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING @@ -0,0 +1,11 @@ +This library is made available under the LGPL. +You should have got a copy of the LGPL with Objective Caml. +The LGPL applies to all the files in this directory, but not in +subdirectories. + +For the test subdirectory, there is no specific licensing policy, +but you may freely take inspiration from the code, and copy parts of +it in your application. + +Author: + Claudio Sacerdoti Coen diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile new file mode 100644 index 000000000..b8adbb47b --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile @@ -0,0 +1,109 @@ +# Makefile for lablgtk_mathview. + +LABLGTKDIR = /usr/lib/ocaml/lablgtk +MINIDOMDIR = ./minidom +TESTDIR = ./test +MLFLAGS += -I $(LABLGTKDIR) -I $(MINIDOMDIR) + +TARGETS = ml_gtk_mathview.o lablgtkmathview.cma + +all: Minidom $(TARGETS) + +opt: Minidom.opt lablgtkmathviewopt + +Minidom: + cd $(MINIDOMDIR); make + +Minidom.opt: + cd $(MINIDOMDIR); make opt + +configure: + @rm -f config.make + @$(MAKE) --no-print-directory -f configure.mk + +depend: + @rm -f .depend + @$(MAKE) --no-print-directory -f configure.mk .depend + +.depend config.make: + @$(MAKE) --no-print-directory -f configure.mk + +COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c +LINKER = $(CAMLC) $(MLFLAGS) +COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c +LINKOPT = $(CAMLOPT) $(MLFLAGS) + +include config.make + +INSTALLDIR = $(LIBDIR)/lablgtk/mathview + +MLLIBS = lablgtkmathview.cma +CLIBS = +MLLINK = unix.cma str.cma + +ifdef DEBUG +CFLAGS = -g $(GTKCFLAGS) +MLLINK += -cclib -lcamlrund +MLFLAGS += -g +else +CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS) +endif +CFLAGS += $(MINIDOMCFLAGS) $(GTKMATHVIEWCFLAGS) + +THFLAGS = -thread +THLINK = unix.cma threads.cma + +ifdef USE_CC +CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS) +else +CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)" +endif + +# Rules +.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def +.c.o: + $(CCOMPILER) $< +.ml.cmo: + $(COMPILER) $< +.mli.cmi: + $(COMPILER) $< +.ml.cmx: + $(COMPOPT) $< +.var.h: + ./var2def < $< > $@ +.var.c: + ./var2conv < $< > $@ + +# Targets +COBJS = ml_gtk_mathview.o +MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo +ALLOBJS = $(MLOBJS) + +lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa) + +install: + if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi + cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR) + if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi + cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR) + cp $(MLLIBS) $(INSTALLDIR) + cp $(COBJS) $(INSTALLDIR) + if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi + if test -f lablgtkmathview.cmxa; then \ + cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \ + $(INSTALLDIR); fi + +lablgtkmathview.cma: $(MLOBJS) + $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)" +lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx) + $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)" + +ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \ + $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h + +clean: + rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS) + cd $(MINIDOMDIR); make clean + cd $(TESTDIR); make clean + +include .depend diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk new file mode 100644 index 000000000..8982371ee --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk @@ -0,0 +1,59 @@ +# makefile for configuring lablGTK_mathview + +# Default compilers +CAMLC = ocamlc +CAMLOPT = ocamlopt + +# Default installation directories +BINDIR = `$(GETBINDIR)` +INSTALLDIR = $(LIBDIR)/lablgtk/mathview + +# Autoconf +GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//' +LIBDIR = `$(GETLIBDIR)` +GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|' +GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/' + +ifdef USE_GNOME +GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir +GNOMELIBS = `gnome-config --libs gtkxmhtml` +else +GTKGETCFLAGS = gtk-config --cflags +endif + +GTKGETLIBS = gtk-config --libs + +configure: .depend config.make + +.depend: + ocamldep *.ml *.mli > .depend + +config.make: + @echo CAMLC=$(CAMLC) > config.make + @echo CAMLOPT=$(CAMLOPT) >> config.make + @echo USE_GL=$(USE_GL) >> config.make + @echo USE_GNOME=$(USE_GNOME) >> config.make + @echo USE_CC=$(USE_CC) >> config.make + @echo DEBUG=$(DEBUG) >> config.make + @echo CC=$(CC) >> config.make + @echo RANLIB=`$(GETRANLIB)` >> config.make + @echo LIBDIR=$(LIBDIR) >> config.make + @echo BINDIR=`$(GETBINDIR)` >> config.make + @echo INSTALLDIR=$(INSTALLDIR) >> config.make +# Luca: was +# @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make +# Luca: now + @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I$(LIBDIR)/lablgtk >> config.make + @echo GTKLIBS=`$(GTKGETLIBS)` | \ + sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \ + >> config.make +# Luca: GtkMathView configuration + @echo GTKMATHVIEWCFLAGS=`gtkmathview-config --cflags` >> config.make + @echo MINIDOMCFLAGS=`minidom-config --cflags` >> config.make + @echo GTKMATHVIEWLIBS=`gtkmathview-config --libs` >> config.make + @echo MINIDOMLIBS=`minidom-config --libs` >> config.make +# Luca: end of GtkMathView configuration + @echo GNOMELIBS=$(GNOMELIBS) | \ + sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \ + >> config.make + cat config.make diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml new file mode 100644 index 000000000..e897ccfdb --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml @@ -0,0 +1,80 @@ +open Gaux +open Gtk +open Gtk_mathview +open GtkBase +open GtkMathView +open GObj + +exception ErrorLoadingFile of string;; +exception ErrorWritingFile of string;; +exception NoSelection;; + +class math_view_signals obj = object + inherit GContainer.container_signals obj + method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after + method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after + method selection_changed = + GtkSignal.connect ~sgn:MathView.Signals.selection_changed obj ~after +end + +class math_view obj = object + inherit GContainer.container (obj : Gtk_mathview.math_view obj) + method connect = new math_view_signals obj + method load ~filename = + if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename) + method unload = MathView.unload obj + method get_selection = MathView.get_selection obj + method set_selection (node : Ominidom.o_mDOMNode option) = MathView.set_selection obj node + method get_width = MathView.get_width obj + method get_height = MathView.get_height obj + method get_top = MathView.get_top obj + method set_top = MathView.set_top obj + method set_adjustments = + fun adj1 adj2 -> + MathView.set_adjustments obj (GData.as_adjustment adj1) + (GData.as_adjustment adj2) + method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj) + method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj) + method get_buffer = MathView.get_buffer obj + method get_frame = new GBin.frame (MathView.get_frame obj) + method set_font_size = MathView.set_font_size obj + method get_font_size = MathView.get_font_size obj + method set_anti_aliasing = MathView.set_anti_aliasing obj + method get_anti_aliasing = MathView.get_anti_aliasing obj + method set_kerning = MathView.set_kerning obj + method get_kerning = MathView.get_kerning obj + method set_log_verbosity = MathView.set_log_verbosity obj + method get_log_verbosity = MathView.get_log_verbosity obj + method export_to_postscript + ?(width = 595) ?(height = 822) ?(x_margin = 72) ?(y_margin = 72) + ?(disable_colors = false) ~filename () = + let result = MathView.export_to_postscript obj + ~width ~height ~x_margin ~y_margin ~disable_colors ~filename + in + if not result then raise (ErrorWritingFile filename) + method get_font_manager_type = MathView.get_font_manager_type obj + method set_font_manager_type ~fm_type = MathView.set_font_manager_type obj ~fm_type +end + +let math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width + ?width ?height ?packing ?show () = + let w = + MathView.create + ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth) + ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv) + () + in + Container.set w ?border_width ?width ?height; + let mathview = pack_return (new math_view w) ~packing ~show in + begin + match font_size with + | Some size -> mathview#set_font_size size + | None -> () + end; + begin + match font_manager with + | Some manager -> mathview#set_font_manager_type ~fm_type:manager + | None -> () + end; + mathview +;; diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml new file mode 100644 index 000000000..4c893fab4 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml @@ -0,0 +1,118 @@ +open Gtk +open Gtk_mathview +open Tags +open GtkBase +open Gpointer + +external mDOMNode_of_boxed_option : + Gpointer.boxed option -> Minidom.mDOMNode = + "ml_gtk_math_view_mDOMNode_of_bodex_option" + +external mDOMNode_option_of_boxed_option : + Gpointer.boxed option -> Minidom.mDOMNode option = + "ml_gtk_math_view_mDOMNode_option_of_bodex_option" + +let o_mDOMNode_of_mDOMNode node = new Ominidom.o_mDOMNode node + +let o_mDOMNode_option_of_mDOMNode_option = + function + | Some x -> Some (o_mDOMNode_of_mDOMNode x) + | None -> None + +let mDOMNode_option_of_o_mDOMNode_option = + function + | Some x -> Some (x#get_dom_node) + | None -> None + +module MathView = struct + exception NoSelection + + let cast w : math_view obj = Object.try_cast w "GtkMathView" + external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> + math_view obj = "ml_gtk_math_view_new" + let create ~adjustmenth ~adjustmentv () = + create (optboxed adjustmenth) (optboxed adjustmentv) + external load : [>`math_view] obj -> filename:string -> bool = + "ml_gtk_math_view_load" + external unload : [>`math_view] obj -> unit = + "ml_gtk_math_view_unload" + external raw_get_selection : [>`math_view] obj -> Minidom.mDOMNode option = + "ml_gtk_math_view_get_selection" + let get_selection obj = + o_mDOMNode_option_of_mDOMNode_option (raw_get_selection obj) + external raw_set_selection : [>`math_view] obj -> Minidom.mDOMNode option -> unit= + "ml_gtk_math_view_set_selection" + let set_selection obj node = + raw_set_selection obj (mDOMNode_option_of_o_mDOMNode_option node) + external get_width : [>`math_view] obj -> int = + "ml_gtk_math_view_get_width" + external get_height : [>`math_view] obj -> int = + "ml_gtk_math_view_get_height" + external get_top : [>`math_view] obj -> (int * int) = + "ml_gtk_math_view_get_top" + external set_top : [>`math_view] obj -> int -> int -> unit = + "ml_gtk_math_view_set_top" + external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit = + "ml_gtk_math_view_set_adjustments" + external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj = + "ml_gtk_math_view_get_hadjustment" + external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj = + "ml_gtk_math_view_get_vadjustment" + external get_buffer : [>`math_view] obj -> Gdk.pixmap = + "ml_gtk_math_view_get_buffer" + external get_frame : [>`math_view] obj -> [`frame] obj = + "ml_gtk_math_view_get_frame" + external set_font_size : [>`math_view] obj -> int -> unit = + "ml_gtk_math_view_set_font_size" + external get_font_size : [>`math_view] obj -> int = + "ml_gtk_math_view_get_font_size" + external set_anti_aliasing : [>`math_view] obj -> bool -> unit = + "ml_gtk_math_view_set_anti_aliasing" + external get_anti_aliasing : [>`math_view] obj -> bool = + "ml_gtk_math_view_get_anti_aliasing" + external set_kerning : [>`math_view] obj -> bool -> unit = + "ml_gtk_math_view_set_kerning" + external get_kerning : [>`math_view] obj -> bool = + "ml_gtk_math_view_get_kerning" + external set_log_verbosity : [>`math_view] obj -> int -> unit = + "ml_gtk_math_view_set_log_verbosity" + external get_log_verbosity : [>`math_view] obj -> int = + "ml_gtk_math_view_get_log_verbosity" + external export_to_postscript : + [>`math_view] obj -> width:int -> height:int -> x_margin:int -> y_margin:int -> disable_colors:bool -> filename:string -> bool = + "ml_gtk_math_view_export_to_postscript_bytecode" "ml_gtk_math_view_export_to_postscript_native" + external get_font_manager_type : [>`math_view] obj -> + [`font_manager_gtk | `font_manager_t1] = + "ml_gtk_math_view_get_font_manager_type" + external set_font_manager_type : [>`math_view] obj -> + fm_type:[`font_manager_gtk | `font_manager_t1] -> unit = + "ml_gtk_math_view_set_font_manager_type" + + module Signals = struct + open GtkSignal + + let clicked : ([>`math_view],_) t = + let marshal_clicked f _ = + function + [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node)) + | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked" + in + { name = "clicked"; marshaller = marshal_clicked } + + let jump : ([>`math_view],_) t = + let marshal_jump f _ = + function + [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node)) + | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump" + in + { name = "jump"; marshaller = marshal_jump } + + let selection_changed : ([>`math_view],_) t = + let marshal_selection_changed f _ = + function + [GtkArgv.POINTER node] -> f (o_mDOMNode_option_of_mDOMNode_option (mDOMNode_option_of_boxed_option node)) + | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_selection_changed" + in + { name = "selection_changed"; marshaller = marshal_selection_changed } + end +end diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml new file mode 100644 index 000000000..745a1ba82 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml @@ -0,0 +1 @@ +type math_view = [`widget|`container|`bin|`eventbox|`math_view] diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore new file mode 100644 index 000000000..84bdd8eff --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore @@ -0,0 +1 @@ +*.cmi *.cmo *.cmx test test.opt diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile new file mode 100644 index 000000000..6fe73af6a --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile @@ -0,0 +1,51 @@ +LIBDIR = /usr/lib/ocaml +INSTALLDIR = $(LIBDIR)/minidom +OBJECTS = minidom.cmi minidom.cmo ml_minidom.o ominidom.cmi ominidom.cmo +OBJECTS_OPT = minidom.cmx ominidom.cmx +INST = minidom.o ominidom.o ml_minidom.h minidom.mli + +all: $(OBJECTS) test + +opt: $(OBJECTS_OPT) test.opt + +ml_minidom.o: ml_minidom.c + gcc -c -I/usr/lib/ocaml/caml/ `glib-config --cflags` `minidom-config --cflags` $< + +minidom.cmi: minidom.mli + ocamlc -c $< + +minidom.cmo: minidom.ml minidom.cmi + ocamlc -c $< + +minidom.cmx: minidom.ml minidom.cmi + ocamlopt -c $< + +ominidom.cmi: ominidom.mli + ocamlc -c $< + +ominidom.cmo: ominidom.ml + ocamlc -c $< + +ominidom.cmx: ominidom.ml + ocamlopt -c $< + +test.cmo: test.ml minidom.cmo + ocamlc -c test.ml + +test.cmx: test.ml minidom.cmx + ocamlopt -c test.ml + +test: test.cmo minidom.cmo ml_minidom.o + ocamlc -custom -o test minidom.cmo test.cmo ml_minidom.o \ + -cclib "`glib-config --libs` `minidom-config --libs`" + +test.opt: test.cmx minidom.cmx ml_minidom.o + ocamlopt -o test.opt minidom.cmx test.cmx ml_minidom.o \ + -cclib "`glib-config --libs` `minidom-config --libs`" + +install: + if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi + cp $(OBJECTS) $(OBJECTS_OPT) $(INST) $(INSTALLDIR) + +clean: + rm -f *.o *.cm? test test.opt diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml new file mode 100644 index 000000000..31e677b3f --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml @@ -0,0 +1,61 @@ + +type mDOMString +type mDOMDoc +type mDOMNode +type mDOMAttr +type mDOMEntity + +external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString" +external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string" +external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq" + +external doc_load : string -> mDOMDoc = "ml_doc_load" +external doc_unload : mDOMDoc -> unit = "ml_doc_unload" + +external doc_new : mDOMString -> mDOMDoc = "ml_doc_new" +external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node" + +external doc_add_entity : mDOMDoc -> mDOMString -> mDOMString -> mDOMEntity = "ml_doc_add_entity" +external doc_get_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_entity" +external doc_get_predefined_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity" +external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content" + +external node_is_text : mDOMNode -> bool = "ml_node_is_text" +external node_is_element : mDOMNode -> bool = "ml_node_is_element" +external node_is_blank : mDOMNode -> bool = "ml_node_is_blank" +external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref" +external node_get_type : mDOMNode -> int = "ml_node_get_type" +external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name" +external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri" +external node_get_attribute : mDOMNode -> mDOMString -> mDOMString option = "ml_node_get_attribute" +external node_get_attribute_ns : mDOMNode -> mDOMString -> mDOMString -> mDOMString option = "ml_node_get_attribute_ns" +external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content" +external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent" +external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling" +external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling" +external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child" +external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute" +external node_is_first : mDOMNode -> bool = "ml_node_is_first" +external node_is_last : mDOMNode -> bool = "ml_node_is_last" + +external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name" +external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri" +external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value" +external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling" +external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling" +external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent" + +let rec node_list_of_node_first = + function None -> [] + | Some node -> node :: (node_list_of_node_first (node_get_next_sibling node)) + +let rec attr_list_of_attr_first = + function None -> [] + | Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr)) + +let node_get_children node = + (node_list_of_node_first (node_get_first_child node)) + +let node_get_attributes node = + (attr_list_of_attr_first (node_get_first_attribute node)) + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli new file mode 100644 index 000000000..0b655955b --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli @@ -0,0 +1,50 @@ + +type mDOMString +type mDOMDoc +type mDOMNode +type mDOMAttr +type mDOMEntity + +external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString" +external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string" +external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq" + +external doc_load : string -> mDOMDoc = "ml_doc_load" +external doc_unload : mDOMDoc -> unit = "ml_doc_unload" + +external doc_new : mDOMString -> mDOMDoc = "ml_doc_new" +external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node" + +external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity" +external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity" +external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity" +external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content" + +external node_is_text : mDOMNode -> bool = "ml_node_is_text" +external node_is_element : mDOMNode -> bool = "ml_node_is_element" +external node_is_blank : mDOMNode -> bool = "ml_node_is_blank" +external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref" +external node_get_type : mDOMNode -> int = "ml_node_get_type" +external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name" +external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri" +external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute" +external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns" +external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content" +external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent" +external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling" +external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling" +external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child" +external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute" +external node_is_first : mDOMNode -> bool = "ml_node_is_first" +external node_is_last : mDOMNode -> bool = "ml_node_is_last" + +external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name" +external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri" +external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value" +external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling" +external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling" +external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent" + +val node_get_children : mDOMNode -> mDOMNode list +val node_get_attributes : mDOMNode -> mDOMAttr list + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c new file mode 100644 index 000000000..10626143c --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c @@ -0,0 +1,288 @@ + +#include +#include +#include + +#include "minidom.h" + +#define Val_ptr(p) ((value) (p)) +#define Val_option(p,f) ((p != NULL) ? ml_some(f(p)) : Val_unit) +#define Val_mDOMString(s) (copy_string((char*) (s))) +#define mDOMString_val(v) ((mDOMStringRef) String_val(v)) + +static value +ml_some(value v) +{ + CAMLparam1(v); + value ret = alloc_small(1,0); + Field(ret,0) = v; + CAMLreturn(ret); +} + +value +ml_string_of_mDOMString(value s) +{ + CAMLparam1(s); + CAMLreturn(s); +} + +value +ml_mDOMString_of_string(value s) +{ + CAMLparam1(s); + CAMLreturn(s); +} + +value +ml_doc_load(value file_name) +{ + mDOMDocRef doc_ref; + + CAMLparam1(file_name); + + doc_ref = mdom_load(String_val(file_name), FALSE, NULL); + if (doc_ref == NULL) failwith("minidom: could not load document"); + + CAMLreturn((value) doc_ref); +} + +value +ml_doc_unload(value doc) +{ + CAMLparam1(doc); + + mdom_unload((mDOMDocRef) doc); + + CAMLreturn(Val_unit); +} + +value +ml_doc_new(value s) +{ + mDOMDocRef doc_ref; + + CAMLparam1(s); + + doc_ref = mdom_doc_new(mDOMString_val(s)); + if (doc_ref == NULL) failwith("minidom: could not create new document"); + + CAMLreturn((value) doc_ref); +} + + +value +ml_doc_get_root_node(value doc) +{ + mDOMNodeRef root; + + CAMLparam1(doc); + root = mdom_doc_get_root_node((mDOMDocRef) doc); + if (root == NULL) failwith("minidom: document has no root node!"); + + CAMLreturn((value) root); +} + +value +ml_doc_add_entity(value doc, value name, value content) +{ + mDOMEntityRef ent; + + CAMLparam3(doc, name, content); + ent = mdom_doc_add_entity((mDOMDocRef) doc, mDOMString_val(name), mDOMString_val(content)); + if (ent == NULL) failwith("minidom: could not add entity"); + + CAMLreturn((value) ent); +} + +value +ml_doc_get_entity(value doc, value name) +{ + mDOMEntityRef ent; + + CAMLparam2(doc, name); + ent = mdom_doc_get_entity((mDOMDocRef) doc, mDOMString_val(name)); + + CAMLreturn(Val_option(ent, Val_ptr)); +} + +value +ml_doc_get_predefined_entity(value name) +{ + mDOMEntityRef ent; + + CAMLparam1(name); + ent = mdom_get_predefined_entity(mDOMString_val(name)); + + CAMLreturn(Val_option(ent, Val_ptr)); +} + +value +ml_entity_get_content(value ent) +{ + CAMLparam1(ent); + CAMLreturn(Val_mDOMString(mdom_entity_get_content((mDOMEntityRef) ent))); +} + +value +ml_node_is_text(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node))); +} + +value +ml_node_is_element(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node))); +} + +value +ml_node_is_blank(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node))); +} + +value +ml_node_is_entity_ref(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node))); +} + +value +ml_node_get_type(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node))); +} + +value +ml_node_get_name(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMString)); +} + +value +ml_node_get_content(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString)); +} + +value +ml_node_get_ns_uri(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMString)); +} + +value +ml_node_get_attribute(value node, value name) +{ + CAMLparam2(node,name); + CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString)); +} + +value +ml_node_get_attribute_ns(value node, value name, value ns_uri) +{ + CAMLparam2(node,name); + CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node, + String_val(name), + String_val(ns_uri)), Val_mDOMString)); +} + +value +ml_node_get_parent(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr)); +} + +value +ml_node_get_prev_sibling(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr)); +} + +value +ml_node_get_next_sibling(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr)); +} + +value +ml_node_get_first_child(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr)); +} + +value +ml_node_get_first_attribute(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr)); +} + +value +ml_node_is_first(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node))); +} + +value +ml_node_is_last(value node) +{ + CAMLparam1(node); + CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node))); +} + +value +ml_attr_get_name(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMString)); +} + +value +ml_attr_get_ns_uri(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMString)); +} + +value +ml_attr_get_value(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString)); +} + +value +ml_attr_get_prev_sibling(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr)); +} + +value +ml_attr_get_next_sibling(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr)); +} + +value +ml_attr_get_parent(value attr) +{ + CAMLparam1(attr); + CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr)); +} + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h new file mode 100644 index 000000000..d22479964 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h @@ -0,0 +1,18 @@ + +#ifndef ml_minidom_h +#define ml_minidom_h + +#define Val_ptr(p) ((value) (p)) +#ifndef Val_option +#define Val_option(p,f) ((p != NULL) ? ml_some(f(p)) : Val_unit) +#endif /* Val_option */ +#define Val_mDOMString(s) (copy_string((char*) (s))) +#define mDOMString_val(v) ((mDOMStringRef) String_val(v)) +#define mDOMNode_val(v) ((mDOMNodeRef) v) + +#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit) +#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0)) +#define Val_mDOMNodeRef(p) (mDOMNode_option_mDOMNodeRef(p)) +#define mDOMNodeRef_val(v) (mDOMNodeRef_mDOMNode_option(v)) + +#endif /* ml_minidom_h */ diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml new file mode 100644 index 000000000..85ad2e4ed --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml @@ -0,0 +1,156 @@ + +exception Node_has_no_parent;; +exception Node_has_no_sibling of string;; +exception Node_has_no_children;; +exception Node_has_no_attributes;; +exception Attribute_has_no_sibling of string;; +exception Attribute_has_no_parent;; +exception Undefined_entity;; + +let option_to_exception v e = + match v with + Some x -> x + | None -> raise e +;; + +class o_mDOMString (str: Minidom.mDOMString) = + object + method get_dom_string = str + method get_string = Minidom.string_of_mDOMString str + end;; + +let o_mDOMString_of_string str = + new o_mDOMString (Minidom.mDOMString_of_string str) + +class o_mDOMEntity (ent : Minidom.mDOMEntity) = + object + method get_dom_entity = ent + method get_content = + new o_mDOMString (Minidom.entity_get_content ent) + end +;; + +class o_mDOMDoc (doc : Minidom.mDOMDoc) = + object + method get_dom_doc = doc + + method get_root_node = + new o_mDOMNode (Minidom.doc_get_root_node doc) + method add_entity (name : o_mDOMString) (value : o_mDOMString) = + new o_mDOMEntity + (Minidom.doc_add_entity doc + (name#get_dom_string) (value#get_dom_string) + ) + method get_entity (name : o_mDOMString) = + match Minidom.doc_get_entity doc (name#get_dom_string) with + | Some x -> new o_mDOMEntity x + | None -> raise Undefined_entity + method get_predefined_entity (name : o_mDOMString) = + match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with + | Some x -> new o_mDOMEntity x + | None -> raise Undefined_entity + end +and o_mDOMNode (node : Minidom.mDOMNode) = + object + method get_dom_node = node + + method is_text = Minidom.node_is_text node + method is_element = Minidom.node_is_element node + method is_blank = Minidom.node_is_blank node + method is_entity_ref = Minidom.node_is_entity_ref node + + method get_type = Minidom.node_get_type node + method get_name = + match Minidom.node_get_name node with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_ns_uri = + match Minidom.node_get_ns_uri node with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_attribute (name : o_mDOMString) = + match Minidom.node_get_attribute node (name#get_dom_string) with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) = + match + Minidom.node_get_attribute_ns node + (name#get_dom_string) (uri#get_dom_string) + with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_content = + match Minidom.node_get_content node with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_parent = + new o_mDOMNode + (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent) + method get_prev_sibling = + new o_mDOMNode + (option_to_exception + (Minidom.node_get_prev_sibling node) + (Node_has_no_sibling "left") + ) + method get_next_sibling = + new o_mDOMNode + (option_to_exception + (Minidom.node_get_next_sibling node) + (Node_has_no_sibling "right") + ) + method get_first_child = + new o_mDOMNode + (option_to_exception + (Minidom.node_get_first_child node) + (Node_has_no_children) + ) + method get_first_attribute = + new o_mDOMAttr + (option_to_exception + (Minidom.node_get_first_attribute node) + (Node_has_no_attributes) + ) + method is_first = Minidom.node_is_first node + method is_last = Minidom.node_is_last node + + method get_children = + List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node) + method get_attributes = List.map + (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node) + end +and o_mDOMAttr (attr : Minidom.mDOMAttr) = + object + method get_dom_attr = attr + + method get_name = + match Minidom.attr_get_name attr with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_ns_uri = + match Minidom.attr_get_ns_uri attr with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_value = + match Minidom.attr_get_value attr with + | Some x -> Some (new o_mDOMString x) + | None -> None + method get_prev_sibling = + new o_mDOMAttr + (option_to_exception + (Minidom.attr_get_prev_sibling attr) + (Attribute_has_no_sibling "left") + ) + method get_next_sibling = + new o_mDOMAttr + (option_to_exception + (Minidom.attr_get_next_sibling attr) + (Attribute_has_no_sibling "right") + ) + method get_parent = + new o_mDOMNode + (option_to_exception + (Minidom.attr_get_parent attr) Attribute_has_no_parent + ) + end +;; + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli new file mode 100644 index 000000000..24329544d --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli @@ -0,0 +1,64 @@ +exception Node_has_no_parent +exception Node_has_no_sibling of string +exception Node_has_no_children +exception Node_has_no_attributes +exception Attribute_has_no_sibling of string +exception Attribute_has_no_parent +exception Undefined_entity + +class o_mDOMString : Minidom.mDOMString -> + object + method get_dom_string : Minidom.mDOMString + method get_string : string + end + +val o_mDOMString_of_string : string -> o_mDOMString + +class o_mDOMEntity : Minidom.mDOMEntity -> + object + method get_content : o_mDOMString + method get_dom_entity : Minidom.mDOMEntity + end + +class o_mDOMDoc : Minidom.mDOMDoc -> + object + method add_entity : o_mDOMString -> o_mDOMString -> o_mDOMEntity + method get_dom_doc : Minidom.mDOMDoc + method get_entity : o_mDOMString -> o_mDOMEntity + method get_predefined_entity : o_mDOMString -> o_mDOMEntity + method get_root_node : o_mDOMNode + end +and o_mDOMNode : Minidom.mDOMNode -> + object + method get_attribute : o_mDOMString -> o_mDOMString option + method get_attribute_ns : + o_mDOMString -> o_mDOMString -> o_mDOMString option + method get_attributes : o_mDOMAttr list + method get_children : o_mDOMNode list + method get_content : o_mDOMString option + method get_dom_node : Minidom.mDOMNode + method get_first_attribute : o_mDOMAttr + method get_first_child : o_mDOMNode + method get_name : o_mDOMString option + method get_next_sibling : o_mDOMNode + method get_ns_uri : o_mDOMString option + method get_parent : o_mDOMNode + method get_prev_sibling : o_mDOMNode + method get_type : int + method is_blank : bool + method is_element : bool + method is_entity_ref : bool + method is_first : bool + method is_last : bool + method is_text : bool + end +and o_mDOMAttr : Minidom.mDOMAttr -> + object + method get_dom_attr : Minidom.mDOMAttr + method get_name : o_mDOMString option + method get_next_sibling : o_mDOMAttr + method get_ns_uri : o_mDOMString option + method get_parent : o_mDOMNode + method get_prev_sibling : o_mDOMAttr + method get_value : o_mDOMString option + end diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml new file mode 100644 index 000000000..3c7a092e9 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml @@ -0,0 +1,84 @@ + +let doc = Minidom.doc_load "test.xml" + +let root = Minidom.doc_get_root_node doc + +let check_attribute_ns attr = + Printf.printf "\n\n"; + let ns_uri = Minidom.attr_get_ns_uri attr + and attr_name = Minidom.attr_get_name attr + and attr_value = Minidom.attr_get_value attr + and parent = Minidom.attr_get_parent attr + in + match parent,ns_uri,attr_name,attr_value with + Some parent_node,Some uri,Some attribute_name,Some attribute_value -> + let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri + in begin + match attr_value with + Some attr1 -> + Printf.printf "found the attribute with ns %s (was %s)\n" + (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value) + | None -> + Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri) + end + | _ -> + Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n" +;; + +let print_attribute attr = + check_attribute_ns attr; + let ns_uri = Minidom.attr_get_ns_uri attr + in + begin + match ns_uri with + Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri); + | None -> () + end; + match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with + (Some attr_name, Some attr_value) -> + Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) + | (Some attr_name, _) -> + Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name) + | (_,_) -> + Printf.printf " ??? very strange attribute !!!" +;; + +let rec print_node n node = + if Minidom.node_is_blank node then () + else if Minidom.node_is_element node then begin + match Minidom.node_get_name node with + Some node_name -> + begin + let children = Minidom.node_get_children node + and attributes = Minidom.node_get_attributes node + and ns_uri = Minidom.node_get_ns_uri node + and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node) + in + for i = 1 to n do print_char ' ' done; + Printf.printf "<"; + begin + match ns_uri with + Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri) + | None -> () + end; + Printf.printf "%s" (Minidom.string_of_mDOMString node_name); + List.iter print_attribute attributes; + Printf.printf ">\n"; + List.iter (print_node (n + 2)) children; + for i = 1 to n do print_char ' ' done; + Printf.printf "\n" (Minidom.string_of_mDOMString node_name) + end + | None -> Printf.printf "??? this node has no name !!!\n" + end else if Minidom.node_is_text node then begin + match Minidom.node_get_content node with + Some node_content -> + for i = 1 to n do print_char ' ' done; + Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content) + | None -> Printf.printf "??? this node has no content !!!\n" + end else begin + Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node) + end +;; + +print_node 0 root;; + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml new file mode 100644 index 000000000..83d2eef68 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml @@ -0,0 +1,505 @@ + + + + + + + + DEFINITION and_ind() OF TYPE + + + + + + + + __ + + + + + + + + ( + + + + + Π + A + : + + Prop + + + + + + + . + + + + + Π + B + : + + Prop + + + + + + + . + + + + + Π + P + : + + Prop + + + + + + + . + + + + + Π + f + : + + ( + A + + + ( + B + + P + ) + + ) + + + + + + + . + + Π + a + : + + ( + and + + _ + + A + + _ + + B + ) + + . + P + + + + + + + + + + + + + + + + + + + + + + + + + + + + :> + + Prop + + + + + + + + ) + + + + + + + + cast + + prod + + A + + + Prop + + + + + prod + + B + + + Prop + + + + + prod + + P + + + Prop + + + + + prod + + f + + + arrow + A + + arrow + B + P + + + + + + prod + + a + + + app + and + A + B + + + + P + + + + + + + Prop + + + + + + + + + + + AS + + + + + + + + __ + + + + + + + λ + A + : + + Prop + + + + + + + . + + + + + λ + B + : + + Prop + + + + + + + . + + + + + λ + P + : + + Prop + + + + + + + . + + + + + λ + f + : + + ( + A + + + ( + B + + P + ) + + ) + + + + + + + . + + + + + λ + a + : + + ( + and + + _ + + A + + _ + + B + ) + + + + + + + . + + < + P + > + CASES + + _ + + a + + _ + + OF + + ( + conj + + _ + + $1 + + _ + + $2 + ) + + + + ( + f + + _ + + $1 + + _ + + $2 + ) + + + _ + + END + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A + + + Prop + + + + + + B + + + Prop + + + + + + P + + + Prop + + + + + + f + + + arrow + A + + arrow + B + P + + + + + + + a + + + app + and + A + B + + + + + mutcase + P + a + + app + conj + $1 + $2 + + + app + f + $1 + $2 + + + + + + + + + + + + + + diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c new file mode 100644 index 000000000..3c86f0057 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include "minidom/ml_minidom.h" + +/* : Next row should be put in a .h of lablgtk. */ +#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val) + +#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val) + +#define FontManagerId_val(val) Int_val(val) +#define Val_FontManagerId(val) Val_int(val) + +FontManagerId +font_manager_id_of_value(value v) +{ + if (v == hash_variant("font_manager_gtk")) return FONT_MANAGER_GTK; + else if (v == hash_variant("font_manager_t1")) return FONT_MANAGER_T1; + else assert(0); +} + +value +value_of_font_manager_id(FontManagerId id) +{ + switch (id) { + case FONT_MANAGER_GTK: + return hash_variant("font_manager_gtk"); + case FONT_MANAGER_T1: + return hash_variant("font_manager_t1"); + default: + assert(0); + break; + } +} + +ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink) +ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool) +ML_1 (gtk_math_view_unload, GtkMathView_val, Unit) +/*ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)*/ +ML_1 (gtk_math_view_get_selection, GtkMathView_val, Val_mDOMNodeRef) +ML_2 (gtk_math_view_set_selection, GtkMathView_val, mDOMNodeRef_val, Unit) +ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int) +ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int) +ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit) +ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit) +ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget) +ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget) +ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap) +ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget) +ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit) +ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int) +ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit) +ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool) +ML_2 (gtk_math_view_set_kerning, GtkMathView_val, Bool_val, Unit) +ML_1 (gtk_math_view_get_kerning, GtkMathView_val, Val_bool) +ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit) +ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int) +ML_2 (gtk_math_view_set_font_manager_type, GtkMathView_val, font_manager_id_of_value, Unit) +ML_1 (gtk_math_view_get_font_manager_type, GtkMathView_val, value_of_font_manager_id) + +value +ml_gtk_math_view_export_to_postscript_native(value arg1, + value w, value h, value x0, value y0, value disable_colors, value arg2) +{ + CAMLparam5(arg1,w,h,x0,y0); + CAMLxparam2(disable_colors, arg2); + + char *filename; + FILE *fd; + int res; + filename = String_val (arg2); + if ((fd = fopen(filename, "w"))) { + gtk_math_view_export_to_postscript(GtkMathView_val (arg1), + Int_val(w), Int_val(h), Int_val(x0), Int_val(y0), Bool_val(disable_colors), fd); + fclose (fd); + res = 1; + } else { + fprintf(stderr, "Error opening file %s for writing\n", filename); + res = 0; + } + CAMLreturn (Val_bool(res)); +} + +value ml_gtk_math_view_export_to_postscript_bytecode (value* arg, int argn) +{ + return ml_gtk_math_view_export_to_postscript_native(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]); +} + +value ml_gtk_math_view_get_top (value arg1) +{ + CAMLparam1(arg1); + CAMLlocal1 (result); + int x, y; + gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y); + result = alloc(2, 0); + Store_field(result, 0, Val_int(x)); + Store_field(result, 0, Val_int(y)); + CAMLreturn (result); +} + + +value ml_gtk_math_view_mDOMNode_of_bodex_option (value arg1) +{ + CAMLparam1(arg1); + + mDOMNodeRef nr; + CAMLlocal1 (tmp); + CAMLlocal1 (optval); + CAMLlocal1 (res); + + if (arg1==Val_int(0)) { + assert(0); + } else { + tmp = Field(arg1, 0); + nr = (mDOMNodeRef) Field(tmp, 1); + } + optval = Val_mDOMNodeRef(nr); + if (optval==Val_int(0)) { + assert(0); + } else { + res = Field(optval, 0); + } + + CAMLreturn(res); +} + +value ml_gtk_math_view_mDOMNode_option_of_bodex_option (value arg1) +{ + CAMLparam1(arg1); + + mDOMNodeRef nr; + CAMLlocal1 (tmp); + + if (arg1==Val_int(0)) { + nr=NULL; + } else { + tmp = Field(arg1, 0); + nr = (mDOMNodeRef) Field(tmp, 1); + } + + CAMLreturn(Val_mDOMNodeRef(nr)); +} diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore new file mode 100644 index 000000000..1968614b7 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore @@ -0,0 +1 @@ +*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile new file mode 100644 index 000000000..d631d239f --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile @@ -0,0 +1,45 @@ +LABLGTK_DIR = /usr/lib/ocaml/lablgtk +LABLGTK_MATHVIEW_DIR = .. +MINIDOM_DIR = ../minidom +OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \ + -I $(MINIDOM_DIR) -I mlmathview +OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \ + -I $(MINIDOM_DIR) -I mlmathview + +all: test +opt: test.opt + +test: test.cmo + $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \ + $(MINIDOM_DIR)/minidom.cmo \ + $(MINIDOM_DIR)/ominidom.cmo \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \ + -cclib "$(MINIDOM_DIR)/ml_minidom.o" \ + test.cmo \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" + +test.opt: test.cmx + $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \ + $(MINIDOM_DIR)/minidom.cmx \ + $(MINIDOM_DIR)/ominidom.cmx \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \ + -cclib "$(MINIDOM_DIR)/ml_minidom.o" \ + test.cmx \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" + +.SUFFIXES: .ml .mli .cmo .cmi .cmx +.ml.cmo: + $(OCAMLC) -c $< +.mli.cmi: + $(OCAMLC) -c $< +.ml.cmx: + $(OCAMLOPT) -c $< + +clean: + rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config new file mode 100644 index 000000000..afb669e95 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config @@ -0,0 +1,3 @@ +ENCODING=. +AFM=/usr/share/texmf/fonts/afm/ +TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:. diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml new file mode 100644 index 000000000..dd66d3885 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml @@ -0,0 +1,297 @@ +(******************************************************************************) +(* Claudio Sacerdoti Coen *) +(* 25/09/2000 *) +(* *) +(* This is a simple test for the OCaml (LablGtk indeed) binding of the *) +(* MathView widget *) +(******************************************************************************) + +(* Callbacks *) +let jump (node : Ominidom.o_mDOMNode) = + let module O = Ominidom in + print_string ("jump: " ^ + (match node#get_attribute (O.o_mDOMString_of_string "href") with + | Some x -> x#get_string + | None -> "NO HREF FOR THIS NODE" + ) ^ "\n"); + flush stdout +;; + +let selection_changed mathview (node : Ominidom.o_mDOMNode option) = + let module O = Ominidom in + print_string ("selection_changed: " ^ + (match node with + None -> "selection_changed on nothing" + | Some node -> + match node#get_name with + | Some x -> x#get_string + | None -> "on element without name" + ) ^ "\n"); + mathview#set_selection node; + flush stdout +;; + + +let clicked (node : Ominidom.o_mDOMNode) = + let module O = Ominidom in + print_string ("clicked: " ^ + (match node#get_name with + | Some x -> x#get_string + | None -> "no name" + ) ^ "\n"); + flush stdout +;; + + +let activate_t1 mathview () = + mathview#set_font_manager_type `font_manager_t1; + print_string "WIDGET SET WITH T1 FONTS\n" ; + flush stdout +;; + +let activate_gtk mathview () = + mathview#set_font_manager_type `font_manager_gtk; + print_string "WIDGET SET WITH GTK FONTS\n" ; + flush stdout +;; + +let get_font_manager_type mathview () = + print_string "CURRENT FONT MANAGER TYPE: "; + begin + match mathview#get_font_manager_type with + | `font_manager_t1 -> print_string "T1" + | `font_manager_gtk -> print_string "GTK" + end; + print_newline(); + flush stdout +;; + +let load mathview () = + mathview#load "test.xml" ; + print_string "load: SEEMS TO WORK\n" ; + flush stdout +;; + +let get_selection mathview () = + let module O = Ominidom in + let selection = + match mathview#get_selection with + | Some node -> + begin + match node#get_name with + | Some name -> name#get_string + | None -> "element with no name!" + end + | None -> "no selection!" + in + print_string ("get_selection: " ^ selection ^ "\n") ; + flush stdout +;; + +let set_selection mathview () = + let module O = Ominidom in + begin + match mathview#get_selection with + | Some node -> + begin + try + let parent_node = node#get_parent in + mathview#set_selection (Some parent_node); + print_string "set selection: SEEMS TO WORK\n" + with + _ -> print_string "EXCEPTION: no parent\n" + end + | None -> + mathview#set_selection None; + print_string "no selection\n" + end ; + flush stdout +;; + +let unload mathview () = + mathview#unload ; + print_string "unload: SEEMS TO WORK\n" ; + flush stdout +;; + +let get_width mathview () = + print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ; + flush stdout +;; + +let get_height mathview () = + print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ; + flush stdout +;; + +let get_top mathview () = + let (x,y) = mathview#get_top in + print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ; + flush stdout +;; + +let set_top mathview () = + mathview#set_top 0 0; + print_string "set_top: SEEM TO WORK\n" ; + flush stdout +;; + +let set_adjustments mathview () = + let adj1 = GData.adjustment () in + let adj2 = GData.adjustment () in + mathview#set_adjustments adj1 adj2 ; + adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ; + adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ; + print_string "set_adjustments: SEEM TO WORK\n" ; + flush stdout +;; + +let get_hadjustment mathview () = + let adj = mathview#get_hadjustment in + adj#set_value ((adj#lower +. adj#upper) /. 2.0) ; + print_string "get_hadjustment: SEEM TO WORK\n" ; + flush stdout +;; + +let get_vadjustment mathview () = + let adj = mathview#get_vadjustment in + adj#set_value ((adj#lower +. adj#upper) /. 2.0) ; + print_string "get_vadjustment: SEEM TO WORK\n" ; + flush stdout +;; + +let get_buffer mathview () = + let buffer = mathview#get_buffer in + Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0 + ~width:50 ~height:50 ~filled:true () ; + print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n"; + flush stdout +;; + +let get_frame mathview () = + let frame = mathview#get_frame in + frame#set_shadow_type `NONE ; + print_string "get_frame: SEEMS TO WORK\n" ; + flush stdout +;; + +let set_font_size mathview () = + mathview#set_font_size 24 ; + print_string "set_font_size: FONT IS NOW 24\n" ; + flush stdout +;; + +let get_font_size mathview () = + print_string ("get_font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ; + flush stdout +;; + +let set_anti_aliasing mathview () = + mathview#set_anti_aliasing true ; + print_string "set_anti_aliasing: ON\n" ; + flush stdout +;; + +let get_anti_aliasing mathview () = + print_string ("get_anti_aliasing: " ^ + (match mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^ + "\n") ; + flush stdout +;; + +let set_kerning mathview () = + mathview#set_kerning true ; + print_string "set_kerning: ON\n" ; + flush stdout +;; + +let get_kerning mathview () = + print_string ("get_kerning: " ^ + (match mathview#get_kerning with true -> "ON" | false -> "OFF") ^ + "\n") ; + flush stdout +;; + +let set_log_verbosity mathview () = + mathview#set_log_verbosity 3 ; + print_string "set_log_verbosity: NOW IS 3\n" ; + flush stdout +;; + +let get_log_verbosity mathview () = + print_string ("get_log_verbosity: " ^ + string_of_int mathview#get_log_verbosity ^ + "\n") ; + flush stdout +;; + +let export_to_postscript (mathview : GMathView.math_view) () = + mathview#export_to_postscript ~filename:"test.ps" (); + print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n"; + flush stdout +;; + +(* Widget creation *) +let main_window = GWindow.window ~title:"GtkMathView test" () in +let vbox = GPack.vbox ~packing:main_window#add () in +let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in +let mathview= GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in +let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in +let button_gtk=GButton.button ~label:"activate Gtk fonts" ~packing:(table#attach ~left:0 ~top:0) () in +let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in +let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in +let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in +let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in +let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in +let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in +let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in +let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in +let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in +let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in +let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in +let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in +let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in +let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in +let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in +let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in +let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in +let button_set_kerning = GButton.button ~label:"set_kerning" ~packing:(table#attach ~left:3 ~top:3) () in +let button_get_kerning = GButton.button ~label:"get_kerning" ~packing:(table#attach ~left:4 ~top:3) () in +let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in +let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in +let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in +let button_t1 = GButton.button ~label:"activate T1 fonts" ~packing:(table#attach ~left:3 ~top:4) () in +let button_get_font_manager_type = GButton.button ~label:"get_font_manager" ~packing:(table#attach ~left:4 ~top:4) () in +(* Signals connection *) +ignore(button_gtk#connect#clicked (activate_gtk mathview)) ; +ignore(button_load#connect#clicked (load mathview)) ; +ignore(button_unload#connect#clicked (unload mathview)) ; +ignore(button_get_selection#connect#clicked (get_selection mathview)) ; +ignore(button_set_selection#connect#clicked (set_selection mathview)) ; +ignore(button_get_width#connect#clicked (get_width mathview)) ; +ignore(button_get_height#connect#clicked (get_height mathview)) ; +ignore(button_get_top#connect#clicked (get_top mathview)) ; +ignore(button_set_top#connect#clicked (set_top mathview)) ; +ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ; +ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ; +ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ; +ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ; +ignore(button_get_frame#connect#clicked (get_frame mathview)) ; +ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ; +ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ; +ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ; +ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ; +ignore(button_set_kerning#connect#clicked (set_kerning mathview)) ; +ignore(button_get_kerning#connect#clicked (get_kerning mathview)) ; +ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ; +ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ; +ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ; +ignore(button_t1#connect#clicked (activate_t1 mathview)) ; +ignore(button_get_font_manager_type#connect#clicked (get_font_manager_type mathview)) ; +ignore(mathview#connect#jump jump) ; +ignore(mathview#connect#clicked clicked) ; +ignore(mathview#connect#selection_changed (selection_changed mathview)) ; +(* Main Loop *) +main_window#show () ; +GMain.Main.main () +;; diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml new file mode 100644 index 000000000..b0f8c1563 --- /dev/null +++ b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml @@ -0,0 +1,123 @@ + + + + + + + + a + + x + + + + b + + + + x + 2 + + + + + p + + x + + + + q + + + + d + x + = + + + a2 + + + ln + + + ( + + x2 + + + + p + + x + + + + q + + ) + + + + + + + + + + 2 + + b + + - + + a + + p + + + + + + 4 + + q + + - + + p + 2 + + + + + + + arctg + + + + + 2 + + x + + + + p + + + + + 4 + + q + + - + + p + 2 + + + + + + + + + c + + diff --git a/helm/cgi/mkindex.pl b/helm/cgi/mkindex.pl new file mode 100755 index 000000000..9bc41ef11 --- /dev/null +++ b/helm/cgi/mkindex.pl @@ -0,0 +1,93 @@ +#!/usr/bin/perl + +# the required file defines: $helm_dir, $helm_url_path, $getheader_url, +# $style_url, $webeq_url, $webeqp_url +require "/local/lib/helm/configuration.pl"; + +$baseuri0 = $dirname = $uri = $ENV{"REQUEST_URI"}; + +$dirname =~ s/$helm_url_path//; +$dirname = $helm_dir.$dirname; + +$baseuri0 =~ s/$helm_url_path//; + +opendir(DIR, $dirname); +@filenames = readdir(DIR); +closedir(DIR); + +$output = ""; +foreach $i (@filenames) { + if ($i eq "..") { + $output .= < Parent Directory +EOT + } elsif ($i !~ /^\./) { + # hidden files excluded + (undef,undef,$mode) = stat("$dirname$i"); + if ($mode &= 16384) { + # directory + $output .= < $i +EOT + } else { + # file + if ($i =~ /\.(con|var|ind)\.xml$/) { + my $i_without_xml = $i; + $i_without_xml =~ s/(.*)\.xml/$1/; + # cic file + my $baseuri = "cic:".$baseuri0; + $output .= < $i MathML HTML WEBEQ WEBEQ PRESENTATION ONLY +EOT + } elsif ($i =~ /\.(con|var|ind)\.ann\.xml$/) { + my $i_without_xml = $i; + my $i_without_ann_and_xml = $i; + $i_without_xml =~ s/(.*)\.xml/$1/; + $i_without_ann_and_xml =~ s/(.*)\.ann\.xml/$1/; + # cic file + my $baseuri = "cic:".$baseuri0; + $output .= < $i MathML HTML WEBEQ WEBEQ PRESENTATION ONLY +EOT + } elsif ($i =~ /\.theory\.xml$/) { + my $i_without_xml = $i; + $i_without_xml =~ s/(.*)\.xml/$1/; + # theory file + my $baseuri = "theory:".$baseuri0; + $output .= < $i MathML HTML +EOT + } else { + # other file + $output .= < $i +EOT + } + } + } +} + +print < + + +Index of $uri + + +
+Index of $uri +
+


+
+$output
+
+
+ + +EOT diff --git a/helm/configuration/local/etc/helm/configuration.dtd b/helm/configuration/local/etc/helm/configuration.dtd new file mode 100644 index 000000000..2a2428d1d --- /dev/null +++ b/helm/configuration/local/etc/helm/configuration.dtd @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/configuration/local/etc/helm/configuration.xml b/helm/configuration/local/etc/helm/configuration.xml new file mode 100644 index 000000000..0a007fc5b --- /dev/null +++ b/helm/configuration/local/etc/helm/configuration.xml @@ -0,0 +1,22 @@ + + + + + /home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples + + /dtd + /home/pauillac/coq3/sacerdot/HELM/INTERFACE/servers.txt + /home/pauillac/coq3/sacerdot/HELM/INTERFACE/urls_of_uris + + index.txt + /tmp + + /home/lpadovan/helm/PARSER/examples + http://localhost/really_very_local/helm/header/getheader.xml + http://localhost/really_very_local/helm/style/ + http://localhost/cgi-bin/helm/webeq.pl + http://localhost/cgi-bin/helm/webeqp.pl + http://localhost/cgi-bin/helm/use_webeqp.pl + ?baseurl=&stylesheet1=rootcontent.xsl&stylesheet2=content_to_html.xsl&xmlfile= + http://localhost:8081/getwithtypes?url= + diff --git a/helm/configuration/local/lib/helm/configuration.pl b/helm/configuration/local/lib/helm/configuration.pl new file mode 100644 index 000000000..deea890a8 --- /dev/null +++ b/helm/configuration/local/lib/helm/configuration.pl @@ -0,0 +1,35 @@ +use XML::Parser; + +# this should be the only fixed constant +$configuration_file = "/home/cadet/sacerdot/local/etc/helm/configuration.xml"; + +$parser = new XML::Parser(Handlers => {Start => \&handle_start, + End => \&handle_end, + Char => \&handle_char}); + + +$parser->parsefile($configuration_file, ErrorContext => 3); + + +sub handle_start +{ + if ($_[1] eq "value-of") { + $$varname .= ${$_[3]}; + } elsif ($_[1] ne "configuration") { + $varname = $_[1]; + } +} + +sub handle_end +{ + if ($_[1] ne "value-of" && $_[1] ne "configuration") { + # Next line for debugging only: + # print "OK: #$_[1]# := #$$varname#\n"; + $varname = undef; + } +} + +sub handle_char +{ + $$varname .= $_[1]; +} diff --git a/helm/dtd/annotations.dtd b/helm/dtd/annotations.dtd new file mode 100644 index 000000000..c7d379983 --- /dev/null +++ b/helm/dtd/annotations.dtd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/cic.dtd b/helm/dtd/cic.dtd new file mode 100644 index 000000000..e16b10287 --- /dev/null +++ b/helm/dtd/cic.dtd @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/cicobject.dtd b/helm/dtd/cicobject.dtd new file mode 100644 index 000000000..1d9917b10 --- /dev/null +++ b/helm/dtd/cicobject.dtd @@ -0,0 +1,97 @@ + + + + + + + + + +%mathml; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamsa.ent b/helm/dtd/isoamsa.ent new file mode 100644 index 000000000..5ecf4db21 --- /dev/null +++ b/helm/dtd/isoamsa.ent @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamsb.ent b/helm/dtd/isoamsb.ent new file mode 100644 index 000000000..08e646c2b --- /dev/null +++ b/helm/dtd/isoamsb.ent @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamsc.ent b/helm/dtd/isoamsc.ent new file mode 100644 index 000000000..cce399cf9 --- /dev/null +++ b/helm/dtd/isoamsc.ent @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamsn.ent b/helm/dtd/isoamsn.ent new file mode 100644 index 000000000..cddeba066 --- /dev/null +++ b/helm/dtd/isoamsn.ent @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamso.ent b/helm/dtd/isoamso.ent new file mode 100644 index 000000000..8ac4bdb61 --- /dev/null +++ b/helm/dtd/isoamso.ent @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isoamsr.ent b/helm/dtd/isoamsr.ent new file mode 100644 index 000000000..7fec58255 --- /dev/null +++ b/helm/dtd/isoamsr.ent @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isobox.ent b/helm/dtd/isobox.ent new file mode 100644 index 000000000..630edc559 --- /dev/null +++ b/helm/dtd/isobox.ent @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isocyr1.ent b/helm/dtd/isocyr1.ent new file mode 100644 index 000000000..4bcc9e416 --- /dev/null +++ b/helm/dtd/isocyr1.ent @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isocyr2.ent b/helm/dtd/isocyr2.ent new file mode 100644 index 000000000..67c477b24 --- /dev/null +++ b/helm/dtd/isocyr2.ent @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isodia.ent b/helm/dtd/isodia.ent new file mode 100644 index 000000000..ba6496300 --- /dev/null +++ b/helm/dtd/isodia.ent @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isogrk3.ent b/helm/dtd/isogrk3.ent new file mode 100644 index 000000000..fa0335504 --- /dev/null +++ b/helm/dtd/isogrk3.ent @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isolat1.ent b/helm/dtd/isolat1.ent new file mode 100644 index 000000000..849d360ae --- /dev/null +++ b/helm/dtd/isolat1.ent @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isolat2.ent b/helm/dtd/isolat2.ent new file mode 100644 index 000000000..3049be7f1 --- /dev/null +++ b/helm/dtd/isolat2.ent @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isomfrk.ent b/helm/dtd/isomfrk.ent new file mode 100644 index 000000000..d3d92aaee --- /dev/null +++ b/helm/dtd/isomfrk.ent @@ -0,0 +1,79 @@ + + + +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > diff --git a/helm/dtd/isomopf.ent b/helm/dtd/isomopf.ent new file mode 100644 index 000000000..6b5e01f79 --- /dev/null +++ b/helm/dtd/isomopf.ent @@ -0,0 +1,53 @@ + + + +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > diff --git a/helm/dtd/isomscr.ent b/helm/dtd/isomscr.ent new file mode 100644 index 000000000..75d3bc5df --- /dev/null +++ b/helm/dtd/isomscr.ent @@ -0,0 +1,79 @@ + + + +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > +" > diff --git a/helm/dtd/isonum.ent b/helm/dtd/isonum.ent new file mode 100644 index 000000000..d6d346169 --- /dev/null +++ b/helm/dtd/isonum.ent @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isopub.ent b/helm/dtd/isopub.ent new file mode 100644 index 000000000..5591fc390 --- /dev/null +++ b/helm/dtd/isopub.ent @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/isotech.ent b/helm/dtd/isotech.ent new file mode 100644 index 000000000..8b30af833 --- /dev/null +++ b/helm/dtd/isotech.ent @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/mathml2-qname-1.mod b/helm/dtd/mathml2-qname-1.mod new file mode 100644 index 000000000..4dea63a00 --- /dev/null +++ b/helm/dtd/mathml2-qname-1.mod @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + +]]> + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/mathml2.dtd b/helm/dtd/mathml2.dtd new file mode 100644 index 000000000..a9b7bf1ac --- /dev/null +++ b/helm/dtd/mathml2.dtd @@ -0,0 +1,1948 @@ + + + + + + + + + +%mathml-qname.mod;]]> + + +--> + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%ent-isoamsa; + + +%ent-isoamsb; + + +%ent-isoamsc; + + +%ent-isoamsn; + + +%ent-isoamso; + + +%ent-isoamsr; + + +%ent-isogrk3; + + +%ent-isomfrk; + + +%ent-isomopf; + + +%ent-isomscr; + + +%ent-isotech; + + + + +%ent-isobox; + + +%ent-isocyr1; + + +%ent-isocyr2; + + +%ent-isodia; + + +%ent-isolat1; + + +%ent-isolat2; + + +%ent-isonum; + + +%ent-isopub; + + + + +%ent-mmlextra; + + + + +%ent-mmlalias; + +]]> + + + + + + diff --git a/helm/dtd/maththeory.dtd b/helm/dtd/maththeory.dtd new file mode 100644 index 000000000..85469b6ce --- /dev/null +++ b/helm/dtd/maththeory.dtd @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/mmlalias.ent b/helm/dtd/mmlalias.ent new file mode 100644 index 000000000..f5901b384 --- /dev/null +++ b/helm/dtd/mmlalias.ent @@ -0,0 +1,529 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/mmlextra.ent b/helm/dtd/mmlextra.ent new file mode 100644 index 000000000..e76de448c --- /dev/null +++ b/helm/dtd/mmlextra.ent @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/dtd/provastruct.theory.xml b/helm/dtd/provastruct.theory.xml new file mode 100644 index 000000000..23c8f7c6d --- /dev/null +++ b/helm/dtd/provastruct.theory.xml @@ -0,0 +1,158 @@ + + + +
+ +
+ + cast + + Prop + + + Type + + + +
+ + cast + + Prop + + + Type + + + + 1: A 0: B + cast + + arrow + A + + arrow + arrow + A + + B + + + B + + + + + Prop + + + + 1: A 0: B + A0 + A + + H + arrow + A + + B + + + app + conj + A + B + A0 + app + axiom + A0 + H + + + + + + cast + + arrow + A + + arrow + arrow + A + + B + + + AB + + + + + Prop + + + +
+
+ + cast + + Set + + + Type + + + + 1: A + cast + + prodA + Prop + + arrow + A + + A + + + + + Prop + + + +
+ 0: A + A0 + Prop + + H + A0 + + H + + + + cast + + prodA + Prop + + arrow + A + + A + + + + + Prop + + + +
+
+ + diff --git a/helm/dtd/theoryobject.dtd b/helm/dtd/theoryobject.dtd new file mode 100644 index 000000000..8ff26cfb2 --- /dev/null +++ b/helm/dtd/theoryobject.dtd @@ -0,0 +1,14 @@ + + + + + + + + + +%cicobj; + + + + diff --git a/helm/header/getheader.xml b/helm/header/getheader.xml new file mode 100644 index 000000000..a0f903f87 --- /dev/null +++ b/helm/header/getheader.xml @@ -0,0 +1,21 @@ + + + + + + + + + String baseURL = request.getParameter("baseurl"); + String styleURL1 = request.getParameter("stylesheet1"); + String styleURL2 = request.getParameter("stylesheet2"); + String xmlURI = request.getParameter("xmluri"); + String annURI = request.getParameter("annuri"); + + baseURL + styleURL1 + styleURL2 + xmlURI + annURI + + diff --git a/helm/header/provaurl b/helm/header/provaurl new file mode 100644 index 000000000..86344dc78 --- /dev/null +++ b/helm/header/provaurl @@ -0,0 +1 @@ +http://phd.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=mmlextension.xsl&xmlfile=file:///really_very_local/helm/PARSER/examples/prove/provaIota/bool_ind.con.xml diff --git a/helm/header/provaurl1 b/helm/header/provaurl1 new file mode 100644 index 000000000..d95769884 --- /dev/null +++ b/helm/header/provaurl1 @@ -0,0 +1,2 @@ +http://cartoonia.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=content_to_html.xsl&xmlfile=/really_very_local/helm/PARSER/examples/prove/prova/forest_rec.con.xml:wq + diff --git a/helm/header/setheader.xsl b/helm/header/setheader.xsl new file mode 100644 index 000000000..a1ba13199 --- /dev/null +++ b/helm/header/setheader.xsl @@ -0,0 +1,33 @@ + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + type="text/xml" + href="" type="text/xsl" + type="xslt" + + + + + + + + + + + + + diff --git a/helm/http_getter/cadet b/helm/http_getter/cadet new file mode 100755 index 000000000..2b84119fa --- /dev/null +++ b/helm/http_getter/cadet @@ -0,0 +1,9 @@ +#! /bin/sh + +# WARNING!!! No "//" in the middle of the path, nor a "/" at the end!!!! + +# For V6.2 +export HELM_CONFIGURATION_PREFIX=~/HELM/installation + +# For V7 +#export HELM_CONFIGURATION_PREFIX=/home/cadet/sacerdot diff --git a/helm/http_getter/http_getter.pl b/helm/http_getter/http_getter.pl new file mode 100755 index 000000000..1d99e65ce --- /dev/null +++ b/helm/http_getter/http_getter.pl @@ -0,0 +1,329 @@ +#!/usr/bin/perl + +# First of all, let's load HELM configuration +use Env; +my $HELM_CONFIGURATION_PREFIX = $ENV{"HELM_CONFIGURATION_PREFIX"}; +my $HELM_CONFIGURATION_PATH = + $HELM_CONFIGURATION_PREFIX."/local/lib/helm/configuration.pl"; +# next require defines: $helm_dir, $html_link +require $HELM_CONFIGURATION_PATH; + + + +use HTTP::Daemon; +use HTTP::Status; +use HTTP::Request; +use LWP::UserAgent; +use DB_File; + +my $cont = ""; +my $d = new HTTP::Daemon LocalPort => 8081; +tie(%map, 'DB_File', $uris_dbm.".db", O_RDONLY, 0664); +print "Please contact me at: url, ">\n"; +print "helm_dir: $helm_dir\n"; +print "urls_of_uris.db: $uris_dbm.db\n"; +$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes +while (my $c = $d->accept) { + if (fork() == 0) { + while (my $r = $c->get_request) { + #CSC: mancano i controlli di sicurezza + + $cont = ""; + my $cicuri = $r->url; + $cicuri =~ s/^[^?]*\?url=(.*)/$1/; + print "*".$r->url."\n"; + my $http_method = $r->method; + my $http_path = $r->url->path; + if ($http_method eq 'GET' and $http_path eq "/get") { + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + $filename = $helm_dir.$filename.".xml"; + my $resolved = $map{$cicuri}; + print "$cicuri ==> $resolved ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "Downloading\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file\n"; + mkdirs($filename); + open(FD, ">".$filename); + print FD $cont; + close(FD); + + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } + } elsif ($http_method eq 'GET' and $http_path eq "/annotate") { + my $do_annotate = ($cicuri =~ /\.ann$/); + my $target_to_annotate = $cicuri; + $target_to_annotate =~ s/(.*)\.ann$/$1/ if $do_annotate; + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + $filename_target =~ s/(.*)\.ann$/$1.xml/ if $do_annotate; + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } else { + print "$cicuri ==> $resolved ($filename)\n"; + } + + # Retrieves the annotation + + if (stat($filename)) { + print "Using local copy for the annotation\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the annotation\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file for the annotation\n"; + mkdirs($filename); + open(FD, ">".$filename); + print FD $cont; + close(FD); + } + my $annotation = $cont; + + # Retrieves the target to annotate + + $cont = ""; + if ($do_annotate) { + if (stat($filename_target)) { + print "Using local copy for the file to annotate\n"; + open(FD, $filename_target); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the file to annotate\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved_target"); + $response = $ua->request($request, \&callback); + + print "Storing file for the file to annotate\n"; + mkdirs($filename_target); + open(FD, ">".$filename_target); + print FD $cont; + close(FD); + } + } + my $target = $cont; + + # Merging the annotation and the target + + $target =~ s/<\?xml [^?]*\?>//sg; + $target =~ s/]*>//sg; + $annotation =~ s/<\?xml [^?]*\?>//sg; + $annotation =~ s/]*>//sg; + my $merged = < + +$target +$annotation + +EOT + + # Answering the client + + my $res = new HTTP::Response; + $res->content($merged); + $c->send_response($res); + } elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") { + my $mode; + my $do_annotate; + if ($cicuri =~ /\.types$/) { + $do_annotate = 1; + $mode = "types"; + } elsif ($cicuri =~ /\.ann$/) { + $do_annotate = 1; + $mode = "ann"; + } else { + $do_annotate = 0; + } + my $target_to_annotate = $cicuri; + if ($mode eq "types") { + $target_to_annotate =~ s/(.*)\.types$/$1/; + } elsif ($mode eq "ann") { + $target_to_annotate =~ s/(.*)\.ann$/$1/; + } + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + if ($mode eq "types") { + $filename_target =~ s/(.*)\.types$/$1.xml/; + } elsif ($mode eq "ann") { + $filename_target =~ s/(.*)\.ann$/$1.xml/; + } + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "GETWITHTYPES!!\n" if ($mode eq "types"); + print "GETWITHANN!!\n" if ($mode eq "ann"); + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } else { + print "$cicuri ==> $resolved ($filename)\n"; + } + + # Retrieves the annotation + + if (stat($filename)) { + print "Using local copy for the types\n" if ($mode eq "types"); + print "Using local copy for the ann\n" if ($mode eq "ann"); + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the types\n" if ($mode eq "types"); + print "Downloading the ann\n" if ($mode eq "ann"); + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file for the types\n" if ($mode eq "types"); + print "Storing file for the ann\n" if ($mode eq "ann"); + mkdirs($filename); + open(FD, ">".$filename); + print FD $cont; + close(FD); + } + my $annotation = $cont; + + # Retrieves the target to annotate + + $cont = ""; + my $target; + if ($do_annotate) { + if (stat($filename_target)) { + print "Using local copy for the file to type\n"; + open(FD, $filename_target); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the file to type\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved_target"); + $response = $ua->request($request, \&callback); + + print "Storing file for the file to type\n"; + mkdirs($filename_target); + open(FD, ">".$filename_target); + print FD $cont; + close(FD); + } + $target = $cont; + } else { + $target = $annotation; + $annotation = ""; + } + + # Merging the annotation and the target + + $target =~ s/<\?xml [^?]*\?>//sg; + $target =~ s/]*>//sg; + $annotation =~ s/<\?xml [^?]*\?>//sg; + $annotation =~ s/]*>//sg; + my $element, $endelement; + if ($mode eq "types") { + $element = ""; + $endelement = ""; + } elsif ($mode eq "ann") { + $element = ""; + $endelement = ""; + } + my $merged = < + +$target +$element +$annotation +$endelement + +EOT + + # Answering the client + + my $res = new HTTP::Response; + $res->content($merged); + $c->send_response($res); + } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") { + my $filename = $cicuri; + $filename = $helm_dir."/dtd/".$filename; + print "DTD: $cicuri ==> ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + die "Could not find DTD!"; + } + } elsif ($http_method eq 'GET' and $http_path eq "/conf") { + my $quoted_html_link = $html_link; + $quoted_html_link =~ s/&/&/g; + $quoted_html_link =~ s//>/g; + $quoted_html_link =~ s/'/'/g; + $quoted_html_link =~ s/"/"/g; + print "Configuration requested, returned #$quoted_html_link#\n"; + $cont = "$quoted_html_link"; + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "INVALID REQUEST!!!!!\n"; + $c->send_error(RC_FORBIDDEN) + } + } + $c->close; + undef($c); + print "\nCONNECTION CLOSED\n\n"; + exit; + } # fork +} + +#================================ + +sub callback +{ + my ($data) = @_; + $cont .= $data; +} + +# Does not raise errors if could not create dirs/files + +# Too much powerful: creates even /home, /home/users/, ... +sub mkdirs +{ + my ($pathname) = @_; + my @dirs = split /\//,$pathname; + my $tmp; + foreach $dir (@dirs) { + $tmp = ((defined($tmp)) ? $tmp = $tmp."\/".$dir : ""); + mkdir($tmp,0777); + } + rmdir($tmp); +} diff --git a/helm/interface/.depend b/helm/interface/.depend new file mode 100644 index 000000000..a495dfeab --- /dev/null +++ b/helm/interface/.depend @@ -0,0 +1,92 @@ +experiment.cmo: cicCache.cmi cicPp.cmi configuration.cmo getter.cmi \ + uriManager.cmi +experiment.cmx: cicCache.cmx cicPp.cmx configuration.cmx getter.cmx \ + uriManager.cmx +cicCache.cmo: annotationParser.cmo cic.cmo cicParser.cmi cicSubstitution.cmi \ + deannotate.cmo getter.cmi uriManager.cmi cicCache.cmi +cicCache.cmx: annotationParser.cmx cic.cmx cicParser.cmx cicSubstitution.cmx \ + deannotate.cmx getter.cmx uriManager.cmx cicCache.cmi +cicCache.cmi: cic.cmo uriManager.cmi +cicPp.cmo: cic.cmo cicCache.cmi uriManager.cmi cicPp.cmi +cicPp.cmx: cic.cmx cicCache.cmx uriManager.cmx cicPp.cmi +cicPp.cmi: cic.cmo +cicParser.cmo: cicParser2.cmi cicParser3.cmi pxpUriResolver.cmo \ + uriManager.cmi cicParser.cmi +cicParser.cmx: cicParser2.cmx cicParser3.cmx pxpUriResolver.cmx \ + uriManager.cmx cicParser.cmi +cicParser.cmi: cic.cmo uriManager.cmi +cicParser2.cmo: cic.cmo cicParser3.cmi uriManager.cmi cicParser2.cmi +cicParser2.cmx: cic.cmx cicParser3.cmx uriManager.cmx cicParser2.cmi +cicParser2.cmi: cic.cmo cicParser3.cmi +cicParser3.cmo: cic.cmo uriManager.cmi cicParser3.cmi +cicParser3.cmx: cic.cmx uriManager.cmx cicParser3.cmi +cicParser3.cmi: cic.cmo uriManager.cmi +cic.cmo: uriManager.cmi +cic.cmx: uriManager.cmx +getter.cmo: configuration.cmo uriManager.cmi getter.cmi +getter.cmx: configuration.cmx uriManager.cmx getter.cmi +getter.cmi: uriManager.cmi +cicReduction.cmo: cic.cmo cicCache.cmi cicPp.cmi cicSubstitution.cmi \ + uriManager.cmi cicReduction.cmi +cicReduction.cmx: cic.cmx cicCache.cmx cicPp.cmx cicSubstitution.cmx \ + uriManager.cmx cicReduction.cmi +cicReduction.cmi: cic.cmo +cicTypeChecker.cmo: cic.cmo cicCache.cmi cicPp.cmi cicReduction.cmi \ + cicSubstitution.cmi uriManager.cmi cicTypeChecker.cmi +cicTypeChecker.cmx: cic.cmx cicCache.cmx cicPp.cmx cicReduction.cmx \ + cicSubstitution.cmx uriManager.cmx cicTypeChecker.cmi +cicTypeChecker.cmi: uriManager.cmi +reduction.cmo: cic.cmo cicCache.cmi cicPp.cmi cicReduction.cmi \ + cicTypeChecker.cmi configuration.cmo getter.cmi uriManager.cmi +reduction.cmx: cic.cmx cicCache.cmx cicPp.cmx cicReduction.cmx \ + cicTypeChecker.cmx configuration.cmx getter.cmx uriManager.cmx +theoryParser.cmo: pxpUriResolver.cmo theoryParser2.cmo +theoryParser.cmx: pxpUriResolver.cmx theoryParser2.cmx +theoryParser2.cmo: theory.cmo +theoryParser2.cmx: theory.cmx +theoryTypeChecker.cmo: cicCache.cmi cicTypeChecker.cmi theory.cmo \ + theoryCache.cmo uriManager.cmi +theoryTypeChecker.cmx: cicCache.cmx cicTypeChecker.cmx theory.cmx \ + theoryCache.cmx uriManager.cmx +cicCooking.cmo: cic.cmo cicCache.cmi uriManager.cmi cicCooking.cmi +cicCooking.cmx: cic.cmx cicCache.cmx uriManager.cmx cicCooking.cmi +cicCooking.cmi: cic.cmo uriManager.cmi +cicFindParameters.cmo: cic.cmo cic2Xml.cmo cicCache.cmi configuration.cmo \ + uriManager.cmi xml.cmi +cicFindParameters.cmx: cic.cmx cic2Xml.cmx cicCache.cmx configuration.cmx \ + uriManager.cmx xml.cmx +theoryCache.cmo: getter.cmi theoryParser.cmo +theoryCache.cmx: getter.cmx theoryParser.cmx +fix_params.cmo: cicFindParameters.cmo configuration.cmo deannotate.cmo \ + getter.cmi uriManager.cmi +fix_params.cmx: cicFindParameters.cmx configuration.cmx deannotate.cmx \ + getter.cmx uriManager.cmx +cic2Xml.cmo: cic.cmo uriManager.cmi xml.cmi +cic2Xml.cmx: cic.cmx uriManager.cmx xml.cmx +xml.cmo: xml.cmi +xml.cmx: xml.cmi +uriManager.cmo: uriManager.cmi +uriManager.cmx: uriManager.cmi +cicSubstitution.cmo: cic.cmo cicSubstitution.cmi +cicSubstitution.cmx: cic.cmx cicSubstitution.cmi +cicSubstitution.cmi: cic.cmo uriManager.cmi +mmlinterface.cmo: annotation2Xml.cmo cicAnnotationHinter.cmo cicCache.cmi \ + cicTypeChecker.cmi cicXPath.cmo configuration.cmo getter.cmi \ + theoryTypeChecker.cmo uriManager.cmi xml.cmi xsltProcessor.cmo +mmlinterface.cmx: annotation2Xml.cmx cicAnnotationHinter.cmx cicCache.cmx \ + cicTypeChecker.cmx cicXPath.cmx configuration.cmx getter.cmx \ + theoryTypeChecker.cmx uriManager.cmx xml.cmx xsltProcessor.cmx +xsltProcessor.cmo: configuration.cmo uriManager.cmi +xsltProcessor.cmx: configuration.cmx uriManager.cmx +deannotate.cmo: cic.cmo +deannotate.cmx: cic.cmx +cicXPath.cmo: cic.cmo +cicXPath.cmx: cic.cmx +annotationParser.cmo: annotationParser2.cmo pxpUriResolver.cmo +annotationParser.cmx: annotationParser2.cmx pxpUriResolver.cmx +annotationParser2.cmo: cic.cmo +annotationParser2.cmx: cic.cmx +annotation2Xml.cmo: cic.cmo uriManager.cmi xml.cmi +annotation2Xml.cmx: cic.cmx uriManager.cmx xml.cmx +cicAnnotationHinter.cmo: cic.cmo +cicAnnotationHinter.cmx: cic.cmx diff --git a/helm/interface/ISTRUZIONI b/helm/interface/ISTRUZIONI new file mode 100644 index 000000000..fe6c09efc --- /dev/null +++ b/helm/interface/ISTRUZIONI @@ -0,0 +1,22 @@ +============================== +ISTRUZIONI PER CHI USA LA TCSH +============================== + +Lanciare: + + source PER_FARLO_ANDARE_TCSH + +Poi far partire altri due xterm. +Nel primo lanciare: + + make start-xaland3 + +Nel secondo lanciare: + + make start-http-getter + +Se non funziona significa che ce ne e' gia' uno attivo. + +Infini lanciare, dall'ultima shell, + + ./mmlinterface.opt.saved diff --git a/helm/interface/Makefile b/helm/interface/Makefile new file mode 100644 index 000000000..2b892e2d9 --- /dev/null +++ b/helm/interface/Makefile @@ -0,0 +1,180 @@ +LABLGTK_DIR = /usr/lib/ocaml/lablgtk +LABLGTK_MATHVIEW_DIR = /usr/lib/ocaml/lablgtk/mathview +PXP_DIR = /usr/lib/ocaml/site-lib/pxp +NETSTRING_DIR = /usr/lib/ocaml/site-lib/netstring +OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I mlmathview +OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlgtk_devel -I $(PXP_DIR) -I $(NETSTRING_DIR) -I mlmathview +OCAMLDEP = ocamldep + +all: experiment reduction fix_params mmlinterface +opt: experiment.opt reduction.opt fix_params.opt mmlinterface.opt + +PXPLIBS = netstring.cma netmappings_iso.cmo netmappings_other.cmo \ + pxp_types.cma \ + pxp_lex_iso88591.cma pxp_lex_utf8.cma pxp_engine.cma \ + pxp_utf8.cmo + +PXPLIBSOPT = netstring.cmxa netmappings_iso.cmx netmappings_other.cmx \ + pxp_types.cmxa \ + pxp_lex_iso88591.cmxa pxp_lex_utf8.cmxa pxp_engine.cmxa \ + pxp_utf8.cmx + + +DEPOBJS = experiment.ml cicCache.ml cicCache.mli cicPp.ml cicPp.mli \ + cicParser.ml cicParser.mli cicParser2.ml cicParser2.mli \ + cicParser3.ml cicParser3.mli cic.ml getter.ml getter.mli \ + gtkInterface.ml cicReduction.ml cicReduction.mli cicTypeChecker.ml \ + cicTypeChecker.mli reduction.ml tgtkInterface.ml theory.ml \ + theoryParser.ml theoryParser2.ml theoryPp.ml theoryTypeChecker.ml \ + cicCooking.ml cicCooking.mli cicFindParameters.ml theoryCache.ml \ + fix_params.ml cic2Xml.ml xml.ml uriManager.ml uriManager.mli \ + cicSubstitution.ml cicSubstitution.mli mml.ml \ + mmlinterface.ml configuration.ml \ + xsltProcessor.ml deannotate.ml cicXPath.ml pxpUriResolver.ml \ + annotationParser.ml annotationParser2.ml annotation2Xml.ml \ + cicAnnotationHinter.ml + +MMLINTERFACEOBJS = configuration.cmo uriManager.cmo getter.cmo cic.cmo \ + pxpUriResolver.cmo \ + cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \ + cicSubstitution.cmo annotationParser2.cmo \ + annotationParser.cmo cicCache.cmo cicCooking.cmo cicPp.cmo \ + cicReduction.cmo cicTypeChecker.cmo mml.cmo \ + xml.cmo \ + xsltProcessor.cmo cic2Xml.cmo annotation2Xml.cmo \ + cicXPath.cmo theory.cmo theoryParser2.cmo theoryParser.cmo \ + theoryCache.cmo theoryTypeChecker.cmo \ + cicAnnotationHinter.cmo mmlinterface.cmo + +MMLINTERFACEOPTOBJS = configuration.cmx uriManager.cmx getter.cmx cic.cmx \ + pxpUriResolver.cmx \ + cicParser3.cmx cicParser2.cmx cicParser.cmx \ + deannotate.cmx cicSubstitution.cmx annotationParser2.cmx \ + annotationParser.cmx cicCache.cmx \ + cicCooking.cmx cicPp.cmx cicReduction.cmx \ + cicTypeChecker.cmx mml.cmx \ + xml.cmx xsltProcessor.cmx \ + cic2Xml.cmx annotation2Xml.cmx cicXPath.cmx \ + theory.cmx theoryParser2.cmx theoryParser.cmx \ + theoryCache.cmx theoryTypeChecker.cmx \ + cicAnnotationHinter.cmx mmlinterface.cmx + +FIX_PARAMSOBJS = configuration.cmo uriManager.cmo getter.cmo cic.cmo \ + pxpUriResolver.cmo \ + cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \ + cicSubstitution.cmo annotationParser2.cmo \ + annotationParser.cmo cicCache.cmo cicPp.cmo xml.cmo \ + cic2Xml.cmo cicFindParameters.cmo fix_params.cmo + +FIX_PARAMSOPTOBJS = configuration.cmx uriManager.cmx getter.cmx cic.cmx \ + pxpUriResolver.cmx \ + cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \ + cicSubstitution.cmx annotationParser2.cmx \ + annotationParser.cmx cicCache.cmx cicPp.cmx xml.cmx \ + cic2Xml.cmx cicFindParameters.cmx fix_params.cmx + +REDUCTIONOBJS = configuration.cmo uriManager.cmo getter.cmo cic.cmo \ + pxpUriResolver.cmo \ + cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \ + cicSubstitution.cmo annotationParser2.cmo annotationParser.cmo \ + cicCache.cmo cicPp.cmo cicCooking.cmo \ + cicReduction.cmo cicTypeChecker.cmo reduction.cmo + +REDUCTIONOPTOBJS = configuration.cmx uriManager.cmx getter.cmx cic.cmx \ + pxpUriResolver.cmx \ + cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \ + cicSubstitution.cmx annotationParser2.cmx \ + annotationParser.cmx cicCache.cmx cicPp.cmx cicCooking.cmx \ + cicReduction.cmx cicTypeChecker.cmx reduction.cmx + +EXPERIMENTOBJS = configuration.cmo uriManager.cmo getter.cmo cic.cmo \ + pxpUriResolver.cmo \ + cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \ + cicSubstitution.cmo annotationParser2.cmo \ + annotationParser.cmo cicCache.cmo cicPp.cmo experiment.cmo + +EXPERIMENTOPTOBJS = configuration.cmx uriManager.cmx getter.cmx cic.cmx \ + pxpUriResolver.cmx \ + cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \ + cicSubstitution.cmx annotationParser2.cmx \ + annotationParser.cmx cicCache.cmx cicPp.cmx experiment.cmx + +depend: + $(OCAMLDEP) $(DEPOBJS) > .depend + +mmlinterface: $(MMLINTERFACEOBJS) + $(OCAMLC) -custom -o mmlinterface str.cma unix.cma $(PXPLIBS) dbm.cma \ + lablgtk.cma gtkInit.cmo \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \ + $(MMLINTERFACEOBJS) \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -lunix -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" \ + -cclib -lmldbm -cclib -lndbm + +mmlinterface.opt: $(MMLINTERFACEOPTOBJS) + $(OCAMLOPT) -o mmlinterface.opt str.cmxa $(PXPLIBSOPT) unix.cmxa \ + dbm.cmxa lablgtk.cmxa gtkInit.cmx \ + $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \ + $(MMLINTERFACEOPTOBJS) \ + -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \ + -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \ + -lunix -L/usr/local/lib/gtkmathview -lgtkmathview \ + $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" \ + -cclib -lmldbm -cclib -lndbm + +fix_params: $(FIX_PARAMSOBJS) + $(OCAMLC) -custom -o fix_params str.cma $(PXPLIBS) dbm.cma \ + $(FIX_PARAMSOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm + +fix_params.opt: $(FIX_PARAMSOPTOBJS) + $(OCAMLOPT) -o fix_params.opt str.cmxa $(PXPLIBSOPT) dbm.cmxa \ + $(FIX_PARAMSOPTOBJS) -cclib -lstr -cclib -lmldbm \ + -cclib -lndbm + +reduction: $(REDUCTIONOBJS) + $(OCAMLC) -custom -o reduction str.cma $(PXPLIBS) dbm.cma \ + $(REDUCTIONOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm + +reduction.opt: $(REDUCTIONOPTOBJS) + $(OCAMLOPT) -o reduction.opt str.cmxa $(PXPLIBSOPT) dbm.cmxa \ + $(REDUCTIONOPTOBJS) -cclib -lstr -cclib -lmldbm \ + -cclib -lndbm + +experiment: $(EXPERIMENTOBJS) + $(OCAMLC) -custom -o experiment str.cma $(PXPLIBS) dbm.cma \ + $(EXPERIMENTOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm + +experiment.opt: $(EXPERIMENTOPTOBJS) + $(OCAMLOPT) -o experiment.opt str.cmxa $(PXPLIBSOPT) dbm.cmxa \ + $(EXPERIMENTOPTOBJS) -cclib -lstr -cclib -lmldbm \ + -cclib -lndbm + +.SUFFIXES: .ml .mli .cmo .cmi .cmx +.ml.cmo: + $(OCAMLC) -c $< +.mli.cmi: + $(OCAMLC) -c $< +.ml.cmx: + $(OCAMLOPT) -c $< + +clean: + rm -f *.cm[iox] *.o experiment experiment.opt reduction \ + reduction.opt fix_params fix_params.opt mmlinterface \ + mmlinterface.opt mmlinterface2 mmlinterface2.opt + +start-xaland: + java xaland 12345 12346 examples/style/rootcontent.xsl \ + examples/style/annotatedpres.xsl examples/style/theory_content.xsl \ + examples/style/theory_pres.xsl + +start-xaland3: + java xaland 12347 12348 examples/style/rootcontent.xsl \ + examples/style/annotatedpres.xsl examples/style/theory_content.xsl \ + examples/style/theory_pres.xsl + +start-http-getter: + http_getter/http_getter.pl + +include .depend diff --git a/helm/interface/NON_VA b/helm/interface/NON_VA new file mode 100644 index 000000000..375447103 --- /dev/null +++ b/helm/interface/NON_VA @@ -0,0 +1,29 @@ + + *********************************************************************** + + A T T E N Z I O N E ! ! ! + + Quando si usa fix_params.opt, scrivere + + find /really_very_local/helm/PARSER/examples + + invece di examples + + *********************************************************************** + + PROBLEMA NON FIXATO CON fix_params + + LA SOLUZIONE E' + + + +Correggere: + + examples/coq/SETS/Powerset_facts/Sets_as_an_algebra/setcover_intro.con.xml + +aggiungendo paramMode="POSSIBLE" + +Un esempio che altrimenti non funziona e': + +examples/coq/SETS/Powerset_Classical_facts/Sets_as_an_algebra/Add_covers.con.xml + diff --git a/helm/interface/PER_FARLO_ANDARE b/helm/interface/PER_FARLO_ANDARE new file mode 100644 index 000000000..20fb52a86 --- /dev/null +++ b/helm/interface/PER_FARLO_ANDARE @@ -0,0 +1,2 @@ +export LD_LIBRARY_PATH=.:/really_very_local/helm/proveluca/mml-browser/ +export no_proxy=cs.unibo.it diff --git a/helm/interface/PER_FARLO_ANDARE_TCSH b/helm/interface/PER_FARLO_ANDARE_TCSH new file mode 100644 index 000000000..b527fabea --- /dev/null +++ b/helm/interface/PER_FARLO_ANDARE_TCSH @@ -0,0 +1,4 @@ +setenv PATH "/home/projects/java/jdk1.2.2/bin:$PATH" +setenv CLASSPATH "/really_very_local/helm/java/xalan_1_1/xalan.jar:/really_very_local/helm/java/xalan_1_1/xerces.jar:." +setenv CLASSPATH "/really_very_local/helm/java/saxon-5.3.2/saxon.jar:$CLASSPATH" +setenv LD_LIBRARY_PATH ".:/really_very_local/helm/proveluca/mml-browser/" diff --git a/helm/interface/PER_FARLO_ANDARE_TCSH_D01 b/helm/interface/PER_FARLO_ANDARE_TCSH_D01 new file mode 100644 index 000000000..208f00a0e --- /dev/null +++ b/helm/interface/PER_FARLO_ANDARE_TCSH_D01 @@ -0,0 +1,4 @@ +setenv PATH "/home/projects/java/jdk1.2.2/bin:$PATH" +setenv CLASSPATH "/really_very_local/helm/java/xalan_1_2_D01/xalan.jar:/really_very_local/helm/java/xalan_1_2_D01/xerces.jar:." +setenv CLASSPATH "/really_very_local/helm/java/saxon-5.3.2/saxon.jar:$CLASSPATH" +setenv LD_LIBRARY_PATH ".:/really_very_local/helm/proveluca/mml-browser/" diff --git a/helm/interface/README b/helm/interface/README new file mode 100644 index 000000000..89265ca8a --- /dev/null +++ b/helm/interface/README @@ -0,0 +1,44 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* A tactic to print Coq objects in XML *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 22/11/1999 *) +(******************************************************************************) + +This is the main directory of the coq-like pretty printer for cic terms exported +in xml from Coq. Once compiled four different executables are made: + + experiment a command-line pretty-printer (interpreted) + experiment.opt same as experiment (compiled) + gtkInterface a gtk-based pretty-printer (interpreted) + gtkInterface.opt a gtk-based pretty-printer (compiled) + +To use one of the previous pretty-printer the syntax is + + pretty_printer_name file1 ... filen + +where filei is an xml cic object + +Code files: + + cic.ml the internal definition of cic objects and terms + getter.ml converts uris to filenames retrieving the correspondent file + cache.ml a cache for cic objects (actually a simple hash-table) + cicParser.ml a parser from xml to internal definition: top level + cicParser2.ml a parser from xml to internal definition: objects level + cicParser3.ml a parser from xml to internal definition: terms level + cicPp.ml a pretty-printer for the internal definition of cic objects + experiment.ml a textual interface to cicPp + gtkInterface.ml a gtk interface to cicPp + +Interface files: + cache.mli getter.mli cicPp.mli cicParser.mli cicParser2.mli cicParser3.mli + +Other files: + + Makefile the targets are "all" "opt" "depend" "clean" + .depend dependencies file used by make + examples symbolic link to the root of the exported library diff --git a/helm/interface/TEMPI b/helm/interface/TEMPI new file mode 100644 index 000000000..dc2bc8522 --- /dev/null +++ b/helm/interface/TEMPI @@ -0,0 +1,214 @@ +prima di UriManager.ml: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m50.266s + user 0m44.160s + sys 0m0.700s + +dopo UriManager.ml, ma prima di passare da = a ==: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m51.388s + user 0m45.430s + sys 0m0.530s + +dopo UriManager.ml e popo il passaggio (parziale?) da = a ==: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m50.767s + user 0m44.750s + sys 0m0.510s + +dopo il passaggio alla cache che usa ancora =: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m50.646s + user 0m44.680s + sys 0m0.530s + +dopo il passaggio alla cache con utilizzo di ==: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m50.861s + user 0m45.030s + sys 0m0.500s + +con funzione di hashing costante ;-( + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m51.442s + user 0m45.440s + sys 0m0.530s + +con implementazione isomorfa all'albero delle uri: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m54.081s + user 0m47.590s + sys 0m0.780s + +con implementazione con doppio RB-albero: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m52.504s + user 0m46.120s + sys 0m0.720s + +con implementazione semplice, gestite anche le uri delle var: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m51.850s + user 0m46.060s + sys 0m0.530s + +con implementazione con doppio RB-albero, gestite anche le uri delle var: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m51.495s + user 0m45.660s + sys 0m0.540s + +========================================================= + +con implementazione con doppio RB-albero, gestite anche le uri delle var +e spostata nell'uri-manager is_prefix: + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m50.465s + user 0m45.710s + sys 0m0.590s + +con implementazione semplice (e tutto il resto): + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m49.710s + user 0m43.850s + sys 0m0.500s + +con implementazione banale (e tutto il resto): + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m49.289s + user 0m44.840s + sys 0m0.570s + +con implementazione banale SOLO PARSING ;-) + + [ABCI]* (terza passata, uguale alla seconda): + + real 0m48.395s + user 0m42.830s + sys 0m0.850s + +========================================================= + +con implementazione con doppio RB-albero, gestite anche le uri delle var +e spostata nell'uri-manager is_prefix: + + REAL (prima passata, dopo un sync): + + real 10m58.033s + user 10m37.690s + sys 0m2.570s + +con implementazione semplice (e tutto il resto): + + REAL (prima passata, dopo un sync): + + real 10m31.035s + user 10m9.350s + sys 0m3.230s + +con implementazione banale (e tutto il resto): + + REAL (prima passata, dopo un sync): + + real 11m4.026s + user 10m43.930s + sys 0m3.070s + +================================================= + +con implementazione banale, SOLO PARSING di tutto: + + real 6m54.336s + user 6m13.850s + sys 0m6.580s + +con implementazione banale, anche typechecking di tutto: + + real 20m17.739s + user 19m14.740s + sys 0m8.550s + +con implementazione semplice, anche typechecking di tutto: + + real 19m36.079s + user 18m36.480s + sys 0m7.760s + +con implementazione con doppio RB-albero, anche typechecking di tutto: + + real 17m30.423s + user 16m30.840s + sys 0m6.170s + +*************************************************************************** + APPLICATA EURISTICA +*************************************************************************** + +con implementazione con doppio RB-albero, anche typechecking di tutto +(universita') ????????: + +real 5m37.805s +user 5m1.640s +sys 0m5.010s + +tutto (ma a casa): + +real 7m36.663s +user 6m52.220s +sys 0m5.860s + + +solo REAL: + +real 2m52.860s +user 2m41.050s +sys 0m2.820s + +========================================================================== + +tutto (ma a casa) dopo eliminazione buri: + +real 7m52.773s +user 6m52.110s +sys 0m7.130s + +"solo parsing" di tutto dopo eliminazione buri: + +real 7m8.379s +user 6m15.250s +sys 0m6.700s + +=========================================================================== + +TUTTO ALL'UNIVERSITA' CON EURISTICA MA SENZA UNIVERSI: + +real 5m47.920s +user 5m14.600s +sys 0m5.010s + diff --git a/helm/interface/WGET b/helm/interface/WGET new file mode 100644 index 000000000..f1cca6c37 --- /dev/null +++ b/helm/interface/WGET @@ -0,0 +1,3 @@ +-P directory di destinazione +-q no output (quiet mode) +-c continue retrieving (no uri.1, uri.2, ...) diff --git a/helm/interface/annotation2Xml.ml b/helm/interface/annotation2Xml.ml new file mode 100644 index 000000000..a9fca071a --- /dev/null +++ b/helm/interface/annotation2Xml.ml @@ -0,0 +1,190 @@ +(*CSC codice cut & paste da cicPp e xmlcommand *) + +exception ImpossiblePossible;; +exception NotImplemented;; +exception BinderNotSpecified;; + +let dtdname = "http://localhost:8081/getdtd?url=annotations.dtd";; + +(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *) +let print_term = + let rec aux = + let module C = Cic in + let module X = Xml in + let module U = UriManager in + function + C.ARel (id,ann,_,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AVar (id,ann,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AMeta (id,ann,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.ASort (id,ann,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AImplicit _ -> raise NotImplemented + | C.AProd (id,ann,_,s,t) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + aux s ; + aux t + >] + | C.ACast (id,ann,v,t) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + aux v ; + aux t + >] + | C.ALambda (id,ann,_,s,t) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + aux s ; + aux t + >] + | C.AAppl (id,ann,li) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>] + >] + | C.AConst (id,ann,_,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AAbst (id,ann,_) -> raise NotImplemented + | C.AMutInd (id,ann,_,_,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AMutConstruct (id,ann,_,_,_,_) -> + (match !ann with + None -> [<>] + | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) + | C.AMutCase (id,ann,_,_,_,ty,te,patterns) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + aux ty ; + aux te ; + List.fold_right + (fun x i -> [< aux x ; i>]) + patterns [<>] + >] + | C.AFix (id, ann, _, funs) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + List.fold_right + (fun (_,_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>] + >] + | C.ACoFix (id, ann,no,funs) -> + [< (match !ann with + None -> [<>] + | Some ann -> + (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann)) + ) ; + List.fold_right + (fun (_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>] + >] + in + aux +;; + +let print_mutual_inductive_type (_,_,arity,constructors) = + [< print_term arity ; + List.fold_right + (fun (name,ty,_) i -> [< print_term ty ; i >]) constructors [<>] + >] +;; + +let target_uri_of_annotation_uri uri = + Str.replace_first (Str.regexp "\.ann$") "" (UriManager.string_of_uri uri) +;; + +let pp_annotation obj curi = + let module C = Cic in + let module X = Xml in + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n") ; + X.xml_nempty "Annotations" ["of", target_uri_of_annotation_uri curi] + begin + match obj with + C.ADefinition (xid, ann, _, te, ty, _) -> + [< (match !ann with + None -> [<>] + | Some ann -> + X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann) + ) ; + print_term te ; + print_term ty + >] + | C.AAxiom (xid, ann, _, ty, _) -> + [< (match !ann with + None -> [<>] + | Some ann -> + X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann) + ) ; + print_term ty + >] + | C.AVariable (xid, ann, _, ty) -> + [< (match !ann with + None -> [<>] + | Some ann -> + X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann) + ) ; + print_term ty + >] + | C.ACurrentProof (xid, ann, _, conjs, bo, ty) -> + [< (match !ann with + None -> [<>] + | Some ann -> + X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann) + ) ; + List.fold_right + (fun (_,t) i -> [< print_term t ; i >]) + conjs [<>] ; + print_term bo ; + print_term ty + >] + | C.AInductiveDefinition (xid, ann, tys, params, paramsno) -> + [< (match !ann with + None -> [<>] + | Some ann -> + X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann) + ) ; + List.fold_right + (fun x i -> [< print_mutual_inductive_type x ; i >]) + tys [< >] + >] + end + >] +;; diff --git a/helm/interface/annotationParser.ml b/helm/interface/annotationParser.ml new file mode 100644 index 000000000..3c645fe5d --- /dev/null +++ b/helm/interface/annotationParser.ml @@ -0,0 +1,30 @@ +exception Warnings;; + +class warner = + object + method warn w = + print_endline ("WARNING: " ^ w) ; + (raise Warnings : unit) + end +;; + +exception EmptyUri;; + +let annotate filename ids_to_targets = + let module Y = Pxp_yacc in + try + let d = + let config = {Y.default_config with Y.warner = new warner} in + Y.parse_document_entity config +(*PXP (Y.ExtID (Pxp_types.System filename, + new Pxp_reader.resolve_as_file ~url_of_id ())) +*) (PxpUriResolver.from_file filename) + Y.default_spec + + in + AnnotationParser2.annotate ids_to_targets d#root + with + e -> + print_endline (Pxp_types.string_of_exn e) ; + raise e +;; diff --git a/helm/interface/annotationParser2.ml b/helm/interface/annotationParser2.ml new file mode 100644 index 000000000..5e5042efa --- /dev/null +++ b/helm/interface/annotationParser2.ml @@ -0,0 +1,103 @@ +exception IllFormedXml of int;; + +(* Utility functions that transform a Pxp attribute into something useful *) + +let string_of_attr a = + let module T = Pxp_types in + match a with + T.Value s -> s + | _ -> raise (IllFormedXml 0) +;; + +exception DontKnowWhatToDo;; + +let rec string_of_annotations n = + let module D = Pxp_document in + let module T = Pxp_types in + match n#node_type with + D.T_element s -> + "<" ^ s ^ + List.fold_right + (fun att i -> + match n#attribute att with + T.Value s -> " " ^ att ^ "=\"" ^ s ^ "\"" ^ i + | T.Implied_value -> i + | T.Valuelist l -> " " ^ att ^ "=\"" ^ String.concat " " l ^ "\"" ^ i + ) (n#attribute_names) "" ^ + (match n#sub_nodes with + [] -> "/>" + | l -> + ">" ^ + String.concat "" (List.map string_of_annotations l) ^ + "" + ) + | D.T_data -> n#data + | _ -> raise DontKnowWhatToDo +;; + +let get_annotation n = + String.concat "" (List.map string_of_annotations (n#sub_nodes)) +;; + +let annotate_object ann obj = + let module C = Cic in + let rann = + match obj with + C.ADefinition (_, rann, _, _, _, _) -> rann + | C.AAxiom (_, rann, _, _, _) -> rann + | C.AVariable (_, rann, _, _) -> rann + | C.ACurrentProof (_, rann, _, _, _, _) -> rann + | C.AInductiveDefinition (_, rann, _, _, _) -> rann + in + rann := Some ann +;; + +let annotate_term ann term = + let module C = Cic in + let rann = + match term with + C.ARel (_, rann, _, _) -> rann + | C.AVar (_, rann, _) -> rann + | C.AMeta (_, rann, _) -> rann + | C.ASort (_, rann, _) -> rann + | C.AImplicit (_, rann) -> rann + | C.ACast (_, rann, _, _) -> rann + | C.AProd (_, rann, _, _, _) -> rann + | C.ALambda (_, rann, _, _, _) -> rann + | C.AAppl (_, rann, _) -> rann + | C.AConst (_, rann, _, _) -> rann + | C.AAbst (_, rann, _) -> rann + | C.AMutInd (_, rann, _, _, _) -> rann + | C.AMutConstruct (_, rann, _, _, _, _) -> rann + | C.AMutCase (_, rann, _, _, _, _, _, _) -> rann + | C.AFix (_, rann, _, _) -> rann + | C.ACoFix (_, rann, _, _) -> rann + in + rann := Some ann +;; + +let annotate ids_to_targets n = + let module D = Pxp_document in + let module C = Cic in + let annotate_elem n = + let ntype = n # node_type in + match ntype with + D.T_element "Annotation" -> + let of_uri = string_of_attr (n # attribute "of") in + begin + try + match Hashtbl.find ids_to_targets of_uri with + C.Object o -> annotate_object (get_annotation n) o + | C.Term t -> annotate_term (get_annotation n) t + with + Not_found -> assert false + end + | D.T_element _ | D.T_data -> + raise (IllFormedXml 1) + | _ -> raise DontKnowWhatToDo + in + match n # node_type with + D.T_element "Annotations" -> + List.iter annotate_elem (n # sub_nodes) + | _ -> raise (IllFormedXml 2) +;; diff --git a/helm/interface/cadet b/helm/interface/cadet new file mode 100755 index 000000000..f674925b3 --- /dev/null +++ b/helm/interface/cadet @@ -0,0 +1,13 @@ +#! /bin/sh + +export PATH=/home/cadet/sacerdot/jdk118/bin:$PATH + +export CLASSPATH=/home/cadet/sacerdot/xalan-j_1_2/xalan.jar:/home/cadet/sacerdot/xalan-j_1_2/xerces.jar:. + +#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xalan.jar +#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xerces.jar +#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/saxon-5.3.2/saxon.jar + +# Per (my)Coq 6.3.0 +#export LD_LIBRARY_PATH=/home/lpadovan/helm/usr/lib/:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/lib/gtkmathview:$LD_LIBRARY_PATH diff --git a/helm/interface/cic.ml b/helm/interface/cic.ml new file mode 100644 index 000000000..dd9192531 --- /dev/null +++ b/helm/interface/cic.ml @@ -0,0 +1,134 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 14/06/2000 *) +(* *) +(* This module defines the internal representation of the objects (variables, *) +(* blocks of (co)inductive definitions and constants) and the terms of cic *) +(* *) +(******************************************************************************) + +(* STUFF TO MANAGE IDENTIFIERS *) +type id = string (* the abstract type of the (annotated) node identifiers *) +type anntarget = + Object of annobj + | Term of annterm + +(* INTERNAL REPRESENTATION OF CIC OBJECTS AND TERMS *) +and sort = + Prop + | Set + | Type +and name = + Name of string + | Anonimous +and term = + Rel of int (* DeBrujin index *) + | Var of UriManager.uri (* uri *) + | Meta of int (* numeric id *) + | Sort of sort (* sort *) + | Implicit (* *) + | Cast of term * term (* value, type *) + | Prod of name * term * term (* binder, source, target *) + | Lambda of name * term * term (* binder, source, target *) + | Appl of term list (* arguments *) + | Const of UriManager.uri * int (* uri, number of cookings*) + | Abst of UriManager.uri (* uri *) + | MutInd of UriManager.uri * int * int (* uri, cookingsno, typeno*) + | MutConstruct of UriManager.uri * int * (* uri, cookingsno, *) + int * int (* typeno, consno *) + (*CSC: serve cookingsno?*) + | MutCase of UriManager.uri * int * (* ind. uri, cookingsno, *) + int * (* ind. typeno, *) + term * term * (* outtype, ind. term *) + term list (* patterns *) + | Fix of int * inductiveFun list (* funno, functions *) + | CoFix of int * coInductiveFun list (* funno, functions *) +and obj = + Definition of string * term * term * (* id, value, type, *) + (int * UriManager.uri list) list (* parameters *) + | Axiom of string * term * + (int * UriManager.uri list) list (* id, type, parameters *) + | Variable of string * term (* name, type *) + | CurrentProof of string * (int * term) list * (* name, conjectures, *) + term * term (* value, type *) + | InductiveDefinition of inductiveType list * (* inductive types, *) + (int * UriManager.uri list) list * int (* parameters, n ind. pars *) +and inductiveType = + string * bool * term * (* typename, inductive, arity *) + constructor list (* constructors *) +and constructor = + string * term * bool list option ref (* id, type, really recursive *) +and inductiveFun = + string * int * term * term (* name, ind. index, type, body *) +and coInductiveFun = + string * term * term (* name, type, body *) + +and annterm = + ARel of id * annotation option ref * + int * string option (* DeBrujin index, binder *) + | AVar of id * annotation option ref * + UriManager.uri (* uri *) + | AMeta of id * annotation option ref * int (* numeric id *) + | ASort of id * annotation option ref * sort (* sort *) + | AImplicit of id * annotation option ref (* *) + | ACast of id * annotation option ref * + annterm * annterm (* value, type *) + | AProd of id * annotation option ref * + name * annterm * annterm (* binder, source, target *) + | ALambda of id * annotation option ref * + name * annterm * annterm (* binder, source, target *) + | AAppl of id * annotation option ref * + annterm list (* arguments *) + | AConst of id * annotation option ref * + UriManager.uri * int (* uri, number of cookings*) + | AAbst of id * annotation option ref * + UriManager.uri (* uri *) + | AMutInd of id * annotation option ref * + UriManager.uri * int * int (* uri, cookingsno, typeno*) + | AMutConstruct of id * annotation option ref * + UriManager.uri * int * (* uri, cookingsno, *) + int * int (* typeno, consno *) + (*CSC: serve cookingsno?*) + | AMutCase of id * annotation option ref * + UriManager.uri * int * (* ind. uri, cookingsno *) + int * (* ind. typeno, *) + annterm * annterm * (* outtype, ind. term *) + annterm list (* patterns *) + | AFix of id * annotation option ref * + int * anninductiveFun list (* funno, functions *) + | ACoFix of id * annotation option ref * + int * anncoInductiveFun list (* funno, functions *) +and annobj = + ADefinition of id * annotation option ref * + string * (* id, *) + annterm * annterm * (* value, type, *) + (int * UriManager.uri list) list exactness (* parameters *) + | AAxiom of id * annotation option ref * + string * annterm * (* id, type *) + (int * UriManager.uri list) list (* parameters *) + | AVariable of id * annotation option ref * + string * annterm (* name, type *) + | ACurrentProof of id * annotation option ref * + string * (int * annterm) list * (* name, conjectures, *) + annterm * annterm (* value, type *) + | AInductiveDefinition of id * + annotation option ref * anninductiveType list * (* inductive types , *) + (int * UriManager.uri list) list * int (* parameters,n ind. pars*) +and anninductiveType = + string * bool * annterm * (* typename, inductive, arity *) + annconstructor list (* constructors *) +and annconstructor = + string * annterm * bool list option ref (* id, type, really recursive *) +and anninductiveFun = + string * int * annterm * annterm (* name, ind. index, type, body *) +and anncoInductiveFun = + string * annterm * annterm (* name, type, body *) +and annotation = + string +and 'a exactness = + Possible of 'a (* an approximation to something *) + | Actual of 'a (* something *) +;; diff --git a/helm/interface/cic2Xml.ml b/helm/interface/cic2Xml.ml new file mode 100644 index 000000000..ff16e2f70 --- /dev/null +++ b/helm/interface/cic2Xml.ml @@ -0,0 +1,217 @@ +(*CSC codice cut & paste da cicPp e xmlcommand *) + +exception ImpossiblePossible;; +exception NotImplemented;; +exception BinderNotSpecified;; + +let dtdname = "http://localhost:8081/getdtd?url=cic.dtd";; + +(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *) +let print_term curi = + let rec aux = + let module C = Cic in + let module X = Xml in + let module U = UriManager in + function + C.ARel (id,_,n,Some b) -> + X.xml_empty "REL" ["value",(string_of_int n);"binder",b;"id",id] + | C.ARel _ -> raise BinderNotSpecified + | C.AVar (id,_,uri) -> + let vdepth = U.depth_of_uri uri + and cdepth = U.depth_of_uri curi in + X.xml_empty "VAR" + ["relUri",(string_of_int (cdepth - vdepth)) ^ "," ^ + (U.name_of_uri uri) ; + "id",id] + | C.AMeta (id,_,n) -> + X.xml_empty "META" ["no",(string_of_int n) ; "id",id] + | C.ASort (id,_,s) -> + let string_of_sort = + function + C.Prop -> "Prop" + | C.Set -> "Set" + | C.Type -> "Type" + in + X.xml_empty "SORT" ["value",(string_of_sort s) ; "id",id] + | C.AImplicit _ -> raise NotImplemented + | C.AProd (id,_,C.Anonimous,s,t) -> + X.xml_nempty "PROD" ["id",id] + [< X.xml_nempty "source" [] (aux s) ; + X.xml_nempty "target" [] (aux t) + >] + | C.AProd (xid,_,C.Name id,s,t) -> + X.xml_nempty "PROD" ["id",xid] + [< X.xml_nempty "source" [] (aux s) ; + X.xml_nempty "target" ["binder",id] (aux t) + >] + | C.ACast (id,_,v,t) -> + X.xml_nempty "CAST" ["id",id] + [< X.xml_nempty "term" [] (aux v) ; + X.xml_nempty "type" [] (aux t) + >] + | C.ALambda (id,_,C.Anonimous,s,t) -> + X.xml_nempty "LAMBDA" ["id",id] + [< X.xml_nempty "source" [] (aux s) ; + X.xml_nempty "target" [] (aux t) + >] + | C.ALambda (xid,_,C.Name id,s,t) -> + X.xml_nempty "LAMBDA" ["id",xid] + [< X.xml_nempty "source" [] (aux s) ; + X.xml_nempty "target" ["binder",id] (aux t) + >] + | C.AAppl (id,_,li) -> + X.xml_nempty "APPLY" ["id",id] + [< (List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>]) + >] + | C.AConst (id,_,uri,_) -> + X.xml_empty "CONST" ["uri", (U.string_of_uri uri) ; "id",id] + | C.AAbst (id,_,uri) -> raise NotImplemented + | C.AMutInd (id,_,uri,_,i) -> + X.xml_empty "MUTIND" + ["uri", (U.string_of_uri uri) ; + "noType",(string_of_int i) ; + "id",id] + | C.AMutConstruct (id,_,uri,_,i,j) -> + X.xml_empty "MUTCONSTRUCT" + ["uri", (U.string_of_uri uri) ; + "noType",(string_of_int i) ; "noConstr",(string_of_int j) ; + "id",id] + | C.AMutCase (id,_,uri,_,typeno,ty,te,patterns) -> + X.xml_nempty "MUTCASE" + ["uriType",(U.string_of_uri uri) ; + "noType", (string_of_int typeno) ; + "id", id] + [< X.xml_nempty "patternsType" [] [< (aux ty) >] ; + X.xml_nempty "inductiveTerm" [] [< (aux te) >] ; + List.fold_right + (fun x i -> [< X.xml_nempty "pattern" [] [< aux x >] ; i>]) + patterns [<>] + >] + | C.AFix (id, _, no, funs) -> + X.xml_nempty "FIX" ["noFun", (string_of_int no) ; "id",id] + [< List.fold_right + (fun (fi,ai,ti,bi) i -> + [< X.xml_nempty "FixFunction" + ["name", fi; "recIndex", (string_of_int ai)] + [< X.xml_nempty "type" [] [< aux ti >] ; + X.xml_nempty "body" [] [< aux bi >] + >] ; + i + >] + ) funs [<>] + >] + | C.ACoFix (id,_,no,funs) -> + X.xml_nempty "COFIX" ["noFun", (string_of_int no) ; "id",id] + [< List.fold_right + (fun (fi,ti,bi) i -> + [< X.xml_nempty "CofixFunction" ["name", fi] + [< X.xml_nempty "type" [] [< aux ti >] ; + X.xml_nempty "body" [] [< aux bi >] + >] ; + i + >] + ) funs [<>] + >] + in + aux +;; + +let encode params = + List.fold_right + (fun (n,l) i -> + match l with + [] -> i + | _ -> + string_of_int n ^ ": " ^ + String.concat " " (List.map UriManager.name_of_uri l) ^ + i + ) params "" +;; + +let print_mutual_inductive_type curi (typename,inductive,arity,constructors) = + let module C = Cic in + let module X = Xml in + [< X.xml_nempty "InductiveType" + ["name",typename ; + "inductive",(string_of_bool inductive) + ] + [< X.xml_nempty "arity" [] (print_term curi arity) ; + (List.fold_right + (fun (name,ty,_) i -> + [< X.xml_nempty "Constructor" ["name",name] + (print_term curi ty) ; + i + >]) + constructors + [<>] + ) + >] + >] +;; + +let pp obj curi = + let module C = Cic in + let module X = Xml in + match obj with + C.ADefinition (xid, _, id, te, ty, params) -> + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n") ; + X.xml_nempty "Definition" + (["name", id ; "id",xid] @ + match params with + C.Possible _ -> raise ImpossiblePossible + (*CSC params are kept in inverted order in the internal *) + (* representation (the order of application) *) + | C.Actual fv' -> ["params",(encode (List.rev fv'))]) + [< X.xml_nempty "body" [] (print_term curi te) ; + X.xml_nempty "type" [] (print_term curi ty) >] + >] + | C.AAxiom (xid, _, id, ty, params) -> + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n") ; + X.xml_nempty "Axiom" + (*CSC params are kept in inverted order in the internal *) + (* representation (the order of application) *) + ["name",id ; "params",(encode (List.rev params)) ; "id",xid] + [< X.xml_nempty "type" [] (print_term curi ty) >] + >] + | C.AVariable (xid, _, name, ty) -> + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n") ; + X.xml_nempty "Variable" ["name",name ; "id",xid] + [< X.xml_nempty "type" [] (print_term curi ty) >] + >] + | C.ACurrentProof (xid, _, name, conjs, bo, ty) -> + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n"); + X.xml_nempty "CurrentProof" ["name",name ; "id",xid] + [< List.fold_right + (fun (j,t) i -> + [< X.xml_nempty "Conjecture" ["no",(string_of_int j)] + [< print_term curi t >] ; i >]) + conjs [<>] ; + X.xml_nempty "body" [] [< print_term curi bo >] ; + X.xml_nempty "type" [] [< print_term curi ty >] + >] + >] + | C.AInductiveDefinition (xid, _, tys, params, paramsno) -> + let names = + List.map + (fun (typename,_,_,_) -> typename) + tys + in + [< X.xml_cdata "\n" ; + X.xml_cdata ("\n\n") ; + X.xml_nempty "InductiveDefinition" + (*CSC params are kept in inverted order in the internal *) + (* representation (the order of application) *) + ["noParams",string_of_int paramsno ; + "params",(encode (List.rev params)) ; + "id",xid] + [< List.fold_right + (fun x i -> [< print_mutual_inductive_type curi x ; i >]) + tys [< >] + >] + >] +;; diff --git a/helm/interface/cicAnnotationHinter.ml b/helm/interface/cicAnnotationHinter.ml new file mode 100644 index 000000000..21f30a722 --- /dev/null +++ b/helm/interface/cicAnnotationHinter.ml @@ -0,0 +1,337 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 14/06/2000 *) +(* *) +(* *) +(******************************************************************************) + +let deactivate_hints_from annotation_window n = + let annotation_hints = annotation_window#annotation_hints in + for i = n to Array.length annotation_hints - 1 do + annotation_hints.(i)#misc#hide () + done +;; + +(* CSC: orripilante *) +(* the list of the signal ids *) +let sig_ids = ref ([] : GtkSignal.id list);; + +let disconnect_hint annotation_window buttonno = + match !sig_ids with + id::ids -> + annotation_window#annotation_hints.(buttonno)#misc#disconnect id ; + sig_ids := ids + | _ -> assert false +;; + +(* link_hint annotation_window n label hint *) +(* set the label of the nth hint button of annotation_window to label *) +(* and the correspondent hint to hint *) +let link_hint annotation_window buttonno label hint = + let button = annotation_window#annotation_hints.(buttonno) in + sig_ids := + (button#connect#clicked + (fun () -> (annotation_window#annotation : GEdit.text)#insert hint) + ) :: !sig_ids ; + button#misc#show () ; + match button#children with + [labelw] -> (GMisc.label_cast labelw)#set_text label + | _ -> assert false +;; + +exception TooManyHints;; + +let link_hints annotation_window a = + if Array.length a > Array.length annotation_window#annotation_hints then + raise TooManyHints ; + for i = List.length !sig_ids - 1 downto 0 do + disconnect_hint annotation_window i + done ; + Array.iteri + (fun i (label,hint) -> link_hint annotation_window i label hint) a ; + deactivate_hints_from annotation_window (Array.length a) +;; + +let list_mapi f = + let rec aux n = + function + [] -> [] + | he::tl -> (f n he)::(aux (n + 1) tl) + in + aux 0 +;; + +let get_id annterm = + let module C = Cic in + match annterm with + C.ARel (id,_,_,_) -> id + | C.AVar (id,_,_) -> id + | C.AMeta (id,_,_) -> id + | C.ASort (id,_,_) -> id + | C.AImplicit (id,_) -> id + | C.ACast (id,_,_,_) -> id + | C.AProd (id,_,_,_,_) -> id + | C.ALambda (id,_,_,_,_) -> id + | C.AAppl (id,_,_) -> id + | C.AConst (id,_,_,_) -> id + | C.AAbst (id,_,_) -> id + | C.AMutInd (id,_,_,_,_) -> id + | C.AMutConstruct (id,_,_,_,_,_)-> id + | C.AMutCase (id,_,_,_,_,_,_,_) -> id + | C.AFix (id,_,_,_) -> id + | C.ACoFix (id,_,_,_) -> id +;; + +let create_hint_from_term annotation_window annterm = + let module C = Cic in + match annterm with + C.ARel (id,_,_,_) -> + link_hints annotation_window + [| "Binder", "" |] + | C.AVar (id,_,_) -> + link_hints annotation_window + [| "relURI???", "" |] + | C.AMeta (id,_,_) -> + link_hints annotation_window + [| "Number", "" |] + | C.ASort (id,_,_) -> + link_hints annotation_window + [| "Value", "" |] + | C.AImplicit (id,_) -> + link_hints annotation_window [| |] + | C.ACast (id,_,bo,ty) -> + let boid = get_id bo + and tyid = get_id ty in + link_hints annotation_window + [| "Body", "" ; + "Type", "" + |] + | C.AProd (id,_,_,ty,bo) -> + let boid = get_id bo + and tyid = get_id ty in + link_hints annotation_window + [| "Binder", + "" ; + "Body", "" ; + "Type", "" + |] + | C.ALambda (id,_,_,ty,bo) -> + let boid = get_id bo + and tyid = get_id ty in + link_hints annotation_window + [| "Binder", + "" ; + "Body", "" ; + "Type", "" + |] + | C.AAppl (id,_,args) -> + let argsid = + Array.mapi + (fun i te -> "Argument " ^ string_of_int i, "") + (Array.of_list args) + in + link_hints annotation_window argsid + | C.AConst (id,_,_,_) -> + link_hints annotation_window + [| "Uri???", "" |] + | C.AAbst (id,_,_) -> + link_hints annotation_window + [| "Uri???", "" |] + | C.AMutInd (id,_,_,_,_) -> + link_hints annotation_window + [| "Uri???", "" |] + | C.AMutConstruct (id,_,_,_,_,_) -> + link_hints annotation_window + [| "Uri???", "" |] + | C.AMutCase (id,_,_,_,_,outty,te,pl) -> + let outtyid = get_id outty + and teid = get_id te + and plid = + Array.mapi + (fun i te -> "Pattern " ^ string_of_int i, "") + (Array.of_list pl) + in + link_hints annotation_window + (Array.append + [| "Uri???", "" ; + "Case Type", "" ; + "Term", "" ; + |] + plid) + | C.AFix (id,_,_,funl) -> + let funtylid = + Array.mapi + (fun i (_,_,ty,_) -> + "Type " ^ string_of_int i, "") + (Array.of_list funl) + and funbolid = + Array.mapi + (fun i (_,_,_,bo) -> + "Body " ^ string_of_int i, "") + (Array.of_list funl) + and funnamel = + Array.mapi + (fun i (_,_,_,_) -> + "Name " ^ string_of_int i, "") + (Array.of_list funl) + and funrecindexl = + Array.mapi + (fun i (_,_,_,_) -> + "Recursive Index??? " ^ string_of_int i, "") + (Array.of_list funl) + in + link_hints annotation_window + (Array.concat + [ funtylid ; + funbolid ; + funnamel ; + funrecindexl ; + [| "NoFun???", "" |] + ] + ) + | C.ACoFix (id,_,_,funl) -> + let funtylid = + Array.mapi + (fun i (_,ty,_) -> + "Type " ^ string_of_int i, "") + (Array.of_list funl) + and funbolid = + Array.mapi + (fun i (_,_,bo) -> + "Body " ^ string_of_int i, "") + (Array.of_list funl) + and funnamel = + Array.mapi + (fun i (_,_,_) -> + "Name " ^ string_of_int i, "") + (Array.of_list funl) + in + link_hints annotation_window + (Array.concat + [ funtylid ; + funbolid ; + funnamel ; + [| "NoFun???", "" |] + ] + ) +;; + +(*CSC: da riscrivere completamente eliminando il paciugo degli array - liste *) +let create_hint_from_obj annotation_window annobj = + let module C = Cic in + match annobj with + C.ADefinition (id,_,_,bo,ty,_) -> + let boid = get_id bo + and tyid = get_id ty in + link_hints annotation_window + [| "Name", "" ; + "Ingredients", "" ; + "Body", "" ; + "Type", "" + |] + | C.AAxiom (id,_,_,ty,_) -> + let tyid = get_id ty in + link_hints annotation_window + [| "Name", "" ; + "Ingredients", "" ; + "Type", "" + |] + | C.AVariable (id,_,_,ty) -> + let tyid = get_id ty in + link_hints annotation_window + [| "Name", "" ; + "Type", "" + |] + | C.ACurrentProof (id,_,_,conjs,bo,ty) -> + let boid = get_id bo + and tyid = get_id ty + and conjsid = List.map (fun (_,te) -> get_id te) conjs in + link_hints annotation_window + (Array.append + [| "Name", "" ; + "Ingredients", "" ; + "Body", "" ; + "Type", "" + |] + (Array.mapi + (fun i id -> + "Conjecture " ^ string_of_int i, "" + ) (Array.of_list conjsid) + ) + ) + | C.AInductiveDefinition (id,_,itl,_,_) -> + let itlids = + List.map + (fun (_,_,arity,cons) -> + get_id arity, + List.map (fun (_,ty,_) -> get_id ty) cons + ) itl + in + link_hints annotation_window + (Array.concat + [ + [| "Ingredients","" |]; + (Array.mapi + (fun i _ -> + "Type Name " ^ string_of_int i, + "" + ) (Array.of_list itlids) + ) ; + (Array.mapi + (fun i (id,_) -> + "Type " ^ string_of_int i, "" + ) (Array.of_list itlids) + ) ; + (Array.concat + (list_mapi + (fun i (_,consid) -> + (Array.mapi + (fun j _ -> + "Constructor Name " ^ string_of_int i ^ " " ^ string_of_int j, + "" + ) (Array.of_list consid) + ) ; + ) itlids + ) + ) ; + (Array.concat + (list_mapi + (fun i (_,consid) -> + (Array.mapi + (fun j id -> + "Constructor " ^ string_of_int i ^ " " ^ string_of_int j, + "" + ) (Array.of_list consid) + ) ; + ) itlids + ) + ) + ] + ) +;; + +exception IdUnknown of string;; + +let create_hints annotation_window (annobj,ids_to_targets) xpath = + try + match Hashtbl.find ids_to_targets xpath with + Cic.Object annobj -> create_hint_from_obj annotation_window annobj + | Cic.Term annterm -> create_hint_from_term annotation_window annterm + with + Not_found -> raise (IdUnknown xpath) +;; diff --git a/helm/interface/cicCache.ml b/helm/interface/cicCache.ml new file mode 100644 index 000000000..1b8488a40 --- /dev/null +++ b/helm/interface/cicCache.ml @@ -0,0 +1,187 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module implements a trival cache system (an hash-table) for cic *) +(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml) *) +(* *) +(******************************************************************************) + +let raise e = print_endline "***" ; flush stdout ; print_endline (Printexc.to_string e) ; flush stdout ; raise e;; + +(*CSC: forse i due seguenti tipi sono da unificare? *) +type cooked_obj = + Cooked of Cic.obj + | Frozen of Cic.obj + | Unchecked of Cic.obj +type type_checked_obj = + CheckedObj of Cic.obj (* cooked obj *) + | UncheckedObj of Cic.obj (* uncooked obj *) +;; + +exception NoFunctionProvided;; + +(* CSC: da sostituire con un (...) option ref *) +let cook_obj = ref (fun obj uri -> raise NoFunctionProvided);; + +exception CircularDependency of string;; +exception CouldNotUnfreeze of string;; +exception Impossible;; +exception UncookedObj;; + +module HashedType = + struct + type t = UriManager.uri * int (* uri, livello di cottura *) + let equal (u1,n1) (u2,n2) = UriManager.eq u1 u2 && n1 = n2 + let hash = Hashtbl.hash + end +;; + +(* Hashtable that uses == instead of = for testing equality *) +module HashTable = Hashtbl.Make(HashedType);; + +let hashtable = HashTable.create 271;; + +(* n is the number of time that the object must be cooked *) +let get_obj_and_type_checking_info uri n = + try + HashTable.find hashtable (uri,n) + with + Not_found -> + try + match HashTable.find hashtable (uri,0) with + Cooked _ + | Frozen _ -> raise Impossible + | Unchecked _ as t -> t + with + Not_found -> + let filename = Getter.get uri in + let (annobj,_) = CicParser.term_of_xml filename uri false in + let obj = Deannotate.deannotate_obj annobj in + let output = Unchecked obj in + HashTable.add hashtable (uri,0) output ; + output +;; + +(* DANGEROUS!!! *) +(* USEFUL ONLY DURING THE FIXING OF THE FILES *) +(* change_obj uri (Some newobj) *) +(* maps uri to newobj in cache. *) +(* change_obj uri None *) +(* maps uri to a freeze dummy-object. *) +let change_obj uri newobj = + let newobj = + match newobj with + Some newobj' -> Unchecked newobj' + | None -> Frozen (Cic.Variable ("frozen-dummy", Cic.Implicit)) + in + HashTable.remove hashtable (uri,0) ; + HashTable.add hashtable (uri,0) newobj +;; + +let is_annotation_uri uri = + Str.string_match (Str.regexp ".*\.ann$") (UriManager.string_of_uri uri) 0 +;; + +(* returns both the annotated and deannotated uncooked forms (plus the *) +(* map from ids to annotation targets) *) +let get_annobj_and_type_checking_info uri = + let filename = Getter.get uri in + match CicParser.term_of_xml filename uri true with + (_, None) -> raise Impossible + | (annobj, Some ids_to_targets) -> + (* If uri is the uri of an annotation, let's use the annotation file *) + if is_annotation_uri uri then + AnnotationParser.annotate (Getter.get_ann uri) ids_to_targets ; + try + (annobj, ids_to_targets, HashTable.find hashtable (uri,0)) + with + Not_found -> + let obj = Deannotate.deannotate_obj annobj in + let output = Unchecked obj in + HashTable.add hashtable (uri,0) output ; + (annobj, ids_to_targets, output) +;; + + +(* get_obj uri *) +(* returns the cic object whose uri is uri. If the term is not just in cache, *) +(* then it is parsed via CicParser.term_of_xml from the file whose name is *) +(* the result of Getter.get uri *) +let get_obj uri = + match get_obj_and_type_checking_info uri 0 with + Unchecked obj -> obj + | Frozen obj -> obj + | Cooked obj -> obj +;; + +(* get_annobj uri *) +(* returns the cic object whose uri is uri either in annotated and *) +(* deannotated form. The term is put into the cache if it's not there yet. *) +let get_annobj uri = + let (ann, ids_to_targets, deann) = get_annobj_and_type_checking_info uri in + let deannobj = + match deann with + Unchecked obj -> obj + | Frozen _ -> raise (CircularDependency (UriManager.string_of_uri uri)) + | Cooked obj -> obj + in + (ann, ids_to_targets, deannobj) +;; + +(*CSC Commento falso *) +(* get_obj uri *) +(* returns the cooked cic object whose uri is uri. The term must be present *) +(* and cooked in cache *) +let rec get_cooked_obj uri cookingsno = + match get_obj_and_type_checking_info uri cookingsno with + Unchecked _ + | Frozen _ -> raise UncookedObj + | Cooked obj -> obj +;; + +(* is_type_checked uri *) +(* CSC: commento falso ed obsoleto *) +(* returns true if the term has been type-checked *) +(* otherwise it returns false and freeze the term for type-checking *) +(* set_type_checking_info must be called to unfreeze the term *) +let is_type_checked uri cookingsno = + match get_obj_and_type_checking_info uri cookingsno with + Cooked obj -> CheckedObj obj + | Unchecked obj -> + HashTable.remove hashtable (uri,0) ; + HashTable.add hashtable (uri,0) (Frozen obj) ; + UncheckedObj obj + | Frozen _ -> raise (CircularDependency (UriManager.string_of_uri uri)) +;; + +(* set_type_checking_info uri *) +(* must be called once the type-checking of uri is finished *) +(* The object whose uri is uri is unfreezed *) +let set_type_checking_info uri = + match HashTable.find hashtable (uri,0) with + Frozen obj -> + (* let's cook the object at every level *) + HashTable.remove hashtable (uri,0) ; + let obj' = CicSubstitution.undebrujin_inductive_def uri obj in + HashTable.add hashtable (uri,0) (Cooked obj') ; + let cooked_objs = !cook_obj obj' uri in + let last_cooked_level = ref 0 in + let last_cooked_obj = ref obj' in + List.iter + (fun (n,cobj) -> + for i = !last_cooked_level + 1 to n do + HashTable.add hashtable (uri,i) (Cooked !last_cooked_obj) + done ; + HashTable.add hashtable (uri,n + 1) (Cooked cobj) ; + last_cooked_level := n + 1 ; + last_cooked_obj := cobj + ) cooked_objs ; + for i = !last_cooked_level + 1 to UriManager.depth_of_uri uri + 1 do + HashTable.add hashtable (uri,i) (Cooked !last_cooked_obj) + done + | _ -> raise (CouldNotUnfreeze (UriManager.string_of_uri uri)) +;; diff --git a/helm/interface/cicCache.mli b/helm/interface/cicCache.mli new file mode 100644 index 000000000..e6cb313ce --- /dev/null +++ b/helm/interface/cicCache.mli @@ -0,0 +1,56 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module implements a trival cache system (an hash-table) for cic *)(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml) *)(* *) +(******************************************************************************) + +exception CircularDependency of string;; + +(* get_obj uri *) +(* returns the cic object whose uri is uri. If the term is not just in cache, *) +(* then it is parsed via CicParser.term_of_xml from the file whose name is *) +(* the result of Getter.get uri *) +val get_obj : UriManager.uri -> Cic.obj + +(* get_annobj uri *) +(* returns the cic object whose uri is uri either in annotated and in *) +(* deannotated form. It returns also the map from ids to annotation targets. *) +(* The term is put in cache if it's not there yet. *) +(* The functions raise CircularDependency if asked to retrieve a Frozen object*) +val get_annobj : + UriManager.uri -> Cic.annobj * (Cic.id, Cic.anntarget) Hashtbl.t * Cic.obj + +(* DANGEROUS!!! *) +(* USEFUL ONLY DURING THE FIXING OF THE FILES *) +(* change_obj uri (Some newobj) *) +(* maps uri to newobj in cache. *) +(* change_obj uri None *) +(* maps uri to a freeze dummy-object. *) +val change_obj : UriManager.uri -> Cic.obj option -> unit + +type type_checked_obj = + CheckedObj of Cic.obj (* cooked obj *) + | UncheckedObj of Cic.obj (* uncooked obj *) + +(* is_type_checked uri cookingsno *) +(*CSC commento falso ed obsoleto *) +(* returns (true,object) if the object has been type-checked *) +(* otherwise it returns (false,object) and freeze the object for *) +(* type-checking *) +(* set_type_checking_info must be called to unfreeze the object *) +val is_type_checked : UriManager.uri -> int -> type_checked_obj + +(* set_type_checking_info uri *) +(* must be called once the type-checking of uri is finished *) +(* The object whose uri is uri is unfreezed and won't be type-checked *) +(* again in the future (is_type_checked will return true) *) +val set_type_checking_info : UriManager.uri -> unit + +(* get_cooked_obj uri cookingsno *) +val get_cooked_obj : UriManager.uri -> int -> Cic.obj + +val cook_obj : (Cic.obj -> UriManager.uri -> (int * Cic.obj) list) ref diff --git a/helm/interface/cicCooking.ml b/helm/interface/cicCooking.ml new file mode 100644 index 000000000..4d72fb3cb --- /dev/null +++ b/helm/interface/cicCooking.ml @@ -0,0 +1,182 @@ +exception Impossible;; +exception NotImplemented of int * string;; +exception WrongUriToConstant;; +exception WrongUriToVariable of string;; +exception WrongUriToInductiveDefinition;; + +(* mem x lol is true if x is a member of one *) +(* of the lists of the list of (int * list) lol *) +let mem x lol = + List.fold_right (fun (_,l) i -> i || List.mem x l) lol false +;; + +(* cook var term *) +let cook curi cookingsno var = + let rec aux k = + let module C = Cic in + function + C.Rel n as t -> + (match n with + n when n >= k -> C.Rel (n + 1) + | _ -> C.Rel n + ) + | C.Var uri as t -> + if UriManager.eq uri var then + C.Rel k + else + t + | C.Meta _ as t -> t + | C.Sort _ as t -> t + | C.Implicit as t -> t + | C.Cast (te, ty) -> C.Cast (aux k te, aux k ty) + | C.Prod (n,s,t) -> C.Prod (n, aux k s, aux (k + 1) t) + | C.Lambda (n,s,t) -> C.Lambda (n, aux k s, aux (k + 1) t) + | C.Appl (he::tl) -> + (* Get rid of C.Appl (C.Appl l1) l2 *) + let newtl = List.map (aux k) tl in + (match aux k he with + C.Appl (he'::tl') -> C.Appl (he'::(tl'@newtl)) + | t -> C.Appl (t::newtl) + ) + | C.Appl [] -> raise Impossible + | C.Const (uri,_) -> + if match CicCache.get_obj uri with + C.Definition (_,_,_,params) when mem var params -> true + | C.Definition _ -> false + | C.Axiom (_,_,params) when mem var params -> true + | C.Axiom _ -> false + | C.CurrentProof _ -> + raise (NotImplemented (2,(UriManager.string_of_uri uri))) + | _ -> raise WrongUriToConstant + then + C.Appl + ((C.Const (uri,UriManager.relative_depth curi uri cookingsno)):: + [C.Rel k]) + else + C.Const (uri,UriManager.relative_depth curi uri cookingsno) + | C.Abst _ as t -> t + | C.MutInd (uri,_,i) -> + if match CicCache.get_obj uri with + C.InductiveDefinition (_,params,_) when mem var params -> true + | C.InductiveDefinition _ -> false + | _ -> raise WrongUriToInductiveDefinition + then + C.Appl ((C.MutInd (uri,UriManager.relative_depth curi uri cookingsno,i))::[C.Rel k]) + else + C.MutInd (uri,UriManager.relative_depth curi uri cookingsno,i) + | C.MutConstruct (uri,_,i,j) -> + if match CicCache.get_obj uri with + C.InductiveDefinition (_,params,_) when mem var params -> true + | C.InductiveDefinition _ -> false + | _ -> raise WrongUriToInductiveDefinition + then + C.Appl ((C.MutConstruct (uri,UriManager.relative_depth curi uri cookingsno,i,j))::[C.Rel k]) + else + C.MutConstruct (uri,UriManager.relative_depth curi uri cookingsno,i,j) + | C.MutCase (uri,_,i,outt,term,pl) -> + let substitutedfl = + List.map (aux k) pl + in + C.MutCase (uri,UriManager.relative_depth curi uri cookingsno,i, + aux k outt,aux k term, substitutedfl) + | C.Fix (i,fl) -> + let len = List.length fl in + let substitutedfl = + List.map + (fun (name,i,ty,bo) -> (name,i,aux k ty, aux (k+len) bo)) + fl + in + C.Fix (i, substitutedfl) + | C.CoFix (i,fl) -> + let len = List.length fl in + let substitutedfl = + List.map + (fun (name,ty,bo) -> (name,aux k ty, aux (k+len) bo)) + fl + in + C.CoFix (i, substitutedfl) + in + aux 1 +;; + +let cook_gen add_binder curi cookingsno ty vars = + let module C = Cic in + let module U = UriManager in + let rec cookrec ty = + function + var::tl -> + let (varname, vartype) = + match CicCache.get_obj var with + C.Variable (varname, vartype) -> (varname, vartype) + | _ -> raise (WrongUriToVariable (U.string_of_uri var)) + in + cookrec (add_binder (C.Name varname) vartype (cook curi cookingsno var ty)) tl + | _ -> ty + in + cookrec ty vars +;; + +let cook_prod = + cook_gen (fun n s t -> Cic.Prod (n,s,t)) +and cook_lambda = + cook_gen (fun n s t -> Cic.Lambda (n,s,t)) +;; + +(*CSC: sbagliato da rifare e completare *) +let cook_one_level obj curi cookingsno vars = + let module C = Cic in + match obj with + C.Definition (id,te,ty,params) -> + let ty' = cook_prod curi cookingsno ty vars in + let te' = cook_lambda curi cookingsno te vars in + C.Definition (id,te',ty',params) + | C.Axiom (id,ty,parameters) -> + let ty' = cook_prod curi cookingsno ty vars in + C.Axiom (id,ty',parameters) + | C.Variable _ as obj -> obj + | C.CurrentProof (id,conjs,te,ty) -> + let ty' = cook_prod curi cookingsno ty vars in + let te' = cook_lambda curi cookingsno te vars in + C.CurrentProof (id,conjs,te',ty') + | C.InductiveDefinition (dl, params, n_ind_params) -> + let dl' = + List.map + (fun (name,inductive,arity,constructors) -> + let constructors' = + List.map + (fun (name,ty,r) -> + let r' = + match !r with + None -> raise Impossible + | Some r -> List.map (fun _ -> false) vars @ r + in + (name,cook_prod curi cookingsno ty vars,ref (Some r')) + ) constructors + in + (name,inductive,cook_prod curi cookingsno arity vars,constructors') + ) dl + in + C.InductiveDefinition (dl', params, n_ind_params + List.length vars) +;; + +let cook_obj obj uri = + let module C = Cic in + let params = + match obj with + C.Definition (_,_,_,params) -> params + | C.Axiom (_,_,params) -> params + | C.Variable _ -> [] + | C.CurrentProof _ -> [] + | C.InductiveDefinition (_,params,_) -> params + in + let rec cook_all_levels obj = + function + [] -> [] + | (n,vars)::tl -> + let cooked_obj = cook_one_level obj uri (n + 1) (List.rev vars) in + (n,cooked_obj)::(cook_all_levels cooked_obj tl) + in + cook_all_levels obj (List.rev params) +;; + +CicCache.cook_obj := cook_obj;; diff --git a/helm/interface/cicCooking.mli b/helm/interface/cicCooking.mli new file mode 100644 index 000000000..586e5d78a --- /dev/null +++ b/helm/interface/cicCooking.mli @@ -0,0 +1,6 @@ +exception Impossible +exception NotImplemented of int * string +exception WrongUriToConstant +exception WrongUriToVariable of string +exception WrongUriToInductiveDefinition +val cook_obj : Cic.obj -> UriManager.uri -> (int * Cic.obj) list diff --git a/helm/interface/cicFindParameters.ml b/helm/interface/cicFindParameters.ml new file mode 100644 index 000000000..607dd525c --- /dev/null +++ b/helm/interface/cicFindParameters.ml @@ -0,0 +1,137 @@ +exception WrongUriToConstant;; +exception WrongUriToInductiveDefinition;; +exception CircularDependency of string;; + +module OrderedUris = + struct + type t = UriManager.uri + let compare (s1 : t) (s2 : t) = + (* library function for = *) + compare s1 s2 + (*if s1 = s2 then 0 else if s1 < s2 then (-1) else 1*) + end +;; + +let filename_of_uri uri = + let uri' = UriManager.string_of_uri uri in + let fn = Str.replace_first (Str.regexp "cic:") Configuration.helm_dir uri' in + fn ^ ".xml" +;; + +(* quite inefficient coding of a set of strings: the only operations *) +(* performed are mem O(log n), and union O(n * log n?) *) +(* Perhaps a better implementation would be an array of bits or a map *) +(* from uri to booleans *) +module SetOfUris = Set.Make(OrderedUris);; + +let (@@) = SetOfUris.union;; + +let rec parameters_of te ty pparams= + let module S = SetOfUris in + let module C = Cic in + let rec aux = + function + C.Rel _ -> S.empty + | C.Var uri -> S.singleton uri + | C.Meta _ -> S.empty + | C.Sort _ -> S.empty + | C.Implicit -> S.empty + | C.Cast (te, ty) -> aux te @@ aux ty + | C.Prod (_, s, t) -> aux s @@ aux t + | C.Lambda (_, s, t) -> aux s @@ aux t + | C.Appl l -> List.fold_right (fun x i -> aux x @@ i) l S.empty + | C.Const (uri,_) -> + (* the parameters could be not exact but only possible *) + fix_params uri (Some (filename_of_uri uri)) ; + (* now the parameters are surely possible *) + (match CicCache.get_obj uri with + C.Definition (_, _, _, params) -> + List.fold_right + (fun (_,l) i -> + List.fold_right + (fun x i -> S.singleton x @@ i) l i + ) params S.empty + | C.Axiom (_, _, params) -> + List.fold_right + (fun (_,l) i -> + List.fold_right + (fun x i -> S.singleton x @@ i) l i + ) params S.empty + | C.CurrentProof _ -> S.empty (*CSC wrong *) + | _ -> raise WrongUriToConstant + ) + | C.Abst _ -> S.empty + | C.MutInd (uri,_,_) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (_, params, _) -> + List.fold_right + (fun (_,l) i -> + List.fold_right + (fun x i -> S.singleton x @@ i) l i + ) params S.empty + | _ -> raise WrongUriToInductiveDefinition + ) + | C.MutConstruct (uri,_,_,_) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (_, params, _) -> + List.fold_right + (fun (_,l) i -> + List.fold_right + (fun x i -> S.singleton x @@ i) l i + ) params S.empty + | _ -> raise WrongUriToInductiveDefinition + ) + | C.MutCase (uri,_,_,outtype,term,patterns) -> + (*CSC cosa basta? Ci vuole anche uri? *) + (match CicCache.get_obj uri with + C.InductiveDefinition (_, params, _) -> + List.fold_right + (fun (_,l) i -> + List.fold_right + (fun x i -> S.singleton x @@ i) l i + ) params S.empty + | _ -> raise WrongUriToInductiveDefinition + ) @@ aux outtype @@ aux term @@ + List.fold_right (fun x i -> aux x @@ i) patterns S.empty + | C.Fix (_,fl) -> + List.fold_right + (fun (_,_,ty,bo) i -> aux ty @@ aux bo @@ i) + fl S.empty + | C.CoFix (_,fl) -> + List.fold_right + (fun (_,ty,bo) i -> aux ty @@ aux bo @@ i) + fl S.empty + in + let actual_params = aux te @@ aux ty in + (* sort_actual_params wants in input the ordered list of possible params *) + let rec sort_actual_params2 = + function + [] -> [] + | he::tl when S.mem he actual_params -> he::(sort_actual_params2 tl) + | _::tl -> sort_actual_params2 tl + in + let rec sort_actual_params = + function + [] -> [] + | (n,l)::tl -> (n, sort_actual_params2 l)::(sort_actual_params tl) + in + sort_actual_params pparams + +and fix_params uri filename = + let module C = Cic in + let (ann, _, deann) = CicCache.get_annobj uri in + match ann, deann with + (C.ADefinition (xid, ann, id, te, ty, C.Possible pparams), + C.Definition (id', te', ty', _)) -> + (* let's freeze the object to avoid circular dependencies *) + CicCache.change_obj uri None ; + let real_params = parameters_of te' ty' pparams in + let fixed = + C.ADefinition (xid,ann,id,te,ty,C.Actual real_params) + in + Xml.pp (Cic2Xml.pp fixed uri) filename ; + (* unfreeze and fix the object *) + CicCache.change_obj uri + (Some (C.Definition (id', te', ty', real_params))) + | _ -> () +;; diff --git a/helm/interface/cicParser.ml b/helm/interface/cicParser.ml new file mode 100644 index 000000000..ec8c5efb8 --- /dev/null +++ b/helm/interface/cicParser.ml @@ -0,0 +1,69 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This is the main (top level) module of a parser for cic objects from xml *) +(* files to the internal representation. It uses the modules cicParser2 *) +(* (objects level) and cicParser3 (terms level) *) +(* *) +(******************************************************************************) + +exception Warnings;; + +class warner = + object + method warn w = + print_endline ("WARNING: " ^ w) ; + (raise Warnings : unit) + end +;; + +exception EmptyUri;; + +(* given an uri u it returns the list of tokens of the base uri of u *) +(* e.g.: token_of_uri "cic:/a/b/c/d.xml" returns ["a" ; "b" ; "c"] *) +let tokens_of_uri uri = + let uri' = UriManager.string_of_uri uri in + let rec chop_list = + function + [] -> raise EmptyUri + | he::[fn] -> [he] + | he::tl -> he::(chop_list tl) + in + let trimmed_uri = Str.replace_first (Str.regexp "cic:") "" uri' in + let list_of_tokens = Str.split (Str.regexp "/") trimmed_uri in + chop_list list_of_tokens +;; + +(* given the filename of an xml file of a cic object it returns its internal *) +(* representation. process_annotations is true if the annotations do really *) +(* matter *) +let term_of_xml filename uri process_annotations = + let module Y = Pxp_yacc in + try + let d = + (* sets the current base uri to resolve relative URIs *) + CicParser3.current_sp := tokens_of_uri uri ; + CicParser3.current_uri := uri ; + CicParser3.process_annotations := process_annotations ; + CicParser3.ids_to_targets := + if process_annotations then Some (Hashtbl.create 500) else None ; + let config = {Y.default_config with Y.warner = new warner} in + Y.parse_document_entity config +(*PXP (Y.ExtID (Pxp_types.System filename, + new Pxp_reader.resolve_as_file ~url_of_id ())) +*) (PxpUriResolver.from_file filename) + CicParser3.domspec + in + let ids_to_targets = !CicParser3.ids_to_targets in + let res = (CicParser2.get_term d#root, ids_to_targets) in + CicParser3.ids_to_targets := None ; (* let's help the GC *) + res + with + e -> + print_endline (Pxp_types.string_of_exn e) ; + raise e +;; diff --git a/helm/interface/cicParser.mli b/helm/interface/cicParser.mli new file mode 100644 index 000000000..961a262fe --- /dev/null +++ b/helm/interface/cicParser.mli @@ -0,0 +1,19 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 22/03/2000 *) +(* *) +(* This is the main (top level) module of a parser for cic objects from xml *) +(* files to the internal representation. It uses the modules cicParser2 *) +(* (objects level) and cicParser3 (terms level) *) +(* *) +(******************************************************************************) + +(* given the filename of an xml file of a cic object and it's uri, it returns *) +(* its internal annotated representation. The boolean is set to true if the *) +(* annotations do really matter *) +val term_of_xml : + string -> UriManager.uri -> bool -> + Cic.annobj * (Cic.id, Cic.anntarget) Hashtbl.t option diff --git a/helm/interface/cicParser2.ml b/helm/interface/cicParser2.ml new file mode 100644 index 000000000..343e22b19 --- /dev/null +++ b/helm/interface/cicParser2.ml @@ -0,0 +1,250 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module is the objects level of a parser for cic objects from xml *) +(* files to the internal representation. It uses the module cicParser3 *) +(* cicParser3 (terms level) and it is used only through cicParser2 (top *) +(* level). *) +(* *) +(******************************************************************************) + +exception IllFormedXml of int;; +exception NotImplemented;; + +(* Utility functions that transform a Pxp attribute into something useful *) + +(* mk_absolute_uris "n1: v1 ... vn n2 : u1 ... un ...." *) +(* returns [(n1,[absolute_uri_for_v1 ; ... ; absolute_uri_for_vn]) ; (n2,...) *) +let mk_absolute_uris s = + let l = (Str.split (Str.regexp ":") s) in + let absolute_of_relative n v = + let module P3 = CicParser3 in + let rec mkburi = + function + (0,_) -> "/" + | (n,he::tl) when n > 0 -> + "/" ^ he ^ mkburi (n - 1, tl) + | _ -> raise (IllFormedXml 12) + in + let m = List.length !P3.current_sp - (int_of_string n) in + let buri = mkburi (m, !P3.current_sp) in + UriManager.uri_of_string ("cic:" ^ buri ^ v ^ ".var") + in + let rec absolutize = + function + [] -> [] + | [no ; vs] -> + let vars = (Str.split (Str.regexp " ") vs) in + [(int_of_string no, List.map (absolute_of_relative no) vars)] + | no::vs::tl -> + let vars = (Str.split (Str.regexp " ") vs) in + let rec add_prefix = + function + [no2] -> ([], no2) + | he::tl -> + let (pvars, no2) = add_prefix tl in + ((absolute_of_relative no he)::pvars, no2) + | _ -> raise (IllFormedXml 11) + in + let (pvars, no2) = add_prefix vars in + (int_of_string no, pvars)::(absolutize (no2::tl)) + | _ -> raise (IllFormedXml 10) + in + (* last parameter must be applied first *) + absolutize l +;; + +let option_uri_list_of_attr a1 a2 = + let module T = Pxp_types in + let parameters = + match a1 with + T.Value s -> mk_absolute_uris s + | _ -> raise (IllFormedXml 0) + in + match a2 with + T.Value "POSSIBLE" -> Cic.Possible parameters + | T.Implied_value -> Cic.Actual parameters + | _ -> raise (IllFormedXml 0) +;; + +let uri_list_of_attr a = + let module T = Pxp_types in + match a with + T.Value s -> mk_absolute_uris s + | _ -> raise (IllFormedXml 0) +;; + +let string_of_attr a = + let module T = Pxp_types in + match a with + T.Value s -> s + | _ -> raise (IllFormedXml 0) +;; + +let int_of_attr a = + int_of_string (string_of_attr a) +;; + +let bool_of_attr a = + bool_of_string (string_of_attr a) +;; + +(* Other utility functions *) + +let get_content n = + match n#sub_nodes with + [ t ] -> t + | _ -> raise (IllFormedXml 1) +;; + +let register_id id node = + if !CicParser3.process_annotations then + match !CicParser3.ids_to_targets with + None -> assert false + | Some ids_to_targets -> + Hashtbl.add ids_to_targets id (Cic.Object node) +;; + +(* Functions that, given the list of sons of a node of the cic dom (objects *) +(* level), retrieve the internal representation associated to the node. *) +(* Everytime a cic term subtree is found, it is translated to the internal *) +(* representation using the method to_cic_term defined in cicParser3. *) +(* Each function raise IllFormedXml if something goes wrong, but this should *) +(* be impossible due to the presence of the dtd *) +(* The functions should really be obvious looking at their name and the cic *) +(* dtd *) + +(* called when a CurrentProof is found *) +let get_conjs_value_type l = + let rec rget (c, v, t) l = + let module D = Pxp_document in + match l with + [] -> (c, v, t) + | conj::tl when conj#node_type = D.T_element "Conjecture" -> + let no = int_of_attr (conj#attribute "no") + and typ = (get_content conj)#extension#to_cic_term in + rget ((no, typ)::c, v, t) tl + | value::tl when value#node_type = D.T_element "body" -> + let v' = (get_content value)#extension#to_cic_term in + (match v with + None -> rget (c, Some v', t) tl + | _ -> raise (IllFormedXml 2) + ) + | typ::tl when typ#node_type = D.T_element "type" -> + let t' = (get_content typ)#extension#to_cic_term in + (match t with + None -> rget (c, v, Some t') tl + | _ -> raise (IllFormedXml 3) + ) + | _ -> raise (IllFormedXml 4) + in + match rget ([], None, None) l with + (c, Some v, Some t) -> (c, v, t) + | _ -> raise (IllFormedXml 5) +;; + +(* used only by get_inductive_types; called one time for each inductive *) +(* definitions in a block of inductive definitions *) +let get_names_arity_constructors l = + let rec rget (a,c) l = + let module D = Pxp_document in + match l with + [] -> (a, c) + | arity::tl when arity#node_type = D.T_element "arity" -> + let a' = (get_content arity)#extension#to_cic_term in + rget (Some a',c) tl + | con::tl when con#node_type = D.T_element "Constructor" -> + let id = string_of_attr (con#attribute "name") + and ty = (get_content con)#extension#to_cic_term in + rget (a,(id,ty,ref None)::c) tl + | _ -> raise (IllFormedXml 9) + in + match rget (None,[]) l with + (Some a, c) -> (a, List.rev c) + | _ -> raise (IllFormedXml 8) +;; + +(* called when an InductiveDefinition is found *) +let rec get_inductive_types = + function + [] -> [] + | he::tl -> + let tyname = string_of_attr (he#attribute "name") + and inductive = bool_of_attr (he#attribute "inductive") + and (arity,cons) = + get_names_arity_constructors (he#sub_nodes) + in + (tyname,inductive,arity,cons)::(get_inductive_types tl) (*CSC 0 a caso *) +;; + +(* This is the main function and also the only one used directly from *) +(* cicParser. Given the root of the dom tree, it returns the internal *) +(* representation of the cic object described in the tree *) +(* It uses the previous functions and the to_cic_term method defined *) +(* in cicParser3 (used for subtrees that encode cic terms) *) +let rec get_term n = + let module D = Pxp_document in + let module C = Cic in + let ntype = n # node_type in + match ntype with + D.T_element "Definition" -> + let id = string_of_attr (n # attribute "name") + and params = + option_uri_list_of_attr (n#attribute "params") (n#attribute "paramMode") + and (value, typ) = + let sons = n#sub_nodes in + match sons with + [v ; t] when + v#node_type = D.T_element "body" && + t#node_type = D.T_element "type" -> + let v' = get_content v + and t' = get_content t in + (v'#extension#to_cic_term, t'#extension#to_cic_term) + | _ -> raise (IllFormedXml 6) + and xid = string_of_attr (n#attribute "id") in + let res = C.ADefinition (xid, ref None, id, value, typ, params) in + register_id xid res ; + res + | D.T_element "Axiom" -> + let id = string_of_attr (n # attribute "name") + and params = uri_list_of_attr (n # attribute "params") + and typ = + (get_content (get_content n))#extension#to_cic_term + and xid = string_of_attr (n#attribute "id") in + let res = C.AAxiom (xid, ref None, id, typ, params) in + register_id xid res ; + res + | D.T_element "CurrentProof" -> + let name = string_of_attr (n#attribute "name") + and xid = string_of_attr (n#attribute "id") in + let sons = n#sub_nodes in + let (conjs, value, typ) = get_conjs_value_type sons in + let res = C.ACurrentProof (xid, ref None, name, conjs, value, typ) in + register_id xid res ; + res + | D.T_element "InductiveDefinition" -> + let sons = n#sub_nodes + and xid = string_of_attr (n#attribute "id") in + let inductiveTypes = get_inductive_types sons + and params = uri_list_of_attr (n#attribute "params") + and nparams = int_of_attr (n#attribute "noParams") in + let res = + C.AInductiveDefinition (xid, ref None, inductiveTypes, params, nparams) + in + register_id xid res ; + res + | D.T_element "Variable" -> + let name = string_of_attr (n#attribute "name") + and xid = string_of_attr (n#attribute "id") in + let typ = (get_content (get_content n))#extension#to_cic_term in + let res = C.AVariable (xid,ref None,name,typ) in + register_id xid res ; + res + | D.T_element _ + | D.T_data -> + raise (IllFormedXml 7) +;; diff --git a/helm/interface/cicParser2.mli b/helm/interface/cicParser2.mli new file mode 100644 index 000000000..50a551faf --- /dev/null +++ b/helm/interface/cicParser2.mli @@ -0,0 +1,32 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module is the objects level of a parser for cic objects from xml *) +(* files to the internal representation. It uses the module cicParser3 *) +(* cicParser3 (terms level) and it is used only through cicParser2 (top *) +(* level). *) +(* *) +(******************************************************************************) + +exception IllFormedXml of int +exception NotImplemented + +(* This is the main function and also the only one used directly from *) +(* cicParser. Given the root of the dom tree, it returns the internal *) +(* representation of the cic object described in the tree *) +(* It uses the previous functions and the to_cic_term method defined *) +(* in cicParser3 (used for subtrees that encode cic terms) *) +val get_term : + < attribute : string -> Pxp_types.att_value; + node_type : Pxp_document.node_type; + sub_nodes : < attribute : string -> Pxp_types.att_value; + node_type : Pxp_document.node_type; + sub_nodes : CicParser3.cic_term Pxp_document.node list; + .. > + list; + .. > -> + Cic.annobj diff --git a/helm/interface/cicParser3.ml b/helm/interface/cicParser3.ml new file mode 100644 index 000000000..d0c31b0f0 --- /dev/null +++ b/helm/interface/cicParser3.ml @@ -0,0 +1,515 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module is the terms level of a parser for cic objects from xml *) +(* files to the internal representation. It is used by the module cicParser2 *) +(* (objects level). It defines an extension of the standard dom using the *) +(* object-oriented extension machinery of markup: an object with a method *) +(* to_cic_term that returns the internal representation of the subtree is *) +(* added to each node of the dom tree *) +(* *) +(******************************************************************************) + +exception IllFormedXml of int;; + +(* The hashtable from the current identifiers to the object or the terms *) +let ids_to_targets = ref None;; + +(* The list of tokens of the current section path. *) +(* Used to resolve relative URIs *) +let current_sp = ref [];; + +(* The uri of the object been parsed *) +let current_uri = ref (UriManager.uri_of_string "cic:/.xml");; + +(* True if annotation really matter *) +let process_annotations = ref false;; + +(* Utility functions to map a markup attribute to something useful *) + +let cic_attr_of_xml_attr = + function + Pxp_types.Value s -> Cic.Name s + | Pxp_types.Implied_value -> Cic.Anonimous + | _ -> raise (IllFormedXml 1) + +let cic_sort_of_xml_attr = + function + Pxp_types.Value "Prop" -> Cic.Prop + | Pxp_types.Value "Set" -> Cic.Set + | Pxp_types.Value "Type" -> Cic.Type + | _ -> raise (IllFormedXml 2) + +let int_of_xml_attr = + function + Pxp_types.Value n -> int_of_string n + | _ -> raise (IllFormedXml 3) + +let uri_of_xml_attr = + function + Pxp_types.Value s -> UriManager.uri_of_string s + | _ -> raise (IllFormedXml 4) + +let string_of_xml_attr = + function + Pxp_types.Value s -> s + | _ -> raise (IllFormedXml 5) + +let binder_of_xml_attr = + function + Pxp_types.Value s -> if !process_annotations then Some s else None + | _ -> raise (IllFormedXml 17) +;; + +let register_id id node = + if !process_annotations then + match !ids_to_targets with + None -> assert false + | Some ids_to_targets -> + Hashtbl.add ids_to_targets id (Cic.Term node) +;; + +(* the "interface" of the class linked to each node of the dom tree *) + +class virtual cic_term = + object (self) + + (* fields and methods ever required by markup *) + val mutable node = (None : cic_term Pxp_document.node option) + + method clone = {< >} + method node = + match node with + None -> + assert false + | Some n -> n + method set_node n = + node <- Some n + + (* a method that returns the internal representation of the tree (term) *) + (* rooted in this node *) + method virtual to_cic_term : Cic.annterm + end +;; + +(* the class of the objects linked to nodes that are not roots of cic terms *) +class eltype_not_of_cic = + object (self) + + inherit cic_term + + method to_cic_term = raise (IllFormedXml 6) + end +;; + +(* the class of the objects linked to nodes whose content is a cic term *) +(* (syntactic sugar xml entities) e.g. ... *) +class eltype_transparent = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + match n#sub_nodes with + [ t ] -> t#extension#to_cic_term + | _ -> raise (IllFormedXml 7) + end +;; + +(* A class for each cic node type *) + +class eltype_fix = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let nofun = int_of_xml_attr (n#attribute "noFun") + and id = string_of_xml_attr (n#attribute "id") + and functions = + let sons = n#sub_nodes in + List.map + (function + f when f#node_type = Pxp_document.T_element "FixFunction" -> + let name = string_of_xml_attr (f#attribute "name") + and recindex = int_of_xml_attr (f#attribute "recIndex") + and (ty, body) = + match f#sub_nodes with + [t ; b] when + t#node_type = Pxp_document.T_element "type" && + b#node_type = Pxp_document.T_element "body" -> + (t#extension#to_cic_term, b#extension#to_cic_term) + | _ -> raise (IllFormedXml 14) + in + (name, recindex, ty, body) + | _ -> raise (IllFormedXml 13) + ) sons + in + let res = Cic.AFix (id, ref None, nofun, functions) in + register_id id res ; + res + end +;; + +class eltype_cofix = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let nofun = int_of_xml_attr (n#attribute "noFun") + and id = string_of_xml_attr (n#attribute "id") + and functions = + let sons = n#sub_nodes in + List.map + (function + f when f#node_type = Pxp_document.T_element "CofixFunction" -> + let name = string_of_xml_attr (f#attribute "name") + and (ty, body) = + match f#sub_nodes with + [t ; b] when + t#node_type = Pxp_document.T_element "type" && + b#node_type = Pxp_document.T_element "body" -> + (t#extension#to_cic_term, b#extension#to_cic_term) + | _ -> raise (IllFormedXml 16) + in + (name, ty, body) + | _ -> raise (IllFormedXml 15) + ) sons + in + let res = Cic.ACoFix (id, ref None, nofun, functions) in + register_id id res ; + res + end +;; + +class eltype_implicit = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let id = string_of_xml_attr (n#attribute "id") in + let res = Cic.AImplicit (id, ref None) in + register_id id res ; + res + end +;; + +class eltype_rel = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let value = int_of_xml_attr (n#attribute "value") + and binder = binder_of_xml_attr (n#attribute "binder") + and id = string_of_xml_attr (n#attribute "id") in + let res = Cic.ARel (id,ref None,value,binder) in + register_id id res ; + res + end +;; + +class eltype_meta = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let value = int_of_xml_attr (n#attribute "no") + and id = string_of_xml_attr (n#attribute "id") in + let res = Cic.AMeta (id,ref None,value) in + register_id id res ; + res + end +;; + +class eltype_var = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let name = string_of_xml_attr (n#attribute "relUri") + and xid = string_of_xml_attr (n#attribute "id") in + match Str.split (Str.regexp ",") name with + [index; id] -> + let get_prefix n = + let rec aux = + function + (0,_) -> "/" + | (n,he::tl) when n > 0 -> "/" ^ he ^ aux (n - 1, tl) + | _ -> raise (IllFormedXml 19) + in + aux (List.length !current_sp - n,!current_sp) + in + let res = + Cic.AVar + (xid,ref None, + (UriManager.uri_of_string + ("cic:" ^ get_prefix (int_of_string index) ^ id ^ ".var")) + ) + in + register_id id res ; + res + | _ -> raise (IllFormedXml 18) + end +;; + +class eltype_apply = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let children = n#sub_nodes + and id = string_of_xml_attr (n#attribute "id") in + if List.length children < 2 then raise (IllFormedXml 8) + else + let res = + Cic.AAppl + (id,ref None,List.map (fun x -> x#extension#to_cic_term) children) + in + register_id id res ; + res + end +;; + +class eltype_cast = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let sons = n#sub_nodes + and id = string_of_xml_attr (n#attribute "id") in + match sons with + [te ; ty] when + te#node_type = Pxp_document.T_element "term" && + ty#node_type = Pxp_document.T_element "type" -> + let term = te#extension#to_cic_term + and typ = ty#extension#to_cic_term in + let res = Cic.ACast (id,ref None,term,typ) in + register_id id res ; + res + | _ -> raise (IllFormedXml 9) + end +;; + +class eltype_sort = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let sort = cic_sort_of_xml_attr (n#attribute "value") + and id = string_of_xml_attr (n#attribute "id") in + let res = Cic.ASort (id,ref None,sort) in + register_id id res ; + res + end +;; + +class eltype_abst = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let value = uri_of_xml_attr (n#attribute "uri") + and id = string_of_xml_attr (n#attribute "id") in + let res = Cic.AAbst (id,ref None,value) in + register_id id res ; + res + end +;; + +class eltype_const = + object (self) + + inherit cic_term + + method to_cic_term = + let module U = UriManager in + let n = self#node in + let value = uri_of_xml_attr (n#attribute "uri") + and id = string_of_xml_attr (n#attribute "id") in + let res = + Cic.AConst (id,ref None,value, U.relative_depth !current_uri value 0) + in + register_id id res ; + res + end +;; + +class eltype_mutind = + object (self) + + inherit cic_term + + method to_cic_term = + let module U = UriManager in + let n = self#node in + let name = uri_of_xml_attr (n#attribute "uri") + and noType = int_of_xml_attr (n#attribute "noType") + and id = string_of_xml_attr (n#attribute "id") in + let res = + Cic.AMutInd + (id,ref None,name, U.relative_depth !current_uri name 0, noType) + in + register_id id res ; + res + end +;; + +class eltype_mutconstruct = + object (self) + + inherit cic_term + + method to_cic_term = + let module U = UriManager in + let n = self#node in + let name = uri_of_xml_attr (n#attribute "uri") + and noType = int_of_xml_attr (n#attribute "noType") + and noConstr = int_of_xml_attr (n#attribute "noConstr") + and id = string_of_xml_attr (n#attribute "id") in + let res = + Cic.AMutConstruct + (id, ref None, name, U.relative_depth !current_uri name 0, + noType, noConstr) + in + register_id id res ; + res + end +;; + +class eltype_prod = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let sons = n#sub_nodes + and id = string_of_xml_attr (n#attribute "id") in + match sons with + [s ; t] when + s#node_type = Pxp_document.T_element "source" && + t#node_type = Pxp_document.T_element "target" -> + let name = cic_attr_of_xml_attr (t#attribute "binder") + and source = s#extension#to_cic_term + and target = t#extension#to_cic_term in + let res = Cic.AProd (id,ref None,name,source,target) in + register_id id res ; + res + | _ -> raise (IllFormedXml 10) + end +;; + +class eltype_mutcase = + object (self) + + inherit cic_term + + method to_cic_term = + let module U = UriManager in + let n = self#node in + let sons = n#sub_nodes + and id = string_of_xml_attr (n#attribute "id") in + match sons with + ty::te::patterns when + ty#node_type = Pxp_document.T_element "patternsType" && + te#node_type = Pxp_document.T_element "inductiveTerm" -> + let ci = uri_of_xml_attr (n#attribute "uriType") + and typeno = int_of_xml_attr (n#attribute "noType") + and inductiveType = ty#extension#to_cic_term + and inductiveTerm = te#extension#to_cic_term + and lpattern= List.map (fun x -> x#extension#to_cic_term) patterns + in + let res = + Cic.AMutCase (id,ref None,ci,U.relative_depth !current_uri ci 0, + typeno,inductiveType,inductiveTerm,lpattern) + in + register_id id res ; + res + | _ -> raise (IllFormedXml 11) + end +;; + +class eltype_lambda = + object (self) + + inherit cic_term + + method to_cic_term = + let n = self#node in + let sons = n#sub_nodes + and id = string_of_xml_attr (n#attribute "id") in + match sons with + [s ; t] when + s#node_type = Pxp_document.T_element "source" && + t#node_type = Pxp_document.T_element "target" -> + let name = cic_attr_of_xml_attr (t#attribute "binder") + and source = s#extension#to_cic_term + and target = t#extension#to_cic_term in + let res = Cic.ALambda (id,ref None,name,source,target) in + register_id id res ; + res + | _ -> raise (IllFormedXml 12) + end +;; + +(* The definition of domspec, an hashtable that maps each node type to the *) +(* object that must be linked to it. Used by markup. *) + +let domspec = + let module D = Pxp_document in + D.make_spec_from_alist + ~data_exemplar: (new D.data_impl (new eltype_not_of_cic)) + ~default_element_exemplar: (new D.element_impl (new eltype_not_of_cic)) + ~element_alist: + [ "REL", (new D.element_impl (new eltype_rel)) ; + "VAR", (new D.element_impl (new eltype_var)) ; + "META", (new D.element_impl (new eltype_meta)) ; + "SORT", (new D.element_impl (new eltype_sort)) ; + "IMPLICIT", (new D.element_impl (new eltype_implicit)) ; + "CAST", (new D.element_impl (new eltype_cast)) ; + "PROD", (new D.element_impl (new eltype_prod)) ; + "LAMBDA", (new D.element_impl (new eltype_lambda)) ; + "APPLY", (new D.element_impl (new eltype_apply)) ; + "CONST", (new D.element_impl (new eltype_const)) ; + "ABST", (new D.element_impl (new eltype_abst)) ; + "MUTIND", (new D.element_impl (new eltype_mutind)) ; + "MUTCONSTRUCT", (new D.element_impl (new eltype_mutconstruct)) ; + "MUTCASE", (new D.element_impl (new eltype_mutcase)) ; + "FIX", (new D.element_impl (new eltype_fix)) ; + "COFIX", (new D.element_impl (new eltype_cofix)) ; + "arity", (new D.element_impl (new eltype_transparent)) ; + "term", (new D.element_impl (new eltype_transparent)) ; + "type", (new D.element_impl (new eltype_transparent)) ; + "body", (new D.element_impl (new eltype_transparent)) ; + "source", (new D.element_impl (new eltype_transparent)) ; + "target", (new D.element_impl (new eltype_transparent)) ; + "patternsType", (new D.element_impl (new eltype_transparent)) ; + "inductiveTerm", (new D.element_impl (new eltype_transparent)) ; + "pattern", (new D.element_impl (new eltype_transparent)) + ] + () +;; diff --git a/helm/interface/cicParser3.mli b/helm/interface/cicParser3.mli new file mode 100644 index 000000000..dd71ab6ea --- /dev/null +++ b/helm/interface/cicParser3.mli @@ -0,0 +1,42 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module is the terms level of a parser for cic objects from xml *) +(* files to the internal representation. It is used by the module cicParser2 *) +(* (objects level). It defines an extension of the standard dom using the *) +(* object-oriented extension machinery of markup: an object with a method *) +(* to_cic_term that returns the internal representation of the subtree is *) +(* added to each node of the dom tree *) +(* *) +(******************************************************************************) + +exception IllFormedXml of int + +val ids_to_targets : (Cic.id, Cic.anntarget) Hashtbl.t option ref +val current_sp : string list ref +val current_uri : UriManager.uri ref +val process_annotations : bool ref + +(* the "interface" of the class linked to each node of the dom tree *) +class virtual cic_term : + object ('a) + + (* fields and methods ever required by markup *) + val mutable node : cic_term Pxp_document.node option + method clone : 'a + method node : cic_term Pxp_document.node + method set_node : cic_term Pxp_document.node -> unit + + (* a method that returns the internal representation of the tree (term) *) + (* rooted in this node *) + method virtual to_cic_term : Cic.annterm + + end + +(* The definition of domspec, an hashtable that maps each node type to the *) +(* object that must be linked to it. Used by markup. *) +val domspec : cic_term Pxp_document.spec diff --git a/helm/interface/cicPp.ml b/helm/interface/cicPp.ml new file mode 100644 index 000000000..932978664 --- /dev/null +++ b/helm/interface/cicPp.ml @@ -0,0 +1,183 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module implements a very simple Coq-like pretty printer that, given *) +(* an object of cic (internal representation) returns a string describing the *) +(* object in a syntax similar to that of coq *) +(* *) +(******************************************************************************) + +exception CicPpInternalError;; + +(* Utility functions *) + +let string_of_name = + function + Cic.Name s -> s + | Cic.Anonimous -> "_" +;; + +(* get_nth l n returns the nth element of the list l if it exists or raise *) +(* a CicPpInternalError if l has less than n elements or n < 1 *) +let rec get_nth l n = + match (n,l) with + (1, he::_) -> he + | (n, he::tail) when n > 1 -> get_nth tail (n-1) + | (_,_) -> raise CicPpInternalError +;; + +(* pp t l *) +(* pretty-prints a term t of cic in an environment l where l is a list of *) +(* identifier names used to resolve DeBrujin indexes. The head of l is the *) +(* name associated to the greatest DeBrujin index in t *) +let rec pp t l = + let module C = Cic in + match t with + C.Rel n -> + (match get_nth l n with + C.Name s -> s + | _ -> raise CicPpInternalError + ) + | C.Var uri -> UriManager.name_of_uri uri + | C.Meta n -> "?" ^ (string_of_int n) + | C.Sort s -> + (match s with + C.Prop -> "Prop" + | C.Set -> "Set" + | C.Type -> "Type" + ) + | C.Implicit -> "?" + | C.Prod (b,s,t) -> + (match b with + C.Name n -> "(" ^ n ^ ":" ^ pp s l ^ ")" ^ pp t (b::l) + | C.Anonimous -> "(" ^ pp s l ^ "->" ^ pp t (b::l) ^ ")" + ) + | C.Cast (v,t) -> pp v l + | C.Lambda (b,s,t) -> + "[" ^ string_of_name b ^ ":" ^ pp s l ^ "]" ^ pp t (b::l) + | C.Appl li -> + "(" ^ + (List.fold_right + (fun x i -> pp x l ^ (match i with "" -> "" | _ -> " ") ^ i) + li "" + ) ^ ")" + | C.Const (uri,_) -> UriManager.name_of_uri uri + | C.Abst uri -> UriManager.name_of_uri uri + | C.MutInd (uri,_,n) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (dl,_,_) -> + let (name,_,_,_) = get_nth dl (n+1) in + name + | _ -> raise CicPpInternalError + ) + | C.MutConstruct (uri,_,n1,n2) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (dl,_,_) -> + let (_,_,_,cons) = get_nth dl (n1+1) in + let (id,_,_) = get_nth cons n2 in + id + | _ -> raise CicPpInternalError + ) + | C.MutCase (uri,_,n1,ty,te,patterns) -> + let connames = + (match CicCache.get_obj uri with + C.InductiveDefinition (dl,_,_) -> + let (_,_,_,cons) = get_nth dl (n1+1) in + List.map (fun (id,_,_) -> id) cons + | _ -> raise CicPpInternalError + ) + in + "\n<" ^ pp ty l ^ ">Cases " ^ pp te l ^ " of " ^ + List.fold_right (fun (x,y) i -> "\n " ^ x ^ " => " ^ pp y l ^ i) + (List.combine connames patterns) "" ^ + "\nend" + | C.Fix (no, funs) -> + let snames = List.map (fun (name,_,_,_) -> name) funs in + let names = List.rev (List.map (function name -> C.Name name) snames) in + "\nFix " ^ get_nth snames (no + 1) ^ " {" ^ + List.fold_right + (fun (name,ind,ty,bo) i -> "\n" ^ name ^ " / " ^ string_of_int ind ^ + " : " ^ pp ty l ^ " := \n" ^ + pp bo (names@l) ^ i) + funs "" ^ + "}\n" + | C.CoFix (no,funs) -> + let snames = List.map (fun (name,_,_) -> name) funs in + let names = List.rev (List.map (function name -> C.Name name) snames) in + "\nCoFix " ^ get_nth snames (no + 1) ^ " {" ^ + List.fold_right + (fun (name,ty,bo) i -> "\n" ^ name ^ + " : " ^ pp ty l ^ " := \n" ^ + pp bo (names@l) ^ i) + funs "" ^ + "}\n" +;; + +(* ppinductiveType (typename, inductive, arity, cons) names *) +(* pretty-prints a single inductive definition (typename, inductive, arity, *) +(* cons) where the cic terms in the inductive definition need to be *) +(* evaluated in the environment names that is the list of typenames of the *) +(* mutual inductive definitions defined in the block of mutual inductive *) +(* definitions to which this one belongs to *) +let ppinductiveType (typename, inductive, arity, cons) names = + (if inductive then "\nInductive " else "\nCoInductive ") ^ typename ^ ": " ^ + (*CSC: bug found: was pp arity names ^ " =\n " ^*) + pp arity [] ^ " =\n " ^ + List.fold_right + (fun (id,ty,_) i -> id ^ " : " ^ pp ty names ^ + (if i = "" then "\n" else "\n | ") ^ i) + cons "" +;; + +(* ppobj obj returns a string with describing the cic object obj in a syntax *) +(* similar to the one used by Coq *) +let ppobj obj = + let module C = Cic in + let module U = UriManager in + match obj with + C.Definition (id, t1, t2, params) -> + "Definition of " ^ id ^ + "(" ^ + List.fold_right + (fun (_,x) i -> + List.fold_right + (fun x i -> + U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i' + ) x "" ^ match i with "" -> "" | i' -> " " ^ i' + ) params "" ^ ")" ^ + ":\n" ^ pp t1 [] ^ " : " ^ pp t2 [] + | C.Axiom (id, ty, params) -> + "Axiom " ^ id ^ "(" ^ + List.fold_right + (fun (_,x) i -> + List.fold_right + (fun x i -> + U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i' + ) x "" ^ match i with "" -> "" | i' -> " " ^ i' + ) params "" ^ + "):\n" ^ pp ty [] + | C.Variable (name, ty) -> + "Variable " ^ name ^ ":\n" ^ pp ty [] + | C.CurrentProof (name, conjectures, value, ty) -> + "Current Proof:\n" ^ + List.fold_right + (fun (n, t) i -> "?" ^ (string_of_int n) ^ ": " ^ pp t [] ^ "\n" ^ i) + conjectures "" ^ + "\n" ^ pp value [] ^ " : " ^ pp ty [] + | C.InductiveDefinition (l, params, nparams) -> + "Parameters = " ^ + List.fold_right + (fun (_,x) i -> + List.fold_right + (fun x i -> + U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i' + ) x "" ^ match i with "" -> "" | i' -> " " ^ i' + ) params "" ^ "\n" ^ + "NParams = " ^ string_of_int nparams ^ "\n" ^ + let names = List.rev (List.map (fun (n,_,_,_) -> C.Name n) l) in + List.fold_right (fun x i -> ppinductiveType x names ^ i) l "" +;; diff --git a/helm/interface/cicPp.mli b/helm/interface/cicPp.mli new file mode 100644 index 000000000..166079936 --- /dev/null +++ b/helm/interface/cicPp.mli @@ -0,0 +1,16 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This module implements a very simple Coq-like pretty printer that, given *) +(* an object of cic (internal representation) returns a string describing the *) +(* object in a syntax similar to that of coq *) +(* *) +(******************************************************************************) + +(* ppobj obj returns a string with describing the cic object obj in a syntax *) +(* similar to the one used by Coq *) +val ppobj : Cic.obj -> string diff --git a/helm/interface/cicReduction.ml b/helm/interface/cicReduction.ml new file mode 100644 index 000000000..6497cd378 --- /dev/null +++ b/helm/interface/cicReduction.ml @@ -0,0 +1,253 @@ +exception CicReductionInternalError;; +exception WrongUriToInductiveDefinition;; + +let fdebug = ref 1;; +let debug t env s = + let rec debug_aux t i = + let module C = Cic in + let module U = UriManager in + CicPp.ppobj (C.Variable ("DEBUG", + C.Prod (C.Name "-9", C.Const (U.uri_of_string "cic:/dummy-9",0), + C.Prod (C.Name "-8", C.Const (U.uri_of_string "cic:/dummy-8",0), + C.Prod (C.Name "-7", C.Const (U.uri_of_string "cic:/dummy-7",0), + C.Prod (C.Name "-6", C.Const (U.uri_of_string "cic:/dummy-6",0), + C.Prod (C.Name "-5", C.Const (U.uri_of_string "cic:/dummy-5",0), + C.Prod (C.Name "-4", C.Const (U.uri_of_string "cic:/dummy-4",0), + C.Prod (C.Name "-3", C.Const (U.uri_of_string "cic:/dummy-3",0), + C.Prod (C.Name "-2", C.Const (U.uri_of_string "cic:/dummy-2",0), + C.Prod (C.Name "-1", C.Const (U.uri_of_string "cic:/dummy-1",0), + t + ) + ) + ) + ) + ) + ) + ) + ) + ) + )) ^ "\n" ^ i + in + if !fdebug = 0 then + begin + print_endline (s ^ "\n" ^ List.fold_right debug_aux (t::env) "") ; + flush stdout + end +;; + +exception Impossible of int;; +exception ReferenceToDefinition;; +exception ReferenceToAxiom;; +exception ReferenceToVariable;; +exception ReferenceToCurrentProof;; +exception ReferenceToInductiveDefinition;; + +(* takes a well-typed term *) +let whd = + let rec whdaux l = + let module C = Cic in + let module S = CicSubstitution in + function + C.Rel _ as t -> if l = [] then t else C.Appl (t::l) + | C.Var _ as t -> if l = [] then t else C.Appl (t::l) + | C.Meta _ as t -> if l = [] then t else C.Appl (t::l) + | C.Sort _ as t -> t (* l should be empty *) + | C.Implicit as t -> t + | C.Cast (te,ty) -> whdaux l te (*CSC E' GIUSTO BUTTARE IL CAST? *) + | C.Prod _ as t -> t (* l should be empty *) + | C.Lambda (name,s,t) as t' -> + (match l with + [] -> t' + | he::tl -> whdaux tl (S.subst he t) + (* when name is Anonimous the substitution should be superfluous *) + ) + | C.Appl (he::tl) -> whdaux (tl@l) he + | C.Appl [] -> raise (Impossible 1) + | C.Const (uri,cookingsno) as t -> + (match CicCache.get_cooked_obj uri cookingsno with + C.Definition (_,body,_,_) -> whdaux l body + | C.Axiom _ -> if l = [] then t else C.Appl (t::l) + (*CSC: Prossima riga sbagliata: Var punta alle variabili, non Const *) + | C.Variable _ -> if l = [] then t else C.Appl (t::l) + | C.CurrentProof (_,_,body,_) -> whdaux l body + | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition + ) + | C.Abst _ as t -> t (*CSC l should be empty ????? *) + | C.MutInd (uri,_,_) as t -> if l = [] then t else C.Appl (t::l) + | C.MutConstruct (uri,_,_,_) as t -> if l = [] then t else C.Appl (t::l) + | C.MutCase (mutind,cookingsno,i,_,term,pl) as t -> + let decofix = + function + C.CoFix (i,fl) as t -> + let (_,_,body) = List.nth fl i in + let body' = + let counter = ref (List.length fl) in + List.fold_right + (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl))) + fl + body + in + whdaux [] body' + | C.Appl (C.CoFix (i,fl) :: tl) -> + let (_,_,body) = List.nth fl i in + let body' = + let counter = ref (List.length fl) in + List.fold_right + (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl))) + fl + body + in + whdaux tl body' + | t -> t + in + (match decofix (whdaux [] term) with + C.MutConstruct (_,_,_,j) -> whdaux l (List.nth pl (j-1)) + | C.Appl (C.MutConstruct (_,_,_,j) :: tl) -> + let (arity, r, num_ingredients) = + match CicCache.get_obj mutind with + C.InductiveDefinition (tl,ingredients,r) -> + let (_,_,arity,_) = List.nth tl i + and num_ingredients = + List.fold_right + (fun (k,l) i -> + if k < cookingsno then i + List.length l else i + ) ingredients 0 + in + (arity,r,num_ingredients) + | _ -> raise WrongUriToInductiveDefinition + in + let ts = + let num_to_eat = r + num_ingredients in + let rec eat_first = + function + (0,l) -> l + | (n,he::tl) when n > 0 -> eat_first (n - 1, tl) + | _ -> raise (Impossible 5) + in + eat_first (num_to_eat,tl) + in + whdaux (ts@l) (List.nth pl (j-1)) + | C.Abst _| C.Cast _ | C.Implicit -> + raise (Impossible 2) (* we don't trust our whd ;-) *) + | _ -> t + ) + | C.Fix (i,fl) as t -> + let (_,recindex,_,body) = List.nth fl i in + let recparam = + try + Some (List.nth l recindex) + with + _ -> None + in + (match recparam with + Some recparam -> + (match whdaux [] recparam with + C.MutConstruct _ + | C.Appl ((C.MutConstruct _)::_) -> + let body' = + let counter = ref (List.length fl) in + List.fold_right + (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl))) + fl + body + in + (* Possible optimization: substituting whd recparam in l *) + whdaux l body' + | _ -> if l = [] then t else C.Appl (t::l) + ) + | None -> if l = [] then t else C.Appl (t::l) + ) + | C.CoFix (i,fl) as t -> + (*CSC vecchio codice + let (_,_,body) = List.nth fl i in + let body' = + let counter = ref (List.length fl) in + List.fold_right + (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl))) + fl + body + in + whdaux l body' + *) + if l = [] then t else C.Appl (t::l) + in + whdaux [] +;; + +(* t1, t2 must be well-typed *) +let are_convertible t1 t2 = + let module U = UriManager in + let rec aux t1 t2 = + debug t1 [t2] "PREWHD"; + (* this trivial euristic cuts down the total time of about five times ;-) *) + (* this because most of the time t1 and t2 are "sintactically" the same *) + if t1 = t2 then + true + else + begin + let module C = Cic in + let t1' = whd t1 + and t2' = whd t2 in + debug t1' [t2'] "POSTWHD"; + (*if !fdebug = 0 then ignore(Unix.system "read" );*) + match (t1',t2') with + (C.Rel n1, C.Rel n2) -> n1 = n2 + | (C.Var uri1, C.Var uri2) -> U.eq uri1 uri2 + | (C.Meta n1, C.Meta n2) -> n1 = n2 + | (C.Sort s1, C.Sort s2) -> true (*CSC da finire con gli universi *) + | (C.Prod (_,s1,t1), C.Prod(_,s2,t2)) -> + aux s1 s2 && aux t1 t2 + | (C.Lambda (_,s1,t1), C.Lambda(_,s2,t2)) -> + aux s1 s2 && aux t1 t2 + | (C.Appl l1, C.Appl l2) -> + (try + List.fold_right2 (fun x y b -> aux x y && b) l1 l2 true + with + Invalid_argument _ -> false + ) + | (C.Const (uri1,_), C.Const (uri2,_)) -> + (*CSC: questo commento e' chiaro o delirante? Io lo sto scrivendo *) + (*CSC: mentre sono delirante, quindi ... *) + (* WARNING: it is really important that the two cookingsno are not *) + (* checked for equality. This allows not to cook an object with no *) + (* ingredients only to update the cookingsno. E.g: if a term t has *) + (* a reference to a term t1 which does not depend on any variable *) + (* and t1 depends on a term t2 (that can't depend on any variable *) + (* because of t1), then t1 cooked at every level could be the same *) + (* as t1 cooked at level 0. Doing so, t2 will be extended in t *) + (* with cookingsno 0 and not 2. But this will not cause any trouble*) + (* if here we don't check that the two cookingsno are equal. *) + U.eq uri1 uri2 + | (C.MutInd (uri1,k1,i1), C.MutInd (uri2,k2,i2)) -> + (* WARNIG: see the previous warning *) + U.eq uri1 uri2 && i1 = i2 + | (C.MutConstruct (uri1,_,i1,j1), C.MutConstruct (uri2,_,i2,j2)) -> + (* WARNIG: see the previous warning *) + U.eq uri1 uri2 && i1 = i2 && j1 = j2 + | (C.MutCase (uri1,_,i1,outtype1,term1,pl1), + C.MutCase (uri2,_,i2,outtype2,term2,pl2)) -> + (* WARNIG: see the previous warning *) + (* aux outtype1 outtype2 should be true if aux pl1 pl2 *) + U.eq uri1 uri2 && i1 = i2 && aux outtype1 outtype2 && + aux term1 term2 && + List.fold_right2 (fun x y b -> b && aux x y) pl1 pl2 true + | (C.Fix (i1,fl1), C.Fix (i2,fl2)) -> + i1 = i2 && + List.fold_right2 + (fun (_,recindex1,ty1,bo1) (_,recindex2,ty2,bo2) b -> + b && recindex1 = recindex2 && aux ty1 ty2 && aux bo1 bo2) + fl1 fl2 true + | (C.CoFix (i1,fl1), C.CoFix (i2,fl2)) -> + i1 = i2 && + List.fold_right2 + (fun (_,ty1,bo1) (_,ty2,bo2) b -> + b && aux ty1 ty2 && aux bo1 bo2) + fl1 fl2 true + | (C.Abst _, _) | (_, C.Abst _) | (C.Cast _, _) | (_, C.Cast _) + | (C.Implicit, _) | (_, C.Implicit) -> + raise (Impossible 3) (* we don't trust our whd ;-) *) + | (_,_) -> false + end + in + aux t1 t2 +;; diff --git a/helm/interface/cicReduction.mli b/helm/interface/cicReduction.mli new file mode 100644 index 000000000..bcc91b011 --- /dev/null +++ b/helm/interface/cicReduction.mli @@ -0,0 +1,9 @@ +exception WrongUriToInductiveDefinition +exception ReferenceToDefinition +exception ReferenceToAxiom +exception ReferenceToVariable +exception ReferenceToCurrentProof +exception ReferenceToInductiveDefinition +val fdebug : int ref +val whd : Cic.term -> Cic.term +val are_convertible : Cic.term -> Cic.term -> bool diff --git a/helm/interface/cicSubstitution.ml b/helm/interface/cicSubstitution.ml new file mode 100644 index 000000000..e69a8a96a --- /dev/null +++ b/helm/interface/cicSubstitution.ml @@ -0,0 +1,115 @@ +let lift n = + let rec liftaux k = + let module C = Cic in + function + C.Rel m -> + if m < k then + C.Rel m + else + C.Rel (m + n) + | C.Var _ as t -> t + | C.Meta _ as t -> t + | C.Sort _ as t -> t + | C.Implicit as t -> t + | C.Cast (te,ty) -> C.Cast (liftaux k te, liftaux k ty) + | C.Prod (n,s,t) -> C.Prod (n, liftaux k s, liftaux (k+1) t) + | C.Lambda (n,s,t) -> C.Lambda (n, liftaux k s, liftaux (k+1) t) + | C.Appl l -> C.Appl (List.map (liftaux k) l) + | C.Const _ as t -> t + | C.Abst _ as t -> t + | C.MutInd _ as t -> t + | C.MutConstruct _ as t -> t + | C.MutCase (sp,cookingsno,i,outty,t,pl) -> + C.MutCase (sp, cookingsno, i, liftaux k outty, liftaux k t, + List.map (liftaux k) pl) + | C.Fix (i, fl) -> + let len = List.length fl in + let liftedfl = + List.map + (fun (name, i, ty, bo) -> (name, i, liftaux k ty, liftaux (k+len) bo)) + fl + in + C.Fix (i, liftedfl) + | C.CoFix (i, fl) -> + let len = List.length fl in + let liftedfl = + List.map + (fun (name, ty, bo) -> (name, liftaux k ty, liftaux (k+len) bo)) + fl + in + C.CoFix (i, liftedfl) + in + liftaux 1 +;; + +let subst arg = + let rec substaux k = + let module C = Cic in + function + C.Rel n as t -> + (match n with + n when n = k -> lift (k - 1) arg + | n when n < k -> t + | _ -> C.Rel (n - 1) + ) + | C.Var _ as t -> t + | C.Meta _ as t -> t + | C.Sort _ as t -> t + | C.Implicit as t -> t + | C.Cast (te,ty) -> C.Cast (substaux k te, substaux k ty) (*CSC ??? *) + | C.Prod (n,s,t) -> C.Prod (n, substaux k s, substaux (k + 1) t) + | C.Lambda (n,s,t) -> C.Lambda (n, substaux k s, substaux (k + 1) t) + | C.Appl l -> C.Appl (List.map (substaux k) l) + | C.Const _ as t -> t + | C.Abst _ as t -> t + | C.MutInd _ as t -> t + | C.MutConstruct _ as t -> t + | C.MutCase (sp,cookingsno,i,outt,t,pl) -> + C.MutCase (sp,cookingsno,i,substaux k outt, substaux k t, + List.map (substaux k) pl) + | C.Fix (i,fl) -> + let len = List.length fl in + let substitutedfl = + List.map + (fun (name,i,ty,bo) -> (name, i, substaux k ty, substaux (k+len) bo)) + fl + in + C.Fix (i, substitutedfl) + | C.CoFix (i,fl) -> + let len = List.length fl in + let substitutedfl = + List.map + (fun (name,ty,bo) -> (name, substaux k ty, substaux (k+len) bo)) + fl + in + C.CoFix (i, substitutedfl) + in + substaux 1 +;; + +let undebrujin_inductive_def uri = + function + Cic.InductiveDefinition (dl,params,n_ind_params) -> + let dl' = + List.map + (fun (name,inductive,arity,constructors) -> + let constructors' = + List.map + (fun (name,ty,r) -> + let ty' = + let counter = ref (List.length dl) in + List.fold_right + (fun _ -> + decr counter ; + subst (Cic.MutInd (uri,0,!counter)) + ) dl ty + in + (name,ty',r) + ) constructors + in + (name,inductive,arity,constructors') + ) dl + in + Cic.InductiveDefinition (dl', params, n_ind_params) + | obj -> obj +;; diff --git a/helm/interface/cicSubstitution.mli b/helm/interface/cicSubstitution.mli new file mode 100644 index 000000000..f83cf05e0 --- /dev/null +++ b/helm/interface/cicSubstitution.mli @@ -0,0 +1,3 @@ +val lift : int -> Cic.term -> Cic.term +val subst : Cic.term -> Cic.term -> Cic.term +val undebrujin_inductive_def : UriManager.uri -> Cic.obj -> Cic.obj diff --git a/helm/interface/cicTypeChecker.ml b/helm/interface/cicTypeChecker.ml new file mode 100644 index 000000000..63433937b --- /dev/null +++ b/helm/interface/cicTypeChecker.ml @@ -0,0 +1,1200 @@ +exception NotImplemented;; +exception Impossible;; +exception NotWellTyped of string;; +exception WrongUriToConstant of string;; +exception WrongUriToVariable of string;; +exception WrongUriToMutualInductiveDefinitions of string;; +exception ListTooShort;; +exception NotPositiveOccurrences of string;; +exception NotWellFormedTypeOfInductiveConstructor of string;; +exception WrongRequiredArgument of string;; + +let fdebug = ref 0;; +let debug t env = + let rec debug_aux t i = + let module C = Cic in + let module U = UriManager in + CicPp.ppobj (C.Variable ("DEBUG", + C.Prod (C.Name "-15", C.Const (U.uri_of_string "cic:/dummy-15",0), + C.Prod (C.Name "-14", C.Const (U.uri_of_string "cic:/dummy-14",0), + C.Prod (C.Name "-13", C.Const (U.uri_of_string "cic:/dummy-13",0), + C.Prod (C.Name "-12", C.Const (U.uri_of_string "cic:/dummy-12",0), + C.Prod (C.Name "-11", C.Const (U.uri_of_string "cic:/dummy-11",0), + C.Prod (C.Name "-10", C.Const (U.uri_of_string "cic:/dummy-10",0), + C.Prod (C.Name "-9", C.Const (U.uri_of_string "cic:/dummy-9",0), + C.Prod (C.Name "-8", C.Const (U.uri_of_string "cic:/dummy-8",0), + C.Prod (C.Name "-7", C.Const (U.uri_of_string "cic:/dummy-7",0), + C.Prod (C.Name "-6", C.Const (U.uri_of_string "cic:/dummy-6",0), + C.Prod (C.Name "-5", C.Const (U.uri_of_string "cic:/dummy-5",0), + C.Prod (C.Name "-4", C.Const (U.uri_of_string "cic:/dummy-4",0), + C.Prod (C.Name "-3", C.Const (U.uri_of_string "cic:/dummy-3",0), + C.Prod (C.Name "-2", C.Const (U.uri_of_string "cic:/dummy-2",0), + C.Prod (C.Name "-1", C.Const (U.uri_of_string "cic:/dummy-1",0), + t + ) + ) + ) + ) + ) + ) + ) + ) + ))))))) + )) ^ "\n" ^ i + in + if !fdebug = 0 then + raise (NotWellTyped ("\n" ^ List.fold_right debug_aux (t::env) "")) + (*print_endline ("\n" ^ List.fold_right debug_aux (t::env) "") ; flush stdout*) +;; + +let rec split l n = + match (l,n) with + (l,0) -> ([], l) + | (he::tl, n) -> let (l1,l2) = split tl (n-1) in (he::l1,l2) + | (_,_) -> raise ListTooShort +;; + +exception CicCacheError;; + +let rec cooked_type_of_constant uri cookingsno = + let module C = Cic in + let module R = CicReduction in + let module U = UriManager in + let cobj = + match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj uobj -> + (* let's typecheck the uncooked obj *) + (match uobj with + C.Definition (_,te,ty,_) -> + let _ = type_of ty in + if not (R.are_convertible (type_of te) ty) then + raise (NotWellTyped ("Constant " ^ (U.string_of_uri uri))) + | C.Axiom (_,ty,_) -> + (* only to check that ty is well-typed *) + let _ = type_of ty in () + | C.CurrentProof (_,_,te,ty) -> + let _ = type_of ty in + if not (R.are_convertible (type_of te) ty) then + raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri))) + | _ -> raise (WrongUriToConstant (U.string_of_uri uri)) + ) ; + CicCache.set_type_checking_info uri ; + match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj _ -> raise CicCacheError + in + match cobj with + C.Definition (_,_,ty,_) -> ty + | C.Axiom (_,ty,_) -> ty + | C.CurrentProof (_,_,_,ty) -> ty + | _ -> raise (WrongUriToConstant (U.string_of_uri uri)) + +and type_of_variable uri = + let module C = Cic in + let module R = CicReduction in + (* 0 because a variable is never cooked => no partial cooking at one level *) + match CicCache.is_type_checked uri 0 with + CicCache.CheckedObj (C.Variable (_,ty)) -> ty + | CicCache.UncheckedObj (C.Variable (_,ty)) -> + (* only to check that ty is well-typed *) + let _ = type_of ty in + CicCache.set_type_checking_info uri ; + ty + | _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri)) + +and does_not_occur n nn te = + let module C = Cic in + (*CSC: whd sembra essere superflua perche' un caso in cui l'occorrenza *) + (*CSC: venga mangiata durante la whd sembra presentare problemi di *) + (*CSC: universi *) + match CicReduction.whd te with + C.Rel m when m > n && m <= nn -> false + | C.Rel _ + | C.Var _ + | C.Meta _ + | C.Sort _ + | C.Implicit -> true + | C.Cast (te,ty) -> does_not_occur n nn te && does_not_occur n nn ty + | C.Prod (_,so,dest) -> + does_not_occur n nn so && does_not_occur (n + 1) (nn + 1) dest + | C.Lambda (_,so,dest) -> + does_not_occur n nn so && does_not_occur (n + 1) (nn + 1) dest + | C.Appl l -> + List.fold_right (fun x i -> i && does_not_occur n nn x) l true + | C.Const _ + | C.Abst _ + | C.MutInd _ + | C.MutConstruct _ -> true + | C.MutCase (_,_,_,out,te,pl) -> + does_not_occur n nn out && does_not_occur n nn te && + List.fold_right (fun x i -> i && does_not_occur n nn x) pl true + | C.Fix (_,fl) -> + let len = List.length fl in + let n_plus_len = n + len in + let nn_plus_len = nn + len in + List.fold_right + (fun (_,_,ty,bo) i -> + i && does_not_occur n_plus_len nn_plus_len ty && + does_not_occur n_plus_len nn_plus_len bo + ) fl true + | C.CoFix (_,fl) -> + let len = List.length fl in + let n_plus_len = n + len in + let nn_plus_len = nn + len in + List.fold_right + (fun (_,ty,bo) i -> + i && does_not_occur n_plus_len nn_plus_len ty && + does_not_occur n_plus_len nn_plus_len bo + ) fl true + +(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *) +(*CSC questa funzione e' simile alla are_all_occurrences_positive, ma fa *) +(*CSC dei controlli leggermente diversi. Viene invocata solamente dalla *) +(*CSC strictly_positive *) +(*CSC definizione (giusta???) tratta dalla mail di Hugo ;-) *) +and weakly_positive n nn uri te = + let module C = Cic in + (*CSC mettere in cicSubstitution *) + let rec subst_inductive_type_with_dummy_rel = + function + C.MutInd (uri',_,0) when UriManager.eq uri' uri -> + C.Rel 0 (* dummy rel *) + | C.Appl ((C.MutInd (uri',_,0))::tl) when UriManager.eq uri' uri -> + C.Rel 0 (* dummy rel *) + | C.Cast (te,ty) -> subst_inductive_type_with_dummy_rel te + | C.Prod (name,so,ta) -> + C.Prod (name, subst_inductive_type_with_dummy_rel so, + subst_inductive_type_with_dummy_rel ta) + | C.Lambda (name,so,ta) -> + C.Lambda (name, subst_inductive_type_with_dummy_rel so, + subst_inductive_type_with_dummy_rel ta) + | C.Appl tl -> + C.Appl (List.map subst_inductive_type_with_dummy_rel tl) + | C.MutCase (uri,cookingsno,i,outtype,term,pl) -> + C.MutCase (uri,cookingsno,i, + subst_inductive_type_with_dummy_rel outtype, + subst_inductive_type_with_dummy_rel term, + List.map subst_inductive_type_with_dummy_rel pl) + | C.Fix (i,fl) -> + C.Fix (i,List.map (fun (name,i,ty,bo) -> (name,i, + subst_inductive_type_with_dummy_rel ty, + subst_inductive_type_with_dummy_rel bo)) fl) + | C.CoFix (i,fl) -> + C.CoFix (i,List.map (fun (name,ty,bo) -> (name, + subst_inductive_type_with_dummy_rel ty, + subst_inductive_type_with_dummy_rel bo)) fl) + | t -> t + in + match CicReduction.whd te with + C.Appl ((C.MutInd (uri',_,0))::tl) when UriManager.eq uri' uri -> true + | C.MutInd (uri',_,0) when UriManager.eq uri' uri -> true + | C.Prod (C.Anonimous,source,dest) -> + strictly_positive n nn (subst_inductive_type_with_dummy_rel source) && + weakly_positive (n + 1) (nn + 1) uri dest + | C.Prod (name,source,dest) when does_not_occur 0 n dest -> + (* dummy abstraction, so we behave as in the anonimous case *) + strictly_positive n nn (subst_inductive_type_with_dummy_rel source) && + weakly_positive (n + 1) (nn + 1) uri dest + | C.Prod (_,source,dest) -> + does_not_occur n nn (subst_inductive_type_with_dummy_rel source) && + weakly_positive (n + 1) (nn + 1) uri dest + | _ -> raise (NotWellFormedTypeOfInductiveConstructor ("Guess where the error is ;-)")) + +(* instantiate_parameters ps (x1:T1)...(xn:Tn)C *) +(* returns ((x_|ps|:T_|ps|)...(xn:Tn)C){ps_1 / x1 ; ... ; ps_|ps| / x_|ps|} *) +and instantiate_parameters params c = + let module C = Cic in + match (c,params) with + (c,[]) -> c + | (C.Prod (_,_,ta), he::tl) -> + instantiate_parameters tl + (CicSubstitution.subst he ta) + | (C.Cast (te,_), _) -> instantiate_parameters params te + | (t,l) -> raise Impossible + +and strictly_positive n nn te = + let module C = Cic in + let module U = UriManager in + match CicReduction.whd te with + C.Rel _ -> true + | C.Cast (te,ty) -> + (*CSC: bisogna controllare ty????*) + strictly_positive n nn te + | C.Prod (_,so,ta) -> + does_not_occur n nn so && + strictly_positive (n+1) (nn+1) ta + | C.Appl ((C.Rel m)::tl) when m > n && m <= nn -> + List.fold_right (fun x i -> i && does_not_occur n nn x) tl true + | C.Appl ((C.MutInd (uri,_,i))::tl) -> + let (ok,paramsno,cl) = + match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,paramsno) -> + let (_,_,_,cl) = List.nth tl i in + (List.length tl = 1, paramsno, cl) + | _ -> raise(WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + in + let (params,arguments) = split tl paramsno in + let lifted_params = List.map (CicSubstitution.lift 1) params in + let cl' = + List.map (fun (_,te,_) -> instantiate_parameters lifted_params te) cl + in + ok && + List.fold_right + (fun x i -> i && does_not_occur n nn x) + arguments true && + (*CSC: MEGAPATCH3 (sara' quella giusta?)*) + List.fold_right + (fun x i -> + i && + weakly_positive (n+1) (nn+1) uri x + ) cl' true + | C.MutInd (uri,_,i) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,_) -> + List.length tl = 1 + | _ -> raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + ) + | t -> does_not_occur n nn t + +(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *) +and are_all_occurrences_positive uri indparamsno i n nn te = + let module C = Cic in + match CicReduction.whd te with + C.Appl ((C.Rel m)::tl) when m = i -> + (*CSC: riscrivere fermandosi a 0 *) + (* let's check if the inductive type is applied at least to *) + (* indparamsno parameters *) + let last = + List.fold_left + (fun k x -> + if k = 0 then 0 + else + match CicReduction.whd x with + C.Rel m when m = n - (indparamsno - k) -> k - 1 + | _ -> raise (WrongRequiredArgument (UriManager.string_of_uri uri)) + ) indparamsno tl + in + if last = 0 then + List.fold_right (fun x i -> i && does_not_occur n nn x) tl true + else + raise (WrongRequiredArgument (UriManager.string_of_uri uri)) + | C.Rel m when m = i -> + if indparamsno = 0 then + true + else + raise (WrongRequiredArgument (UriManager.string_of_uri uri)) + | C.Prod (C.Anonimous,source,dest) -> + strictly_positive n nn source && + are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest + | C.Prod (name,source,dest) when does_not_occur 0 n dest -> + (* dummy abstraction, so we behave as in the anonimous case *) + strictly_positive n nn source && + are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest + | C.Prod (_,source,dest) -> + does_not_occur n nn source && + are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest + | _ -> raise (NotWellFormedTypeOfInductiveConstructor (UriManager.string_of_uri uri)) + +(*CSC: cambiare il nome, torna unit! *) +and cooked_mutual_inductive_defs uri = + let module U = UriManager in + function + Cic.InductiveDefinition (itl, _, indparamsno) -> + (* let's check if the arity of the inductive types are well *) + (* formed *) + List.iter (fun (_,_,x,_) -> let _ = type_of x in ()) itl ; + + (* let's check if the types of the inductive constructors *) + (* are well formed. *) + (* In order not to use type_of_aux we put the types of the *) + (* mutual inductive types at the head of the types of the *) + (* constructors using Prods *) + (*CSC: piccola??? inefficienza *) + let len = List.length itl in + let _ = + List.fold_right + (fun (_,_,_,cl) i -> + List.iter + (fun (name,te,r) -> + let augmented_term = + List.fold_right + (fun (name,_,ty,_) i -> Cic.Prod (Cic.Name name, ty, i)) + itl te + in + let _ = type_of augmented_term in + (* let's check also the positivity conditions *) + if not (are_all_occurrences_positive uri indparamsno i 0 len te) + then + raise (NotPositiveOccurrences (U.string_of_uri uri)) + else + match !r with + Some _ -> raise Impossible + | None -> r := Some (recursive_args 0 len te) + ) cl ; + (i + 1) + ) itl 1 + in + () + | _ -> + raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + +and cooked_type_of_mutual_inductive_defs uri cookingsno i = + let module C = Cic in + let module R = CicReduction in + let module U = UriManager in + let cobj = + match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj uobj -> + cooked_mutual_inductive_defs uri uobj ; + CicCache.set_type_checking_info uri ; + (match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj _ -> raise CicCacheError + ) + in + match cobj with + C.InductiveDefinition (dl,_,_) -> + let (_,_,arity,_) = List.nth dl i in + arity + | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + +and cooked_type_of_mutual_inductive_constr uri cookingsno i j = + let module C = Cic in + let module R = CicReduction in + let module U = UriManager in + let cobj = + match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj uobj -> + cooked_mutual_inductive_defs uri uobj ; + CicCache.set_type_checking_info uri ; + (match CicCache.is_type_checked uri cookingsno with + CicCache.CheckedObj cobj -> cobj + | CicCache.UncheckedObj _ -> raise CicCacheError + ) + in + match cobj with + C.InductiveDefinition (dl,_,_) -> + let (_,_,_,cl) = List.nth dl i in + let (_,ty,_) = List.nth cl (j-1) in + ty + | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + +and recursive_args n nn te = + let module C = Cic in + match CicReduction.whd te with + C.Rel _ -> [] + | C.Var _ + | C.Meta _ + | C.Sort _ + | C.Implicit + | C.Cast _ (*CSC ??? *) -> raise Impossible (* due to type-checking *) + | C.Prod (_,so,de) -> + (not (does_not_occur n nn so))::(recursive_args (n+1) (nn + 1) de) + | C.Lambda _ -> raise Impossible (* due to type-checking *) + | C.Appl _ -> [] + | C.Const _ + | C.Abst _ -> raise Impossible + | C.MutInd _ + | C.MutConstruct _ + | C.MutCase _ + | C.Fix _ + | C.CoFix _ -> raise Impossible (* due to type-checking *) + +and get_new_safes p c rl safes n nn x = + let module C = Cic in + let module U = UriManager in + let module R = CicReduction in + match (R.whd c, R.whd p, rl) with + (C.Prod (_,_,ta1), C.Lambda (_,_,ta2), b::tl) -> + (* we are sure that the two sources are convertible because we *) + (* have just checked this. So let's go along ... *) + let safes' = + List.map (fun x -> x + 1) safes + in + let safes'' = + if b then 1::safes' else safes' + in + get_new_safes ta2 ta1 tl safes'' (n+1) (nn+1) (x+1) + | (C.MutInd _, e, []) -> (e,safes,n,nn,x) + | (C.Appl _, e, []) -> (e,safes,n,nn,x) + | (_,_,_) -> raise Impossible + +and eat_prods n te = + let module C = Cic in + let module R = CicReduction in + match (n, R.whd te) with + (0, _) -> te + | (n, C.Prod (_,_,ta)) when n > 0 -> eat_prods (n - 1) ta + | (_, _) -> raise Impossible + +and eat_lambdas n te = + let module C = Cic in + let module R = CicReduction in + match (n, R.whd te) with + (0, _) -> (te, 0) + | (n, C.Lambda (_,_,ta)) when n > 0 -> + let (te, k) = eat_lambdas (n - 1) ta in + (te, k + 1) + | (_, _) -> raise Impossible + +(*CSC: Tutto quello che segue e' l'intuzione di luca ;-) *) +and check_is_really_smaller_arg n nn kl x safes te = + (*CSC: forse la whd si puo' fare solo quando serve veramente. *) + (*CSC: cfr guarded_by_destructors *) + let module C = Cic in + let module U = UriManager in + match CicReduction.whd te with + C.Rel m when List.mem m safes -> true + | C.Rel _ -> false + | C.Var _ + | C.Meta _ + | C.Sort _ + | C.Implicit + | C.Cast _ +(* | C.Cast (te,ty) -> + check_is_really_smaller_arg n nn kl x safes te && + check_is_really_smaller_arg n nn kl x safes ty*) +(* | C.Prod (_,so,ta) -> + check_is_really_smaller_arg n nn kl x safes so && + check_is_really_smaller_arg (n+1) (nn+1) kl (x+1) + (List.map (fun x -> x + 1) safes) ta*) + | C.Prod _ -> raise Impossible + | C.Lambda (_,so,ta) -> + check_is_really_smaller_arg n nn kl x safes so && + check_is_really_smaller_arg (n+1) (nn+1) kl (x+1) + (List.map (fun x -> x + 1) safes) ta + | C.Appl (he::_) -> + (*CSC: sulla coda ci vogliono dei controlli? secondo noi no, ma *) + (*CSC: solo perche' non abbiamo trovato controesempi *) + check_is_really_smaller_arg n nn kl x safes he + | C.Appl [] -> raise Impossible + | C.Const _ + | C.Abst _ + | C.MutInd _ -> raise Impossible + | C.MutConstruct _ -> false + | C.MutCase (uri,_,i,outtype,term,pl) -> + (match term with + C.Rel m when List.mem m safes || m = x -> + let (isinductive,paramsno,cl) = + match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,paramsno) -> + let (_,isinductive,_,cl) = List.nth tl i in + let cl' = + List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl + in + (isinductive,paramsno,cl') + | _ -> + raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + in + if not isinductive then + List.fold_right + (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p) + pl true + else + List.fold_right + (fun (p,(_,c,rl)) i -> + let rl' = + match !rl with + Some rl' -> + let (_,rl'') = split rl' paramsno in + rl'' + | None -> raise Impossible + in + let (e,safes',n',nn',x') = + get_new_safes p c rl' safes n nn x + in + i && + check_is_really_smaller_arg n' nn' kl x' safes' e + ) (List.combine pl cl) true + | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x -> + let (isinductive,paramsno,cl) = + match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,paramsno) -> + let (_,isinductive,_,cl) = List.nth tl i in + let cl' = + List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl + in + (isinductive,paramsno,cl') + | _ -> + raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + in + if not isinductive then + List.fold_right + (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p) + pl true + else + (*CSC: supponiamo come prima che nessun controllo sia necessario*) + (*CSC: sugli argomenti di una applicazione *) + List.fold_right + (fun (p,(_,c,rl)) i -> + let rl' = + match !rl with + Some rl' -> + let (_,rl'') = split rl' paramsno in + rl'' + | None -> raise Impossible + in + let (e, safes',n',nn',x') = + get_new_safes p c rl' safes n nn x + in + i && + check_is_really_smaller_arg n' nn' kl x' safes' e + ) (List.combine pl cl) true + | _ -> + List.fold_right + (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p) + pl true + ) + | C.Fix (_, fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len + and x_plus_len = x + len + and safes' = List.map (fun x -> x + len) safes in + List.fold_right + (fun (_,_,ty,bo) i -> + i && + check_is_really_smaller_arg n_plus_len nn_plus_len kl x_plus_len + safes' bo + ) fl true + | C.CoFix (_, fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len + and x_plus_len = x + len + and safes' = List.map (fun x -> x + len) safes in + List.fold_right + (fun (_,ty,bo) i -> + i && + check_is_really_smaller_arg n_plus_len nn_plus_len kl x_plus_len + safes' bo + ) fl true + +and guarded_by_destructors n nn kl x safes = + let module C = Cic in + let module U = UriManager in + function + C.Rel m when m > n && m <= nn -> false + | C.Rel _ + | C.Var _ + | C.Meta _ + | C.Sort _ + | C.Implicit -> true + | C.Cast (te,ty) -> + guarded_by_destructors n nn kl x safes te && + guarded_by_destructors n nn kl x safes ty + | C.Prod (_,so,ta) -> + guarded_by_destructors n nn kl x safes so && + guarded_by_destructors (n+1) (nn+1) kl (x+1) + (List.map (fun x -> x + 1) safes) ta + | C.Lambda (_,so,ta) -> + guarded_by_destructors n nn kl x safes so && + guarded_by_destructors (n+1) (nn+1) kl (x+1) + (List.map (fun x -> x + 1) safes) ta + | C.Appl ((C.Rel m)::tl) when m > n && m <= nn -> + let k = List.nth kl (m - n - 1) in + if not (List.length tl > k) then false + else + List.fold_right + (fun param i -> + i && guarded_by_destructors n nn kl x safes param + ) tl true && + check_is_really_smaller_arg n nn kl x safes (List.nth tl k) + | C.Appl tl -> + List.fold_right (fun t i -> i && guarded_by_destructors n nn kl x safes t) + tl true + | C.Const _ + | C.Abst _ + | C.MutInd _ + | C.MutConstruct _ -> true + | C.MutCase (uri,_,i,outtype,term,pl) -> + (match term with + C.Rel m when List.mem m safes || m = x -> + let (isinductive,paramsno,cl) = + match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,paramsno) -> + let (_,isinductive,_,cl) = List.nth tl i in + let cl' = + List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl + in + (isinductive,paramsno,cl') + | _ -> + raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + in + if not isinductive then + guarded_by_destructors n nn kl x safes outtype && + guarded_by_destructors n nn kl x safes term && + (*CSC: manca ??? il controllo sul tipo di term? *) + List.fold_right + (fun p i -> i && guarded_by_destructors n nn kl x safes p) + pl true + else + guarded_by_destructors n nn kl x safes outtype && + (*CSC: manca ??? il controllo sul tipo di term? *) + List.fold_right + (fun (p,(_,c,rl)) i -> + let rl' = + match !rl with + Some rl' -> + let (_,rl'') = split rl' paramsno in + rl'' + | None -> raise Impossible + in + let (e,safes',n',nn',x') = + get_new_safes p c rl' safes n nn x + in + i && + guarded_by_destructors n' nn' kl x' safes' e + ) (List.combine pl cl) true + | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x -> + let (isinductive,paramsno,cl) = + match CicCache.get_obj uri with + C.InductiveDefinition (tl,_,paramsno) -> + let (_,isinductive,_,cl) = List.nth tl i in + let cl' = + List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl + in + (isinductive,paramsno,cl') + | _ -> + raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)) + in + if not isinductive then + guarded_by_destructors n nn kl x safes outtype && + guarded_by_destructors n nn kl x safes term && + (*CSC: manca ??? il controllo sul tipo di term? *) + List.fold_right + (fun p i -> i && guarded_by_destructors n nn kl x safes p) + pl true + else + guarded_by_destructors n nn kl x safes outtype && + (*CSC: manca ??? il controllo sul tipo di term? *) + List.fold_right + (fun t i -> i && guarded_by_destructors n nn kl x safes t) + tl true && + List.fold_right + (fun (p,(_,c,rl)) i -> + let rl' = + match !rl with + Some rl' -> + let (_,rl'') = split rl' paramsno in + rl'' + | None -> raise Impossible + in + let (e, safes',n',nn',x') = + get_new_safes p c rl' safes n nn x + in + i && + guarded_by_destructors n' nn' kl x' safes' e + ) (List.combine pl cl) true + | _ -> + guarded_by_destructors n nn kl x safes outtype && + guarded_by_destructors n nn kl x safes term && + (*CSC: manca ??? il controllo sul tipo di term? *) + List.fold_right + (fun p i -> i && guarded_by_destructors n nn kl x safes p) + pl true + ) + | C.Fix (_, fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len + and x_plus_len = x + len + and safes' = List.map (fun x -> x + len) safes in + List.fold_right + (fun (_,_,ty,bo) i -> + i && guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len + safes' ty && + guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len + safes' bo + ) fl true + | C.CoFix (_, fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len + and x_plus_len = x + len + and safes' = List.map (fun x -> x + len) safes in + List.fold_right + (fun (_,ty,bo) i -> + i && guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len + safes' ty && + guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len safes' + bo + ) fl true + +(*CSC h = 0 significa non ancora protetto *) +and guarded_by_constructors n nn h = + let module C = Cic in + function + C.Rel m when m > n && m <= nn -> h = 1 + | C.Rel _ + | C.Var _ + | C.Meta _ + | C.Sort _ + | C.Implicit -> true (*CSC: ma alcuni sono impossibili!!!! vedi Prod *) + | C.Cast (te,ty) -> + guarded_by_constructors n nn h te && + guarded_by_constructors n nn h ty + | C.Prod (_,so,de) -> + raise Impossible (* the term has just been type-checked *) + | C.Lambda (_,so,de) -> + does_not_occur n nn so && + guarded_by_constructors (n + 1) (nn + 1) h de + | C.Appl ((C.Rel m)::tl) when m > n && m <= nn -> + h = 1 && + List.fold_right (fun x i -> i && does_not_occur n nn x) tl true + | C.Appl ((C.MutConstruct (uri,cookingsno,i,j))::tl) -> + let (is_coinductive, rl) = + match CicCache.get_cooked_obj uri cookingsno with + C.InductiveDefinition (itl,_,_) -> + let (_,is_inductive,_,cl) = List.nth itl i in + let (_,cons,rrec_args) = List.nth cl (j - 1) in + (match !rrec_args with + None -> raise Impossible + | Some rec_args -> (not is_inductive, rec_args) + ) + | _ -> + raise (WrongUriToMutualInductiveDefinitions + (UriManager.string_of_uri uri)) + in + is_coinductive && + List.fold_right + (fun (x,r) i -> + i && + if r then + guarded_by_constructors n nn 1 x + else + does_not_occur n nn x + ) (List.combine tl rl) true + | C.Appl l -> + List.fold_right (fun x i -> i && does_not_occur n nn x) l true + | C.Const _ + | C.Abst _ + | C.MutInd _ + | C.MutConstruct _ -> true (*CSC: ma alcuni sono impossibili!!!! vedi Prod *) + | C.MutCase (_,_,_,out,te,pl) -> + let rec returns_a_coinductive = + function + (*CSC: per le regole di tipaggio, la chiamata ricorsiva verra' *) + (*CSC: effettata solo una volta, per mangiarsi l'astrazione *) + (*CSC: non dummy *) + C.Lambda (_,_,de) -> returns_a_coinductive de + | C.MutInd (uri,_,i) -> + (*CSC: definire una funzioncina per questo codice sempre replicato *) + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,is_inductive,_,_) = List.nth itl i in + not is_inductive + | _ -> + raise (WrongUriToMutualInductiveDefinitions + (UriManager.string_of_uri uri)) + ) + (*CSC: bug nella prossima riga (manca la whd) *) + | C.Appl ((C.MutInd (uri,_,i))::_) -> + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,is_inductive,_,_) = List.nth itl i in + not is_inductive + | _ -> + raise (WrongUriToMutualInductiveDefinitions + (UriManager.string_of_uri uri)) + ) + | _ -> false + in + does_not_occur n nn out && + does_not_occur n nn te && + if returns_a_coinductive out then + List.fold_right + (fun x i -> i && guarded_by_constructors n nn h x) pl true + else + List.fold_right (fun x i -> i && does_not_occur n nn x) pl true + | C.Fix (_,fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len in + List.fold_right + (fun (_,_,ty,bo) i -> + i && does_not_occur n_plus_len nn_plus_len ty && + does_not_occur n_plus_len nn_plus_len bo + ) fl true + | C.CoFix (_,fl) -> + let len = List.length fl in + let n_plus_len = n + len + and nn_plus_len = nn + len in + List.fold_right + (fun (_,ty,bo) i -> + i && does_not_occur n_plus_len nn_plus_len ty && + does_not_occur n_plus_len nn_plus_len bo + ) fl true + +and check_allowed_sort_elimination uri i need_dummy ind arity1 arity2 = + let module C = Cic in + let module U = UriManager in + match (CicReduction.whd arity1, CicReduction.whd arity2) with + (C.Prod (_,so1,de1), C.Prod (_,so2,de2)) + when CicReduction.are_convertible so1 so2 -> + check_allowed_sort_elimination uri i need_dummy + (C.Appl [CicSubstitution.lift 1 ind ; C.Rel 1]) de1 de2 + | (C.Sort C.Prop, C.Sort C.Prop) when need_dummy -> true + | (C.Sort C.Prop, C.Sort C.Set) when need_dummy -> + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,_,_,cl) = List.nth itl i in + (* is a singleton definition? *) + List.length cl = 1 + | _ -> + raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + ) + | (C.Sort C.Set, C.Sort C.Prop) when need_dummy -> true + | (C.Sort C.Set, C.Sort C.Set) when need_dummy -> true + | (C.Sort C.Set, C.Sort C.Type) when need_dummy -> + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,_,_,cl) = List.nth itl i in + (* is a small inductive type? *) + (*CSC: ottimizzare calcolando staticamente *) + let rec is_small = + function + C.Prod (_,so,de) -> + let s = type_of so in + (s = C.Sort C.Prop || s = C.Sort C.Set) && + is_small de + | _ -> true (*CSC: we trust the type-checker *) + in + List.fold_right (fun (_,x,_) i -> i && is_small x) cl true + | _ -> + raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + ) + | (C.Sort C.Type, C.Sort _) when need_dummy -> true + | (C.Sort C.Prop, C.Prod (_,so,ta)) when not need_dummy -> + let res = CicReduction.are_convertible so ind + in + res && + (match CicReduction.whd ta with + C.Sort C.Prop -> true + | C.Sort C.Set -> + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,_,_,cl) = List.nth itl i in + (* is a singleton definition? *) + List.length cl = 1 + | _ -> + raise (WrongUriToMutualInductiveDefinitions + (U.string_of_uri uri)) + ) + | _ -> false + ) + | (C.Sort C.Set, C.Prod (_,so,ta)) when not need_dummy -> + let res = CicReduction.are_convertible so ind + in + res && + (match CicReduction.whd ta with + C.Sort C.Prop + | C.Sort C.Set -> true + | C.Sort C.Type -> + (match CicCache.get_obj uri with + C.InductiveDefinition (itl,_,_) -> + let (_,_,_,cl) = List.nth itl i in + (* is a small inductive type? *) + let rec is_small = + function + C.Prod (_,so,de) -> + let s = type_of so in + (s = C.Sort C.Prop || s = C.Sort C.Set) && + is_small de + | _ -> true (*CSC: we trust the type-checker *) + in + List.fold_right (fun (_,x,_) i -> i && is_small x) cl true + | _ -> + raise (WrongUriToMutualInductiveDefinitions + (U.string_of_uri uri)) + ) + | _ -> raise Impossible + ) + | (C.Sort C.Type, C.Prod (_,so,_)) when not need_dummy -> + CicReduction.are_convertible so ind + | (_,_) -> false + +and type_of_branch argsno need_dummy outtype term constype = + let module C = Cic in + let module R = CicReduction in + match R.whd constype with + C.MutInd (_,_,_) -> + if need_dummy then + outtype + else + C.Appl [outtype ; term] + | C.Appl (C.MutInd (_,_,_)::tl) -> + let (_,arguments) = split tl argsno + in + if need_dummy && arguments = [] then + outtype + else + C.Appl (outtype::arguments@(if need_dummy then [] else [term])) + | C.Prod (name,so,de) -> + C.Prod (C.Name "pippo",so,type_of_branch argsno need_dummy + (CicSubstitution.lift 1 outtype) + (C.Appl [CicSubstitution.lift 1 term ; C.Rel 1]) de) + | _ -> raise Impossible + + +and type_of t = + let rec type_of_aux env = + let module C = Cic in + let module R = CicReduction in + let module S = CicSubstitution in + let module U = UriManager in + function + C.Rel n -> S.lift n (List.nth env (n - 1)) + | C.Var uri -> + incr fdebug ; + let ty = type_of_variable uri in + decr fdebug ; + ty + | C.Meta n -> raise NotImplemented + | C.Sort s -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *) + | C.Implicit -> raise Impossible + | C.Cast (te,ty) -> + let _ = type_of ty in + if R.are_convertible (type_of_aux env te) ty then ty + else raise (NotWellTyped "Cast") + | C.Prod (_,s,t) -> + let sort1 = type_of_aux env s + and sort2 = type_of_aux (s::env) t in + sort_of_prod (sort1,sort2) + | C.Lambda (n,s,t) -> + let sort1 = type_of_aux env s + and type2 = type_of_aux (s::env) t in + let sort2 = type_of_aux (s::env) type2 in + (* only to check if the product is well-typed *) + let _ = sort_of_prod (sort1,sort2) in + C.Prod (n,s,type2) + | C.Appl (he::tl) when List.length tl > 0 -> + let hetype = type_of_aux env he + and tlbody_and_type = List.map (fun x -> (x, type_of_aux env x)) tl in + (try + eat_prods hetype tlbody_and_type + with _ -> debug (C.Appl (he::tl)) env ; C.Implicit) + | C.Appl _ -> raise (NotWellTyped "Appl: no arguments") + | C.Const (uri,cookingsno) -> + incr fdebug ; + let cty = cooked_type_of_constant uri cookingsno in + decr fdebug ; + cty + | C.Abst _ -> raise Impossible + | C.MutInd (uri,cookingsno,i) -> + incr fdebug ; + let cty = cooked_type_of_mutual_inductive_defs uri cookingsno i in + decr fdebug ; + cty + | C.MutConstruct (uri,cookingsno,i,j) -> + let cty = cooked_type_of_mutual_inductive_constr uri cookingsno i j + in + cty + | C.MutCase (uri,cookingsno,i,outtype,term,pl) -> + let outsort = type_of_aux env outtype in + let (need_dummy, k) = + let rec guess_args t = + match decast t with + C.Sort _ -> (true, 0) + | C.Prod (_, s, t) -> + let (b, n) = guess_args t in + if n = 0 then + (* last prod before sort *) + match CicReduction.whd s with + (*CSC vedi nota delirante su cookingsno in cicReduction.ml *) + C.MutInd (uri',_,i') when U.eq uri' uri && i' = i -> (false, 1) + | C.Appl ((C.MutInd (uri',_,i')) :: _) + when U.eq uri' uri && i' = i -> (false, 1) + | _ -> (true, 1) + else + (b, n + 1) + | _ -> raise (NotWellTyped "MutCase: outtype ill-formed") + in + (*CSC whd non serve dopo type_of_aux ? *) + let (b, k) = guess_args outsort in + if not b then (b, k - 1) else (b, k) + in + let (parameters, arguments) = + match R.whd (type_of_aux env term) with + (*CSC manca il caso dei CAST *) + C.MutInd (uri',_,i') -> + (*CSC vedi nota delirante sui cookingsno in cicReduction.ml*) + if U.eq uri uri' && i = i' then ([],[]) + else raise (NotWellTyped ("MutCase: the term is of type " ^ + (U.string_of_uri uri') ^ "," ^ string_of_int i' ^ + " instead of type " ^ (U.string_of_uri uri') ^ "," ^ + string_of_int i)) + | C.Appl (C.MutInd (uri',_,i') :: tl) -> + if U.eq uri uri' && i = i' then split tl (List.length tl - k) + else raise (NotWellTyped ("MutCase: the term is of type " ^ + (U.string_of_uri uri') ^ "," ^ string_of_int i' ^ + " instead of type " ^ (U.string_of_uri uri) ^ "," ^ + string_of_int i)) + | _ -> raise (NotWellTyped "MutCase: the term is not an inductive one") + in + (* let's control if the sort elimination is allowed: [(I q1 ... qr)|B] *) + let sort_of_ind_type = + if parameters = [] then + C.MutInd (uri,cookingsno,i) + else + C.Appl ((C.MutInd (uri,cookingsno,i))::parameters) + in + if not (check_allowed_sort_elimination uri i need_dummy + sort_of_ind_type (type_of_aux env sort_of_ind_type) outsort) + then + raise (NotWellTyped "MutCase: not allowed sort elimination") ; + + (* let's check if the type of branches are right *) + let (cl,parsno) = + match CicCache.get_cooked_obj uri cookingsno with + C.InductiveDefinition (tl,_,parsno) -> + let (_,_,_,cl) = List.nth tl i in (cl,parsno) + | _ -> + raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)) + in + let (_,branches_ok) = + List.fold_left + (fun (j,b) (p,(_,c,_)) -> + let cons = + if parameters = [] then + (C.MutConstruct (uri,cookingsno,i,j)) + else + (C.Appl (C.MutConstruct (uri,cookingsno,i,j)::parameters)) + in + (j + 1, b && + R.are_convertible (type_of_aux env p) + (type_of_branch parsno need_dummy outtype cons + (type_of_aux env cons)) + ) + ) (1,true) (List.combine pl cl) + in + if not branches_ok then + raise (NotWellTyped "MutCase: wrong type of a branch") ; + + if not need_dummy then + C.Appl ((outtype::arguments)@[term]) + else if arguments = [] then + outtype + else + C.Appl (outtype::arguments) + | C.Fix (i,fl) -> + let types_times_kl = + List.rev + (List.map (fun (_,k,ty,_) -> let _ = type_of_aux env ty in (ty,k)) fl) + in + let (types,kl) = List.split types_times_kl in + let len = List.length types in + List.iter + (fun (name,x,ty,bo) -> + if (R.are_convertible (type_of_aux (types @ env) bo) + (CicSubstitution.lift len ty)) + then + begin + let (m, eaten) = eat_lambdas (x + 1) bo in + (*let's control the guarded by destructors conditions D{f,k,x,M}*) + if not (guarded_by_destructors eaten (len + eaten) kl 1 [] m) then + raise (NotWellTyped "Fix: not guarded by destructors") + end + else + raise (NotWellTyped "Fix: ill-typed bodies") + ) fl ; + + (*CSC: controlli mancanti solo su D{f,k,x,M} *) + let (_,_,ty,_) = List.nth fl i in + ty + | C.CoFix (i,fl) -> + let types = + List.rev (List.map (fun (_,ty,_) -> let _ = type_of_aux env ty in ty) fl) + in + let len = List.length types in + List.iter + (fun (_,ty,bo) -> + if (R.are_convertible (type_of_aux (types @ env) bo) + (CicSubstitution.lift len ty)) + then + begin + (* let's control the guarded by constructors conditions C{f,M} *) + if not (guarded_by_constructors 0 len 0 bo) then + raise (NotWellTyped "CoFix: not guarded by constructors") + end + else + raise (NotWellTyped "CoFix: ill-typed bodies") + ) fl ; + + let (_,ty,_) = List.nth fl i in + ty + + and decast = + let module C = Cic in + function + C.Cast (t,_) -> t + | t -> t + + and sort_of_prod (t1, t2) = + let module C = Cic in + match (decast t1, decast t2) with + (C.Sort s1, C.Sort s2) + when (s2 = C.Prop or s2 = C.Set) -> (* different from Coq manual!!! *) + C.Sort s2 + | (C.Sort s1, C.Sort s2) -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *) + | (_,_) -> raise (NotWellTyped "Prod") + + and eat_prods hetype = + (*CSC: siamo sicuri che le are_convertible non lavorino con termini non *) + (*CSC: cucinati *) + function + [] -> hetype + | (hete, hety)::tl -> + (match (CicReduction.whd hetype) with + Cic.Prod (n,s,t) -> + if CicReduction.are_convertible s hety then + (CicReduction.fdebug := -1 ; + eat_prods (CicSubstitution.subst hete t) tl + ) + else + ( + CicReduction.fdebug := 0 ; + let _ = CicReduction.are_convertible s hety in + debug hete [hety ; s] ; + raise (NotWellTyped "Appl: wrong parameter-type") +) + | _ -> raise (NotWellTyped "Appl: wrong Prod-type") + ) + in + type_of_aux [] t +;; + +let typecheck uri = + let module C = Cic in + let module R = CicReduction in + let module U = UriManager in + match CicCache.is_type_checked uri 0 with + CicCache.CheckedObj _ -> () + | CicCache.UncheckedObj uobj -> + (* let's typecheck the uncooked object *) + (match uobj with + C.Definition (_,te,ty,_) -> + let _ = type_of ty in + if not (R.are_convertible (type_of te ) ty) then + raise (NotWellTyped ("Constant " ^ (U.string_of_uri uri))) + | C.Axiom (_,ty,_) -> + (* only to check that ty is well-typed *) + let _ = type_of ty in () + | C.CurrentProof (_,_,te,ty) -> + (*CSC [] wrong *) + let _ = type_of ty in + debug (type_of te) [] ; + if not (R.are_convertible (type_of te) ty) then + raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri))) + | C.Variable (_,ty) -> + (* only to check that ty is well-typed *) + (*CSC [] wrong *) + let _ = type_of ty in () + | C.InductiveDefinition _ -> + cooked_mutual_inductive_defs uri uobj + ) ; + CicCache.set_type_checking_info uri +;; diff --git a/helm/interface/cicTypeChecker.mli b/helm/interface/cicTypeChecker.mli new file mode 100644 index 000000000..21f4ab91b --- /dev/null +++ b/helm/interface/cicTypeChecker.mli @@ -0,0 +1,9 @@ +exception NotWellTyped of string +exception WrongUriToConstant of string +exception WrongUriToVariable of string +exception WrongUriToMutualInductiveDefinitions of string +exception ListTooShort +exception NotPositiveOccurrences of string +exception NotWellFormedTypeOfInductiveConstructor of string +exception WrongRequiredArgument of string +val typecheck : UriManager.uri -> unit diff --git a/helm/interface/cicXPath.ml b/helm/interface/cicXPath.ml new file mode 100644 index 000000000..2df970737 --- /dev/null +++ b/helm/interface/cicXPath.ml @@ -0,0 +1,51 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 14/06/2000 *) +(* *) +(* *) +(******************************************************************************) + +let get_annotation_from_term annterm = + let module C = Cic in + match annterm with + C.ARel (_,ann,_,_) -> ann + | C.AVar (_,ann,_) -> ann + | C.AMeta (_,ann,_) -> ann + | C.ASort (_,ann,_) -> ann + | C.AImplicit (_,ann) -> ann + | C.ACast (_,ann,_,_) -> ann + | C.AProd (_,ann,_,_,_) -> ann + | C.ALambda (_,ann,_,_,_) -> ann + | C.AAppl (_,ann,_) -> ann + | C.AConst (_,ann,_,_) -> ann + | C.AAbst (_,ann,_) -> ann + | C.AMutInd (_,ann,_,_,_) -> ann + | C.AMutConstruct (_,ann,_,_,_,_)-> ann + | C.AMutCase (_,ann,_,_,_,_,_,_) -> ann + | C.AFix (_,ann,_,_) -> ann + | C.ACoFix (_,ann,_,_) -> ann +;; + +let get_annotation_from_obj annobj = + let module C = Cic in + match annobj with + C.ADefinition (_,ann,_,_,_,_) -> ann + | C.AAxiom (_,ann,_,_,_) -> ann + | C.AVariable (_,ann,_,_) -> ann + | C.ACurrentProof (_,ann,_,_,_,_) -> ann + | C.AInductiveDefinition (_,ann,_,_,_) -> ann +;; + +exception IdUnknown of string;; + +let get_annotation (annobj,ids_to_targets) xpath = + try + match Hashtbl.find ids_to_targets xpath with + Cic.Object annobj -> get_annotation_from_obj annobj + | Cic.Term annterm -> get_annotation_from_term annterm + with + Not_found -> raise (IdUnknown xpath) +;; diff --git a/helm/interface/cicXPath.prima_degli_identificatori.ml b/helm/interface/cicXPath.prima_degli_identificatori.ml new file mode 100644 index 000000000..8a69d1a24 --- /dev/null +++ b/helm/interface/cicXPath.prima_degli_identificatori.ml @@ -0,0 +1,102 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 11/04/2000 *) +(* *) +(* *) +(******************************************************************************) + +(* functions to parse an XPath to retrieve the annotation *) + +exception WrongXPath of string;; + +let rec get_annotation_of_inductiveFun f xpath = + let module C = Cic in + match (xpath,f) with + 1::tl,(_,_,ty,_) -> get_annotation_of_term ty tl + | 2::tl,(_,_,_,te) -> get_annotation_of_term te tl + | l,_ -> + raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l "")) + +and get_annotation_of_coinductiveFun f xpath = + let module C = Cic in + match (xpath,f) with + 1::tl,(_,ty,_) -> get_annotation_of_term ty tl + | 2::tl,(_,_,te) -> get_annotation_of_term te tl + | l,_ -> + raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l "")) + +and get_annotation_of_inductiveType ty xpath = + let module C = Cic in + match (xpath,ty) with + 1::tl,(_,_,arity,_) -> get_annotation_of_term arity tl + | n::tl,(_,_,_,cons) when n <= List.length cons + 1 -> + let (_,ty,_) = List.nth cons (n-2) in + get_annotation_of_term ty tl + | l,_ -> + raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l "")) + +and get_annotation_of_term term xpath = + let module C = Cic in + match (xpath,term) with + [],C.ARel (_,ann,_,_) -> ann + | [],C.AVar (_,ann,_) -> ann + | [],C.AMeta (_,ann,_) -> ann + | [],C.ASort (_,ann,_) -> ann + | [],C.AImplicit (_,ann) -> ann + | [],C.ACast (_,ann,_,_) -> ann + | 1::tl,C.ACast (_,_,te,_) -> get_annotation_of_term te tl + | 2::tl,C.ACast (_,_,_,ty) -> get_annotation_of_term ty tl + | [],C.AProd (_,ann,_,_,_) -> ann + | 1::tl,C.AProd (_,_,_,so,_) -> get_annotation_of_term so tl + | 2::tl,C.AProd (_,_,_,_,ta) -> get_annotation_of_term ta tl + | [],C.ALambda (_,ann,_,_,_) -> ann + | 1::tl,C.ALambda (_,_,_,so,_) -> get_annotation_of_term so tl + | 2::tl,C.ALambda (_,_,_,_,ta) -> get_annotation_of_term ta tl + | [],C.AAppl (_,ann,_) -> ann + | n::tl,C.AAppl (_,_,l) when n <= List.length l -> + get_annotation_of_term (List.nth l (n-1)) tl + | [],C.AConst (_,ann,_,_) -> ann + | [],C.AAbst (_,ann,_) -> ann + | [],C.AMutInd (_,ann,_,_,_) -> ann + | [],C.AMutConstruct (_,ann,_,_,_,_) -> ann + | [],C.AMutCase (_,ann,_,_,_,_,_,_) -> ann + | 1::tl,C.AMutCase (_,_,_,_,_,outt,_,_) -> get_annotation_of_term outt tl + | 2::tl,C.AMutCase (_,_,_,_,_,_,te,_) -> get_annotation_of_term te tl + | n::tl,C.AMutCase (_,_,_,_,_,_,_,pl) when n <= List.length pl -> + get_annotation_of_term (List.nth pl (n-1)) tl + | [],C.AFix (_,ann,_,_) -> ann + | n::tl,C.AFix (_,_,_,fl) when n <= List.length fl -> + get_annotation_of_inductiveFun (List.nth fl (n-1)) tl + | [],C.ACoFix (_,ann,_,_) -> ann + | n::tl,C.ACoFix (_,_,_,fl) when n <= List.length fl -> + get_annotation_of_coinductiveFun (List.nth fl (n-1)) tl + | l,_ -> + raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l "")) +;; + +let get_annotation (annobj,_) xpath = + let module C = Cic in + match (xpath,annobj) with + [],C.ADefinition (_,ann,_,_,_,_) -> ann + | 1::tl,C.ADefinition (_,_,_,bo,_,_) -> get_annotation_of_term bo tl + | 2::tl,C.ADefinition (_,_,_,_,ty,_) -> get_annotation_of_term ty tl + | [],C.AAxiom (_,ann,_,_,_) -> ann + | 1::tl,C.AAxiom (_,_,_,ty,_) -> get_annotation_of_term ty tl + | [],C.AVariable (_,ann,_,_) -> ann + | 1::tl,C.AVariable (_,_,_,ty) -> get_annotation_of_term ty tl + | [],C.ACurrentProof (_,ann,_,_,_,_) -> ann + | n::tl,C.ACurrentProof (_,ann,_,conjs,_,_) when n <= List.length conjs -> + get_annotation_of_term (snd (List.nth conjs (n-1))) tl + | n::tl,C.ACurrentProof (_,ann,_,conjs,bo,_) when n = List.length conjs + 1 -> + get_annotation_of_term bo tl + | n::tl,C.ACurrentProof (_,ann,_,conjs,_,ty) when n = List.length conjs + 2 -> + get_annotation_of_term ty tl + | [],C.AInductiveDefinition (_,ann,_,_,_) -> ann + | n::tl,C.AInductiveDefinition (_,_,tys,_,_) when n <= List.length tys -> + get_annotation_of_inductiveType (List.nth tys (n-1)) tl + | l,_ -> + raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l "")) +;; diff --git a/helm/interface/configuration.ml b/helm/interface/configuration.ml new file mode 100644 index 000000000..6b0facf33 --- /dev/null +++ b/helm/interface/configuration.ml @@ -0,0 +1,78 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 06/05/2000 *) +(* *) +(* This is the parser that reads the configuration file of helm *) +(* *) +(******************************************************************************) + +(* this should be the only hard coded constant *) +let filename = "/home/cadet/sacerdot/local/etc/helm/configuration.xml";; + +exception Warnings;; + +class warner = + object + method warn w = + print_endline ("WARNING: " ^ w) ; + (raise Warnings : unit) + end +;; + +let xml_document () = + let module Y = Pxp_yacc in + try + let config = {Y.default_config with Y.warner = new warner} in + Y.parse_document_entity config (Y.from_file filename) Y.default_spec + with + e -> + print_endline (Pxp_types.string_of_exn e) ; + raise e +;; + +exception Impossible;; + +let vars = Hashtbl.create 14;; + +(* resolve tags and returns the string values of the variable tags *) +let rec resolve = + let module D = Pxp_document in + function + [] -> "" + | he::tl when he#node_type = D.T_element "value-of" -> + (match he#attribute "var" with + Pxp_types.Value var -> Hashtbl.find vars var + | _ -> raise Impossible + ) ^ resolve tl + | he::tl when he#node_type = D.T_data -> + he#data ^ resolve tl + | _ -> raise Impossible +;; + +(* we trust the xml file to be valid because of the validating xml parser *) +let _ = + List.iter + (function + n -> + match n#node_type with + Pxp_document.T_element var -> + Hashtbl.add vars var (resolve (n#sub_nodes)) + | _ -> raise Impossible + ) + ((xml_document ())#root#sub_nodes) +;; + +let helm_dir = Hashtbl.find vars "helm_dir";; +let dtd_dir = Hashtbl.find vars "dtd_dir";; +let servers_file = Hashtbl.find vars "servers_file";; +let uris_dbm = Hashtbl.find vars "uris_dbm";; +let dest = Hashtbl.find vars "dest";; +let indexname = Hashtbl.find vars "indexname";; +let tmpdir = Hashtbl.find vars "tmpdir";; +let helm_dir = Hashtbl.find vars "helm_dir";; +let getter_url = Hashtbl.find vars "getter_url";; + +let _ = Hashtbl.clear vars;; diff --git a/helm/interface/deannotate.ml b/helm/interface/deannotate.ml new file mode 100644 index 000000000..658554fff --- /dev/null +++ b/helm/interface/deannotate.ml @@ -0,0 +1,69 @@ +let expect_possible_parameters = ref false;; + +exception NotExpectingPossibleParameters;; + +let rec deannotate_term = + let module C = Cic in + function + C.ARel (_,_,n,_) -> C.Rel n + | C.AVar (_,_,uri) -> C.Var uri + | C.AMeta (_,_,n) -> C.Meta n + | C.ASort (_,_,s) -> C.Sort s + | C.AImplicit _ -> C.Implicit + | C.ACast (_,_,va,ty) -> C.Cast (deannotate_term va, deannotate_term ty) + | C.AProd (_,_,name,so,ta) -> + C.Prod (name, deannotate_term so, deannotate_term ta) + | C.ALambda (_,_,name,so,ta) -> + C.Lambda (name, deannotate_term so, deannotate_term ta) + | C.AAppl (_,_,l) -> C.Appl (List.map deannotate_term l) + | C.AConst (_,_,uri, cookingsno) -> C.Const (uri, cookingsno) + | C.AAbst (_,_,uri) -> C.Abst uri + | C.AMutInd (_,_,uri,cookingsno,i) -> C.MutInd (uri,cookingsno,i) + | C.AMutConstruct (_,_,uri,cookingsno,i,j) -> + C.MutConstruct (uri,cookingsno,i,j) + | C.AMutCase (_,_,uri,cookingsno,i,outtype,te,pl) -> + C.MutCase (uri,cookingsno,i,deannotate_term outtype, + deannotate_term te, List.map deannotate_term pl) + | C.AFix (_,_,funno,ifl) -> + C.Fix (funno, List.map deannotate_inductiveFun ifl) + | C.ACoFix (_,_,funno,ifl) -> + C.CoFix (funno, List.map deannotate_coinductiveFun ifl) + +and deannotate_inductiveFun (name,index,ty,bo) = + (name, index, deannotate_term ty, deannotate_term bo) + +and deannotate_coinductiveFun (name,ty,bo) = + (name, deannotate_term ty, deannotate_term bo) +;; + +let deannotate_inductiveType (name, isinductive, arity, cons) = + (name, isinductive, deannotate_term arity, + List.map (fun (id,ty,recs) -> (id,deannotate_term ty, recs)) cons) +;; + +let deannotate_obj = + let module C = Cic in + function + C.ADefinition (_, _, id, bo, ty, params) -> + (match params with + C.Possible params -> + if !expect_possible_parameters then + C.Definition (id, deannotate_term bo, deannotate_term ty, params) + else + raise NotExpectingPossibleParameters + | C.Actual params -> + C.Definition (id, deannotate_term bo, deannotate_term ty, params) + ) + | C.AAxiom (_, _, id, ty, params) -> + C.Axiom (id, deannotate_term ty, params) + | C.AVariable (_, _, name, ty) -> + C.Variable (name, deannotate_term ty) + | C.ACurrentProof (_, _, name, conjs, bo, ty) -> + C.CurrentProof ( + name, List.map (fun (id,con) -> (id,deannotate_term con)) conjs, + deannotate_term bo, deannotate_term ty + ) + | C.AInductiveDefinition (_, _, tys, params, parno) -> + C.InductiveDefinition ( List.map deannotate_inductiveType tys, + params, parno) +;; diff --git a/helm/interface/experiment.ml b/helm/interface/experiment.ml new file mode 100644 index 000000000..5c086bb19 --- /dev/null +++ b/helm/interface/experiment.ml @@ -0,0 +1,84 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This is a textual interface to the Coq-like pretty printer cicPp for cic *) +(* terms exported in xml. It uses directly the modules cicPp and cache and *) +(* indirectly all the other modules (cicParser, cicParser2, cicParser3, *) +(* getter). The syntax is "experiment[.opt] filename1 ... filenamen" where *) +(* filenamei is the path-name of an xml file describing a cic term. On stdout *) +(* are pretty-printed all the n terms *) +(* *) +(******************************************************************************) + +let pretty_print = ref true;; +let read_from_stdin = ref false;; +let uris_in_input = ref false;; + +let parse uri = + if !pretty_print then + begin + print_endline ("^^^" ^ uri ^ "^^^") ; + print_string (CicPp.ppobj (CicCache.get_obj (UriManager.uri_of_string uri))); + print_endline ("\n$$$" ^ uri ^ "$$$\n") + end + else + begin + print_string uri ; + let _ = CicCache.get_obj (UriManager.uri_of_string uri) in + print_endline " OK!" ; + flush stdout + end +;; + +let uri_of_filename fn = + if !uris_in_input then fn + else + let uri = + Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn + in + let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in + uri' +;; + +let read_filenames_from_stdin () = + let files = ref [] in + try + while true do + let l = Str.split (Str.regexp " ") (read_line ()) in + List.iter (fun x -> files := (uri_of_filename x) :: !files) l + done + with + End_of_file -> + files := List.rev !files ; + List.iter parse !files +;; + +(* filenames are read from command line and converted to uris via *) +(* uri_of_filenames; then the cic terms are load in cache via *) +(* CicCache.get_obj and then pretty printed via CicPp.ppobj *) + +let main() = + let files = ref [] in + Arg.parse + ["-nopp", Arg.Clear pretty_print, "Do not pretty print, parse only" ; + "-stdin", Arg.Set read_from_stdin, "Read from stdin" ; + "-uris", Arg.Set uris_in_input, "Read uris, not filenames" ; + "-update", Arg.Unit Getter.update, "Update the getter view of the world"] + (fun x -> files := (uri_of_filename x) :: !files) + " +usage: experiment file ... + +List of options:"; + if !read_from_stdin then read_filenames_from_stdin () + else + begin + files := List.rev !files; + List.iter parse !files + end +;; + +main();; diff --git a/helm/interface/fix_params.ml b/helm/interface/fix_params.ml new file mode 100644 index 000000000..b4de9fa6f --- /dev/null +++ b/helm/interface/fix_params.ml @@ -0,0 +1,49 @@ +let read_from_stdin = ref false;; + +let uri_of_filename fn = + let uri = + Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn + in + let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in + UriManager.uri_of_string uri' +;; + +let main() = + Deannotate.expect_possible_parameters := true ; + let files = ref [] in + Arg.parse + ["-stdin", Arg.Set read_from_stdin, "Read from stdin"] + (fun x -> files := (x, uri_of_filename x) :: !files) + " +usage: experiment file ... + +List of options:"; + if !read_from_stdin then + begin + try + while true do + let l = Str.split (Str.regexp " ") (read_line ()) in + List.iter (fun x -> files := (x, uri_of_filename x) :: !files) l + done + with + End_of_file -> () + end ; + files := List.rev !files; + Getter.update () ; + print_endline "ATTENTION: have you changed servers.txt so that you'll try \ + to repair your own objs instead of others'?" ; + flush stdout ; + List.iter + (function (fn, uri) -> + print_string (UriManager.string_of_uri uri) ; + flush stdout ; + (try + CicFindParameters.fix_params uri (Some fn) + with + e -> print_newline () ; flush stdout ; raise e ) ; + print_endline " OK!" ; + flush stdout + ) !files +;; + +main();; diff --git a/helm/interface/getter.ml b/helm/interface/getter.ml new file mode 100644 index 000000000..21c1901a1 --- /dev/null +++ b/helm/interface/getter.ml @@ -0,0 +1,143 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(******************************************************************************) + +exception ErrorGetting of string;; + +module OrderedStrings = + struct + type t = string + let compare (s1 : t) (s2 : t) = compare s1 s2 + end +;; + +module MapOfStrings = Map.Make(OrderedStrings);; + +let read_index url = + let module C = Configuration in + if Sys.command ("wget -c -P " ^ C.tmpdir ^ " " ^ url ^ "/\"" ^ + C.indexname ^ "\"") <> 0 + then + raise (ErrorGetting url) ; + let tmpfilename = C.tmpdir ^ "/" ^ C.indexname in + let fd = open_in tmpfilename in + let uris = ref [] in + try + while true do + uris := (input_line fd) :: !uris + done ; + [] (* only to make the compiler happy *) + with + End_of_file -> + Sys.remove tmpfilename ; + !uris +;; + +(* mk_urls_of_uris list_of_servers_base_urls *) +let rec mk_urls_of_uris = + function + [] -> MapOfStrings.empty + | he::tl -> + let map = mk_urls_of_uris tl in + let uris = read_index he in + let url_of_uri uri = + let url = uri ^ ".xml" in + let url' = Str.replace_first (Str.regexp "cic:") he url in + let url'' = Str.replace_first (Str.regexp "theory:") he url' in + url'' + in + List.fold_right + (fun uri m -> MapOfStrings.add uri (url_of_uri uri) m) + uris map +;; + +let update () = + let module C = Configuration in + let fd = open_in C.servers_file in + let servers = ref [] in + try + while true do + servers := (input_line fd) :: !servers + done + with + End_of_file -> + let urls_of_uris = mk_urls_of_uris (List.rev !servers) in + (try Sys.remove (C.uris_dbm ^ ".db") with _ -> ()) ; + let dbm = + Dbm.opendbm C.uris_dbm [Dbm.Dbm_wronly ; Dbm.Dbm_create] 0o660 + in + MapOfStrings.iter (fun uri url -> Dbm.add dbm uri url) urls_of_uris ; + Dbm.close dbm +;; + +(* url_of_uri : uri -> url *) +let url_of_uri uri = + let dbm = Dbm.opendbm Configuration.uris_dbm [Dbm.Dbm_rdonly] 0o660 in + let url = Dbm.find dbm (UriManager.string_of_uri uri) in + Dbm.close dbm ; + url +;; + +let filedir_of_uri uri = + let fn = UriManager.buri_of_uri uri in + let fn' = Str.replace_first (Str.regexp ".*:") Configuration.dest fn in + fn' +;; + +let name_and_ext_of_uri uri = + let str = UriManager.string_of_uri uri in + Str.replace_first (Str.regexp ".*/") "" str +;; + +(* get_file : uri -> filename *) +let get_file uri = + let dir = filedir_of_uri uri in + let fn = dir ^ "/" ^ name_and_ext_of_uri uri ^ ".xml" in + if not (Sys.file_exists fn) then + begin + let url = url_of_uri uri in + (*CSC: use -q for quiet mode *) + if Sys.command ("wget -c -P " ^ dir ^ " \"" ^ url ^"\"") <> 0 + then + raise (ErrorGetting url) ; + end ; + fn +;; + +(* get : uri -> filename *) +(* If uri is the URI of an annotation, the annotated object is processed *) +let get uri = + let module U = UriManager in + get_file + (U.uri_of_string + (Str.replace_first (Str.regexp "\.ann$") "" + (Str.replace_first (Str.regexp "\.types$") "" (U.string_of_uri uri)))) +;; + +(* get_ann : uri -> filename *) +(* If uri is the URI of an annotation, the annotation file is processed *) +let get_ann = get_file;; + +(* get_ann_file_name_and_uri : uri -> filename * annuri *) +(* If given an URI, it returns the name of the corresponding *) +(* annotation file and the annotation uri *) +let get_ann_file_name_and_uri uri = + let module U = UriManager in + let uri = U.string_of_uri uri in + let annuri = + U.uri_of_string ( + if Str.string_match (Str.regexp ".*\.ann$") uri 0 then + uri + else + uri ^ ".ann" + ) + in + let dir = filedir_of_uri annuri in + let fn = dir ^ "/" ^ name_and_ext_of_uri annuri ^ ".xml" in + (fn, annuri) +;; diff --git a/helm/interface/getter.mli b/helm/interface/getter.mli new file mode 100644 index 000000000..c0e882c99 --- /dev/null +++ b/helm/interface/getter.mli @@ -0,0 +1,25 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* *) +(******************************************************************************) + +(* get : uri -> filename *) +(* If uri is the URI of an annotation, the annotated object is processed *) +val get : UriManager.uri -> string + +(* get_ann : uri -> filename *) +(* If uri is the URI of an annotation, the annotation file is processed *) +val get_ann : UriManager.uri -> string + +(* get_ann_file_name_and_uri : uri -> filename * annuri *) +(* If given an URI, it returns the name of the corresponding *) +(* annotation file and the annotation uri *) +val get_ann_file_name_and_uri : UriManager.uri -> string * UriManager.uri + +(* synchronize with the servers *) +val update : unit -> unit diff --git a/helm/interface/gmon.out b/helm/interface/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..c48b8406fc2edecce5ecb805db4f3bb4bf4cddc5 GIT binary patch literal 1421 zcmYe#&Cg?GKm!-1uyFXyXW^L7#K4dOlq*h6&d*CJhN*%xU;?A`Xb6mkz-S1Jh5#`k Yz-Tj_g+qtc&;eBLGWq~Htb7m-0DoW$c>n+a literal 0 HcmV?d00001 diff --git a/helm/interface/http_getter/http_getter.pl b/helm/interface/http_getter/http_getter.pl new file mode 100755 index 000000000..4ad358480 --- /dev/null +++ b/helm/interface/http_getter/http_getter.pl @@ -0,0 +1,272 @@ +#!/usr/bin/perl + +# next require defines: $helm_dir, $html_link +# LUCA - 12 sep 2000 +# require "/usr/lib/helm/configuration.pl"; +require "/home/cadet/sacerdot/local/lib/helm/configuration.pl"; +use HTTP::Daemon; +use HTTP::Status; +use HTTP::Request; +use LWP::UserAgent; +use DB_File; + +my $cont = ""; +my $d = new HTTP::Daemon LocalPort => 8081; +tie(%map, 'DB_File', 'urls_of_uris.db', O_RDONLY, 0664); +print "Please contact me at: url, ">\n"; +print "helm_dir: $helm_dir\n"; +$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes +while (my $c = $d->accept) { + if (fork() == 0) { + while (my $r = $c->get_request) { + #CSC: mancano i controlli di sicurezza + + $cont = ""; + my $cicuri = $r->url; + $cicuri =~ s/^[^?]*\?url=(.*)/$1/; + print "*".$r->url."\n"; + my $http_method = $r->method; + my $http_path = $r->url->path; + if ($http_method eq 'GET' and $http_path eq "/get") { + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + $filename = $helm_dir.$filename.".xml"; + my $resolved = $map{$cicuri}; + print "$cicuri ==> $resolved ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "Downloading\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file\n"; + open(FD, $filename); + print FD $cont; + close(FD); + + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } + } elsif ($http_method eq 'GET' and $http_path eq "/annotate") { + my $do_annotate = ($cicuri =~ /\.ann$/); + my $target_to_annotate = $cicuri; + $target_to_annotate =~ s/(.*)\.ann$/$1/ if $do_annotate; + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + $filename_target =~ s/(.*)\.ann$/$1.xml/ if $do_annotate; + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } else { + print "$cicuri ==> $resolved ($filename)\n"; + } + + # Retrieves the annotation + + if (stat($filename)) { + print "Using local copy for the annotation\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the annotation\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file for the annotation\n"; + open(FD, $filename); + print FD $cont; + close(FD); + } + my $annotation = $cont; + + # Retrieves the target to annotate + + $cont = ""; + if ($do_annotate) { + if (stat($filename_target)) { + print "Using local copy for the file to annotate\n"; + open(FD, $filename_target); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the file to annotate\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved_target"); + $response = $ua->request($request, \&callback); + + print "Storing file for the file to annotate\n"; + open(FD, $filename_target); + print FD $cont; + close(FD); + } + } + my $target = $cont; + + # Merging the annotation and the target + + $target =~ s/<\?xml [^?]*\?>//sg; + $target =~ s/]*>//sg; + $annotation =~ s/<\?xml [^?]*\?>//sg; + $annotation =~ s/]*>//sg; + my $merged = < + +$target +$annotation + +EOT + + # Answering the client + + my $res = new HTTP::Response; + $res->content($merged); + $c->send_response($res); + } elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") { + my $do_annotate = ($cicuri =~ /\.types$/); + my $target_to_annotate = $cicuri; + $target_to_annotate =~ s/(.*)\.types$/$1/ if $do_annotate; + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + $filename_target =~ s/(.*)\.types$/$1.xml/ if $do_annotate; + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "GETWITHTYPES!!\n"; + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } else { + print "$cicuri ==> $resolved ($filename)\n"; + } + + # Retrieves the annotation + + if (stat($filename)) { + print "Using local copy for the types\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the types\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file for the types\n"; + open(FD, $filename); + print FD $cont; + close(FD); + } + my $annotation = $cont; + + # Retrieves the target to annotate + + $cont = ""; + my $target; + if ($do_annotate) { + if (stat($filename_target)) { + print "Using local copy for the file to type\n"; + open(FD, $filename_target); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the file to type\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved_target"); + $response = $ua->request($request, \&callback); + + print "Storing file for the file to type\n"; + open(FD, $filename_target); + print FD $cont; + close(FD); + } + $target = $cont; + } else { + $target = $annotation; + $annotation = ""; + } + + # Merging the annotation and the target + + $target =~ s/<\?xml [^?]*\?>//sg; + $target =~ s/]*>//sg; + $annotation =~ s/<\?xml [^?]*\?>//sg; + $annotation =~ s/]*>//sg; + my $merged = < + +$target + +$annotation + + +EOT + + # Answering the client + + my $res = new HTTP::Response; + $res->content($merged); + $c->send_response($res); + } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") { + my $filename = $cicuri; + $filename = $helm_dir."/dtd/".$filename; + print "DTD: $cicuri ==> ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + die "Could not find DTD!"; + } + } elsif ($http_method eq 'GET' and $http_path eq "/conf") { + my $quoted_html_link = $html_link; + $quoted_html_link =~ s/&/&/g; + $quoted_html_link =~ s//>/g; + $quoted_html_link =~ s/'/'/g; + $quoted_html_link =~ s/"/"/g; + print "Configuration requested, returned #$quoted_html_link#\n"; + $cont = "$quoted_html_link"; + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "INVALID REQUEST!!!!!\n"; + $c->send_error(RC_FORBIDDEN) + } + } + $c->close; + undef($c); + print "\nCONNECTION CLOSED\n\n"; + exit; + } # fork +} + +#================================ + +sub callback +{ + my ($data) = @_; + $cont .= $data; +} diff --git a/helm/interface/http_getter/http_getter.pl2 b/helm/interface/http_getter/http_getter.pl2 new file mode 100755 index 000000000..3adfa2be0 --- /dev/null +++ b/helm/interface/http_getter/http_getter.pl2 @@ -0,0 +1,199 @@ +#!/usr/bin/perl + +# next require defines: $helm_dir, $html_link +require "/usr/lib/helm/configuration.pl"; +use HTTP::Daemon; +use HTTP::Status; +use HTTP::Request; +use LWP::UserAgent; +use DB_File; + +my $cont = ""; +my $d = new HTTP::Daemon LocalPort => 8081; +tie(%map, 'DB_File', 'urls_of_uris.db', O_RDONLY, 0664); +print "Please contact me at: url, ">\n"; +print "helm_dir: $helm_dir\n"; +$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes +while (my $c = $d->accept) { + if (fork() == 0) { + while (my $r = $c->get_request) { + #CSC: mancano i controlli di sicurezza + + $cont = ""; + my $cicuri = $r->url; + $cicuri =~ s/^[^?]*\?url=(.*)/$1/; + print "*".$r->url."\n"; + my $http_method = $r->method; + my $http_path = $r->url->path; + if ($http_method eq 'GET' and $http_path eq "/get") { + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + $filename = $helm_dir.$filename.".xml"; + my $resolved = $map{$cicuri}; + print "$cicuri ==> $resolved ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "Downloading\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file\n"; + open(FD, $filename); + print FD $cont; + close(FD); + + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } + } elsif ($http_method eq 'GET' and $http_path eq "/annotate") { + my $do_annotate = ($cicuri =~ /\.ann$/); + my $target_to_annotate = $cicuri; + $target_to_annotate =~ s/(.*)\.ann$/$1/ if $do_annotate; + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + $filename_target =~ s/(.*)\.ann$/$1.xml/ if $do_annotate; + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") { + my $do_annotate = ($cicuri =~ /\.types$/); + my $target_to_annotate = $cicuri; + $target_to_annotate =~ s/(.*)\.types$/$1/ if $do_annotate; + my $filename = $cicuri; + $filename =~ s/cic:(.*)/$1/; + $filename =~ s/theory:(.*)/$1/; + my $filename_target = $helm_dir.$filename if $do_annotate; + $filename = $helm_dir.$filename.".xml"; + $filename_target =~ s/(.*)\.types$/$1.xml/ if $do_annotate; + my $resolved = $map{$cicuri}; + my $resolved_target = $map{$target_to_annotate} if $do_annotate; + if ($do_annotate) { + print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n"; + } else { + print "$cicuri ==> $resolved ($filename)\n"; + } + + # Retrieves the annotation + + if (stat($filename)) { + print "Using local copy for the types\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the types\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved"); + $response = $ua->request($request, \&callback); + + print "Storing file for the types\n"; + open(FD, $filename); + print FD $cont; + close(FD); + } + my $annotation = $cont; + + # Retrieves the target to annotate + + $cont = ""; + if ($do_annotate) { + if (stat($filename_target)) { + print "Using local copy for the file to type\n"; + open(FD, $filename_target); + while() { $cont .= $_; } + close(FD); + } else { + print "Downloading the file to type\n"; + $ua = LWP::UserAgent->new; + $request = HTTP::Request->new(GET => "$resolved_target"); + $response = $ua->request($request, \&callback); + + print "Storing file for the file to type\n"; + open(FD, $filename_target); + print FD $cont; + close(FD); + } + } + my $target = $cont; + + # Merging the annotation and the target + + $target =~ s/<\?xml [^?]*\?>//sg; + $target =~ s/]*>//sg; + $annotation =~ s/<\?xml [^?]*\?>//sg; + $annotation =~ s/]*>//sg; + my $merged = < + +$target + +$annotation + + +EOT + + # Answering the client + + my $res = new HTTP::Response; + $res->content($merged); + $c->send_response($res); + } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") { + my $filename = $cicuri; + $filename = $helm_dir."/dtd/".$filename; + print "DTD: $cicuri ==> ($filename)\n"; + if (stat($filename)) { + print "Using local copy\n"; + open(FD, $filename); + while() { $cont .= $_; } + close(FD); + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + die "Could not find DTD!"; + } + } elsif ($http_method eq 'GET' and $http_path eq "/conf") { + my $quoted_html_link = $html_link; + $quoted_html_link =~ s/&/&/g; + $quoted_html_link =~ s//>/g; + $quoted_html_link =~ s/'/'/g; + $quoted_html_link =~ s/"/"/g; + print "Configuration requested, returned #$quoted_html_link#\n"; + $cont = "$quoted_html_link"; + my $res = new HTTP::Response; + $res->content($cont); + $c->send_response($res); + } else { + print "INVALID REQUEST!!!!!\n"; + $c->send_error(RC_FORBIDDEN) + } + } + $c->close; + undef($c); + print "\nCONNECTION CLOSED\n\n"; + exit; + } # fork +} + +#================================ + +sub callback +{ + my ($data) = @_; + $cont .= $data; +} diff --git a/helm/interface/isterix b/helm/interface/isterix new file mode 100755 index 000000000..a1f696a3b --- /dev/null +++ b/helm/interface/isterix @@ -0,0 +1,12 @@ +#! /bin/sh + +export PATH=$PATH:/opt/java/jdk118/bin/ + +export CLASSPATH=. +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xalan.jar +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xerces.jar +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/saxon-5.3.2/saxon.jar + +# Per (my)Coq 6.3.0 +export LD_LIBRARY_PATH=/home/lpadovan/helm/usr/lib/:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/lib/gtkmathview:$LD_LIBRARY_PATH diff --git a/helm/interface/javacore15005.txt b/helm/interface/javacore15005.txt new file mode 100644 index 000000000..992096462 --- /dev/null +++ b/helm/interface/javacore15005.txt @@ -0,0 +1,195 @@ +SIGSEGV received at bfffeacc in /home/cadet/sacerdot/jdk118/lib/linux/native_threads/libjitc.so. Processing terminated +java full version "JDK 1.1.8 IBM build l118-19991013 (JIT enabled: jitc)" +args: /home/cadet/sacerdot/jdk118/bin/linux/native_threads/java xaland 12345 12346 examples/style/annotatedcont.xsl examples/style/annotatedpres.xsl examples/style/theory_content.xsl examples/style/theory_pres.xsl + +Operating Environment +--------------------- +Host : cadet. +OS Level : 2.2.14-5.0smp.#1 SMP Tue Mar 7 21:01:40 EST 2000 +glibc Version : 2.1.3 +No. of Procs : 1 +Memory Info: + total: used: free: shared: buffers: cached: +Mem: 64503808 55078912 9424896 36126720 1527808 18075648 +Swap: 133885952 7442432 126443520 +MemTotal: 62992 kB +MemFree: 9204 kB +MemShared: 35280 kB +Buffers: 1492 kB +Cached: 17652 kB +BigTotal: 0 kB +BigFree: 0 kB +SwapTotal: 130748 kB +SwapFree: 123480 kB + +Application Environment +----------------------- +Signal Handlers - + SIGQUIT : ignored + SIGILL : sysThreadIDump (libjava.so) + SIGABRT : sysThreadIDump (libjava.so) + SIGFPE : sysThreadIDump (libjava.so) + SIGBUS : sysThreadIDump (libjava.so) + SIGSEGV : sysThreadIDump (libjava.so) + SIGPIPE : ignored + SIGUSR1 : doSuspendLoop (libjava.so) + +Environment Variables - + LESSOPEN=|/usr/bin/lesspipe.sh %s + SAL_DO_NOT_USE_INVERT50=true + HISTSIZE=1000 + HOSTNAME=cadet + LOGNAME=sacerdot + VISUAL=/usr/bin/emacs + LD_LIBRARY_PATH=/home/cadet/sacerdot/jdk118/lib/linux/native_threads:/usr/local/lib/gtkmathview:/home/pauillac/coq3/sacerdot/rvplayer5.0 + MAIL=/var/spool/mail/sacerdot + PAGER=less + CLASSPATH=.:/usr/share/java/bsf.jar:/usr/share/java/xalan.jar:/usr/share/java/xerces.jar:/home/cadet/sacerdot/jdk118/classes:/home/cadet/sacerdot/jdk118/lib/classes.jar:/home/cadet/sacerdot/jdk118/lib/rt.jar:/home/cadet/sacerdot/jdk118/lib/i18n.jar:/home/cadet/sacerdot/jdk118/lib/classes.zip + LESSCHARDEF=8bcccbcc18b95.33b. + ARCH=i586 + PROMPT=cad: + TERM=xterm + HOSTTYPE=i386 + PATH=/home/cadet/sacerdot/jdk118/bin:/home/pauillac/coq3/sacerdot/bin/i586:/home/pauillac/coq3/sacerdot/bin:/usr/bin/X11:/usr/bin:/usr/local/bin:/usr/ucb:/usr/bin:/bin:/usr/sbin:/sbin:/usr/games:. + PRINTER=hp11rv + HOME=/home/pauillac/coq3/sacerdot + SHELL=/bin/sh + ELANLIB=/home/pauillac/coq3/sacerdot/elan-dist.3.00/elanlib + PILOTPORT=/dev/ttyS1 + TEXINPUTS=:.:/home/pauillac/coq3/sacerdot/lib/latex/inputs:/usr/local/lib/tex/inputs3 + USER=sacerdot + ENSCRIPT=-Php11rvl -2 -r -B -L66 -k -h + MANPATH=/usr/man/preformat:/usr/man:/usr/X11/man:/usr/local/man:/home/pauillac/coq3/sacerdot/man + LESS=-m -e -q -d + JAVA_HOME=/home/cadet/sacerdot/jdk118 + DISPLAY=:0.0 + MAKEFLAGS= + HOST=cadet + OSTYPE=Linux + NNTPSERVER=news-rocq.inria.fr + WINDOWID=54525966 + SHLVL=4 + MAKELEVEL=1 + LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35: + EDITOR=/usr/bin/emacs + MFLAGS= + CVSROOT=/net/pauillac/constr/ARCHIVE + + +Current Thread Details +---------------------- + "main" (TID:0x402e62d8, sys_thread_t:0x804abe0) + Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING + Native Stack Data : base: bffff47c pointer bffbf96c used(260880) free(-13072) + ----- Monitors held ----- + ----- Native stack ----- + + + + + + + + + ?? + ?? + ?? + + java_lang_Compiler_start + + __irem_trap6 + ------ Java stack ------ () prio=5 *current thread* + org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + xaland.main(Compiled Code) +---------------------------------------------------------------------- + + +Total Thread Count: 3 +Active Thread Count: 3 +JNI Thread Count: 0 + +Full thread dump: + "Async Garbage Collector" (TID:0x402e6238, sys_thread_t:0x8091f50) + Native Thread State: ThreadID: 00000803 Reuse: 1 DAEMON MONITOR WAIT + Native Stack Data : base: bf5ffd84 pointer bf5ffb78 used(524) free(247284) + ----- Monitors held ----- + ----- Native stack ----- + sysMonitorWait + sysThreadSleep + threadSleep + SetOrigArgs + sysThread_shell + pthread_detach + __clone + ------ Java stack ------ () prio=1 +---------------------------------------------------------------------- + + "Finalizer thread" (TID:0x402e6288, sys_thread_t:0x8091cd0) + Native Thread State: ThreadID: 00000402 Reuse: 1 DAEMON MONITOR WAIT + Native Stack Data : base: bf7ffd84 pointer bf7ffbec used(408) free(247400) + ----- Monitors held ----- + ----- Native stack ----- + sysMonitorWait - waiting on Finalize me queue lock + finalizeOnExit + sysThread_shell + pthread_detach + __clone + ------ Java stack ------ () prio=1 +---------------------------------------------------------------------- + + "main" (TID:0x402e62d8, sys_thread_t:0x804abe0) + Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING + Native Stack Data : base: bffff47c pointer bffbf960 used(260892) free(-13084) + ----- Monitors held ----- + ----- Native stack ----- + + + + + + + + + ?? + ?? + ?? + + java_lang_Compiler_start + + __irem_trap6 + ------ Java stack ------ () prio=5 *current thread* + org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + xaland.main(Compiled Code) +---------------------------------------------------------------------- + + +System Monitor Status +--------------------- + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + Thread queue lock: unowned. + Name and type hash table lock: unowned. + String intern lock: unowned. + JNI pinning lock: unowned. + JNI global reference lock: unowned. + Zip lock: unowned. + BinClass lock: unowned. + Class loading lock: unowned. + Java stack lock: unowned. + Code rewrite lock: unowned. + Heap Lock: unowned. + Has finalization queue lock: unowned. + Finalize me queue lock: unowned. + Integer lock access-lock: unowned. + Monitor cache lock: unowned. + Monitor registry: unowned. + +Object Monitor Status +--------------------- diff --git a/helm/interface/javacore15021.txt b/helm/interface/javacore15021.txt new file mode 100644 index 000000000..bac0b8a76 --- /dev/null +++ b/helm/interface/javacore15021.txt @@ -0,0 +1,195 @@ +SIGSEGV received at bfffeacc in /home/cadet/sacerdot/jdk118/lib/linux/native_threads/libjitc.so. Processing terminated +java full version "JDK 1.1.8 IBM build l118-19991013 (JIT enabled: jitc)" +args: /home/cadet/sacerdot/jdk118/bin/linux/native_threads/java xaland 12345 12346 examples/style/annotatedcont.xsl examples/style/annotatedpres.xsl examples/style/theory_content.xsl examples/style/theory_pres.xsl + +Operating Environment +--------------------- +Host : cadet. +OS Level : 2.2.14-5.0smp.#1 SMP Tue Mar 7 21:01:40 EST 2000 +glibc Version : 2.1.3 +No. of Procs : 1 +Memory Info: + total: used: free: shared: buffers: cached: +Mem: 64503808 55672832 8830976 36130816 1536000 18612224 +Swap: 133885952 7442432 126443520 +MemTotal: 62992 kB +MemFree: 8624 kB +MemShared: 35284 kB +Buffers: 1500 kB +Cached: 18176 kB +BigTotal: 0 kB +BigFree: 0 kB +SwapTotal: 130748 kB +SwapFree: 123480 kB + +Application Environment +----------------------- +Signal Handlers - + SIGQUIT : ignored + SIGILL : sysThreadIDump (libjava.so) + SIGABRT : sysThreadIDump (libjava.so) + SIGFPE : sysThreadIDump (libjava.so) + SIGBUS : sysThreadIDump (libjava.so) + SIGSEGV : sysThreadIDump (libjava.so) + SIGPIPE : ignored + SIGUSR1 : doSuspendLoop (libjava.so) + +Environment Variables - + LESSOPEN=|/usr/bin/lesspipe.sh %s + SAL_DO_NOT_USE_INVERT50=true + HISTSIZE=1000 + HOSTNAME=cadet + LOGNAME=sacerdot + VISUAL=/usr/bin/emacs + LD_LIBRARY_PATH=/home/cadet/sacerdot/jdk118/lib/linux/native_threads:/usr/local/lib/gtkmathview:/home/pauillac/coq3/sacerdot/rvplayer5.0 + MAIL=/var/spool/mail/sacerdot + PAGER=less + CLASSPATH=.:/usr/share/java/bsf.jar:/usr/share/java/xalan.jar:/usr/share/java/xerces.jar:/home/cadet/sacerdot/jdk118/classes:/home/cadet/sacerdot/jdk118/lib/classes.jar:/home/cadet/sacerdot/jdk118/lib/rt.jar:/home/cadet/sacerdot/jdk118/lib/i18n.jar:/home/cadet/sacerdot/jdk118/lib/classes.zip + LESSCHARDEF=8bcccbcc18b95.33b. + ARCH=i586 + PROMPT=cad: + TERM=xterm + HOSTTYPE=i386 + PATH=/home/cadet/sacerdot/jdk118/bin:/home/pauillac/coq3/sacerdot/bin/i586:/home/pauillac/coq3/sacerdot/bin:/usr/bin/X11:/usr/bin:/usr/local/bin:/usr/ucb:/usr/bin:/bin:/usr/sbin:/sbin:/usr/games:. + PRINTER=hp11rv + HOME=/home/pauillac/coq3/sacerdot + SHELL=/bin/sh + ELANLIB=/home/pauillac/coq3/sacerdot/elan-dist.3.00/elanlib + PILOTPORT=/dev/ttyS1 + TEXINPUTS=:.:/home/pauillac/coq3/sacerdot/lib/latex/inputs:/usr/local/lib/tex/inputs3 + USER=sacerdot + ENSCRIPT=-Php11rvl -2 -r -B -L66 -k -h + MANPATH=/usr/man/preformat:/usr/man:/usr/X11/man:/usr/local/man:/home/pauillac/coq3/sacerdot/man + LESS=-m -e -q -d + JAVA_HOME=/home/cadet/sacerdot/jdk118 + DISPLAY=:0.0 + MAKEFLAGS= + HOST=cadet + OSTYPE=Linux + NNTPSERVER=news-rocq.inria.fr + WINDOWID=54525966 + SHLVL=4 + MAKELEVEL=1 + LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35: + EDITOR=/usr/bin/emacs + MFLAGS= + CVSROOT=/net/pauillac/constr/ARCHIVE + + +Current Thread Details +---------------------- + "main" (TID:0x402e62d8, sys_thread_t:0x804abe0) + Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING + Native Stack Data : base: bffff47c pointer bffbf96c used(260880) free(-13072) + ----- Monitors held ----- + ----- Native stack ----- + + + + + + + + + ?? + ?? + ?? + + java_lang_Compiler_start + + __irem_trap6 + ------ Java stack ------ () prio=5 *current thread* + org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + xaland.main(Compiled Code) +---------------------------------------------------------------------- + + +Total Thread Count: 3 +Active Thread Count: 3 +JNI Thread Count: 0 + +Full thread dump: + "Async Garbage Collector" (TID:0x402e6238, sys_thread_t:0x8091f50) + Native Thread State: ThreadID: 00000803 Reuse: 1 DAEMON MONITOR WAIT + Native Stack Data : base: bf5ffd84 pointer bf5ffb78 used(524) free(247284) + ----- Monitors held ----- + ----- Native stack ----- + sysMonitorWait + sysThreadSleep + threadSleep + SetOrigArgs + sysThread_shell + pthread_detach + __clone + ------ Java stack ------ () prio=1 +---------------------------------------------------------------------- + + "Finalizer thread" (TID:0x402e6288, sys_thread_t:0x8091cd0) + Native Thread State: ThreadID: 00000402 Reuse: 1 DAEMON MONITOR WAIT + Native Stack Data : base: bf7ffd84 pointer bf7ffbec used(408) free(247400) + ----- Monitors held ----- + ----- Native stack ----- + sysMonitorWait - waiting on Finalize me queue lock + finalizeOnExit + sysThread_shell + pthread_detach + __clone + ------ Java stack ------ () prio=1 +---------------------------------------------------------------------- + + "main" (TID:0x402e62d8, sys_thread_t:0x804abe0) + Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING + Native Stack Data : base: bffff47c pointer bffbf960 used(260892) free(-13084) + ----- Monitors held ----- + ----- Native stack ----- + + + + + + + + + ?? + ?? + ?? + + java_lang_Compiler_start + + __irem_trap6 + ------ Java stack ------ () prio=5 *current thread* + org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code) + xaland.main(Compiled Code) +---------------------------------------------------------------------- + + +System Monitor Status +--------------------- + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + JIT monitor: unowned. + Thread queue lock: unowned. + Name and type hash table lock: unowned. + String intern lock: unowned. + JNI pinning lock: unowned. + JNI global reference lock: unowned. + Zip lock: unowned. + BinClass lock: unowned. + Class loading lock: unowned. + Java stack lock: unowned. + Code rewrite lock: unowned. + Heap Lock: unowned. + Has finalization queue lock: unowned. + Finalize me queue lock: unowned. + Integer lock access-lock: unowned. + Monitor cache lock: unowned. + Monitor registry: unowned. + +Object Monitor Status +--------------------- diff --git a/helm/interface/latinize.pl b/helm/interface/latinize.pl new file mode 100755 index 000000000..7fa678736 --- /dev/null +++ b/helm/interface/latinize.pl @@ -0,0 +1,10 @@ +#!/usr/bin/perl + +while() +{ + s/→/->/g; + s/⇒/=>/g; + s/λ/\\/g; + s/Π/||/g; + print; +} diff --git a/helm/interface/mkindex.sh b/helm/interface/mkindex.sh new file mode 100755 index 000000000..b47864fae --- /dev/null +++ b/helm/interface/mkindex.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo `find . -name "*.xml"` | /really_very_local/helm/PARSER/coq_like_pretty_printer/uris_of_filenames.pl > index.txt diff --git a/helm/interface/mml.dtd b/helm/interface/mml.dtd new file mode 100644 index 000000000..10ce5cb5d --- /dev/null +++ b/helm/interface/mml.dtd @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/interface/mml.ml b/helm/interface/mml.ml new file mode 100644 index 000000000..88c281350 --- /dev/null +++ b/helm/interface/mml.ml @@ -0,0 +1,11 @@ +type expr = + Null + | Mi of string + | Mo of string + | Mn of string + | Mtext of string + | Mrow of expr list + | Mfenced of string * string * string * expr list (* open, close, separators *) +type fragment = + Math of expr list +;; diff --git a/helm/interface/mmlinterface.ml b/helm/interface/mmlinterface.ml new file mode 100755 index 000000000..76f6e5a78 --- /dev/null +++ b/helm/interface/mmlinterface.ml @@ -0,0 +1,653 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 24/01/2000 *) +(* *) +(* This is a simple gtk interface to the Coq-like pretty printer cicPp for *) +(* cic terms exported in xml. It uses directly the modules cicPp and *) +(* cicCcache and indirectly all the other modules (cicParser, cicParser2, *) +(* cicParser3, getter). *) +(* The syntax is "gtkInterface[.opt] filename1 ... filenamen" where *) +(* filenamei is the path-name of an xml file describing a cic term. *) +(* The terms are loaded in cache and then pretty-printed one at a time and *) +(* only once, when the user wants to look at it: if the user wants to look at *) +(* a term again, then the pretty-printed term is showed again, but not *) +(* recomputed *) +(* *) +(******************************************************************************) + +(* DEFINITION OF THE URI TREE AND USEFUL FUNCTIONS ON IT *) + +type item = + Dir of string * item list ref + | File of string * UriManager.uri +;; + +let uritree = ref [] +let theoryuritree = ref [] + +let get_name = + function + Dir (name,_) -> name + | File (name,_) -> name +;; + +let get_uri = + function + Dir _ -> None + | File (_,uri) -> Some uri +;; + +(* STUFF TO BUILD THE URI TREE *) + +exception EmptyUri +exception DuplicatedUri +exception ConflictingUris + +let insert_in_uri_tree uri = + let rec aux l = + function + [name] -> + (try + let _ = List.find (fun item -> name = get_name item) !l in + raise DuplicatedUri + with + Not_found -> l := (File (name,uri))::!l + ) + | name::tl -> + (try + match List.find (fun item -> name = get_name item) !l with + Dir (_,children) -> aux children tl + | File _ -> raise ConflictingUris + with + Not_found -> + let children = ref [] in + l := (Dir (name,children))::!l ; + aux children tl + ) + | [] -> raise EmptyUri + in + aux +;; + +(* Imperative procedure that builds the two uri trees *) +let build_uri_tree () = + let dbh = Dbm.opendbm Configuration.uris_dbm [Dbm.Dbm_rdonly] 0 in + Dbm.iter + (fun uri _ -> + let cicregexp = Str.regexp "cic:" + and theoryregexp = Str.regexp "theory:" in + if Str.string_match cicregexp uri 0 then + let s = Str.replace_first cicregexp "" uri in + let l = Str.split (Str.regexp "/") s in + insert_in_uri_tree (UriManager.uri_of_string uri) uritree l + else if Str.string_match theoryregexp uri 0 then + let s = Str.replace_first theoryregexp "" uri in + let l = Str.split (Str.regexp "/") s in + insert_in_uri_tree (UriManager.uri_of_string uri) theoryuritree l + ) dbh ; + Dbm.close dbh +;; + +(* GLOBAL REFERENCES (USED BY CALLBACKS) *) + +let annotated_obj = ref None;; (* reference to a couple option where *) + (* the first component is the current *) + (* annotated object and the second is *) + (* the map from ids to annotated targets *) +let ann = ref (ref None);; (* current annotation *) +let radio_some_status = ref false;; (* is the radio_some button selected? *) + +let theory_visited_uris = ref [];; +let theory_to_visit_uris = ref [];; +let visited_uris = ref [];; +let to_visit_uris = ref [];; + +(* CALLBACKS *) + +exception NoCurrentUri;; +exception NoNextOrPrevUri;; +exception GtkInterfaceInternalError;; + +let theory_get_current_uri () = + match !theory_visited_uris with + [] -> raise NoCurrentUri + | uri::_ -> uri +;; + +let get_current_uri () = + match !visited_uris with + [] -> raise NoCurrentUri + | uri::_ -> uri +;; + +let get_annotated_obj () = + match !annotated_obj with + None -> + let (annobj, ids_to_targets,_) = + (CicCache.get_annobj (get_current_uri ())) + in + annotated_obj := Some (annobj, ids_to_targets) ; + (annobj, ids_to_targets) + | Some annobj -> annobj +;; + +let filename_of_uri uri = + Getter.get uri +;; + +let theory_update_output rendering_window uri = + rendering_window#label#set_text (UriManager.string_of_uri uri) ; + ignore (rendering_window#errors#delete_text 0 rendering_window#errors#length) ; + let mmlfile = XsltProcessor.process uri true "theory" in + rendering_window#output#load mmlfile +;; + +let update_output rendering_window uri = + rendering_window#label#set_text (UriManager.string_of_uri uri) ; + ignore (rendering_window#errors#delete_text 0 rendering_window#errors#length) ; + let mmlfile = XsltProcessor.process uri true "cic" in + rendering_window#output#load mmlfile +;; + +let theory_next rendering_window () = + match !theory_to_visit_uris with + [] -> raise NoNextOrPrevUri + | uri::tl -> + theory_to_visit_uris := tl ; + theory_visited_uris := uri::!theory_visited_uris ; + theory_update_output rendering_window uri ; + rendering_window#prevb#misc#set_sensitive true ; + if tl = [] then + rendering_window#nextb#misc#set_sensitive false +;; + +let next rendering_window () = + match !to_visit_uris with + [] -> raise NoNextOrPrevUri + | uri::tl -> + to_visit_uris := tl ; + visited_uris := uri::!visited_uris ; + annotated_obj := None ; + update_output rendering_window uri ; + rendering_window#prevb#misc#set_sensitive true ; + if tl = [] then + rendering_window#nextb#misc#set_sensitive false +;; + +let theory_prev rendering_window () = + match !theory_visited_uris with + [] -> raise NoCurrentUri + | [_] -> raise NoNextOrPrevUri + | uri::(uri'::tl as newvu) -> + theory_visited_uris := newvu ; + theory_to_visit_uris := uri::!theory_to_visit_uris ; + theory_update_output rendering_window uri' ; + rendering_window#nextb#misc#set_sensitive true ; + if tl = [] then + rendering_window#prevb#misc#set_sensitive false +;; + +let prev rendering_window () = + match !visited_uris with + [] -> raise NoCurrentUri + | [_] -> raise NoNextOrPrevUri + | uri::(uri'::tl as newvu) -> + visited_uris := newvu ; + to_visit_uris := uri::!to_visit_uris ; + annotated_obj := None ; + update_output rendering_window uri' ; + rendering_window#nextb#misc#set_sensitive true ; + if tl = [] then + rendering_window#prevb#misc#set_sensitive false +;; + +(* called when an hyperlink is clicked *) +let jump rendering_window s = + let uri = UriManager.uri_of_string s in + rendering_window#show () ; + rendering_window#prevb#misc#set_sensitive true ; + rendering_window#nextb#misc#set_sensitive false ; + visited_uris := uri::!visited_uris ; + to_visit_uris := [] ; + annotated_obj := None ; + update_output rendering_window uri +;; + +let changefont rendering_window () = + rendering_window#output#set_font_size rendering_window#spinb#value_as_int +;; + + +let theory_selection_changed rendering_window uri () = + match uri with + None -> () + | Some uri' -> + if !theory_visited_uris <> [] then + rendering_window#prevb#misc#set_sensitive true ; + rendering_window#nextb#misc#set_sensitive false ; + theory_visited_uris := uri'::!theory_visited_uris ; + theory_to_visit_uris := [] ; + rendering_window#show () ; + theory_update_output rendering_window uri' +;; + +let selection_changed rendering_window uri () = + match uri with + None -> () + | Some uri' -> + if !visited_uris <> [] then + rendering_window#prevb#misc#set_sensitive true ; + rendering_window#nextb#misc#set_sensitive false ; + visited_uris := uri'::!visited_uris ; + to_visit_uris := [] ; + annotated_obj := None ; + rendering_window#show () ; + update_output rendering_window uri' +;; + +(* CSC: unificare con la creazione la prima volta *) +let rec updateb_pressed theory_rendering_window rendering_window + (sw1, sw ,(hbox : GPack.box)) mktree () += + Getter.update () ; + (* let's empty the uri trees and rebuild them *) + uritree := [] ; + theoryuritree := [] ; + build_uri_tree () ; + hbox#remove !sw1#coerce ; + hbox#remove !sw#coerce ; + + let sw3 = + GBin.scrolled_window ~width:250 ~height:600 + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let tree1 = + GTree.tree ~selection_mode:`BROWSE ~packing:sw3#add_with_viewport () in + let tree_item1 = GTree.tree_item ~label:"theory:/" ~packing:tree1#append () in + sw1 := sw3 ; + ignore(tree_item1#connect#select + (theory_selection_changed theory_rendering_window None)) ; + mktree theory_selection_changed theory_rendering_window tree_item1 + (Dir ("theory:/",theoryuritree)) ; + + let sw2 = + GBin.scrolled_window ~width:250 ~height:600 + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let tree = + GTree.tree ~selection_mode:`BROWSE ~packing:sw2#add_with_viewport () in + let tree_item = GTree.tree_item ~label:"cic:/" ~packing:tree#append () in + sw := sw2 ; + ignore(tree_item#connect#select (selection_changed rendering_window None)) ; + mktree selection_changed rendering_window tree_item (Dir ("cic:/",uritree)) +;; + +let theory_check rendering_window () = + let output = + try + TheoryTypeChecker.typecheck (theory_get_current_uri ()); + "Type Checking was successful" + with + TheoryTypeChecker.NotWellTyped s -> + "Type Checking was NOT successful:\n\t" ^ s + in + (* next "cast" can't got rid of, but I don't know why *) + let errors = (rendering_window#errors : GEdit.text) in + let _ = errors#delete_text 0 errors#length in + errors#insert output +;; + +let check rendering_window () = + let output = + try + CicTypeChecker.typecheck (get_current_uri ()); + "Type Checking was successful" + with + CicTypeChecker.NotWellTyped s -> "Type Checking was NOT successful:\n\t" ^ s + in + (* next "cast" can't got rid of, but I don't know why *) + let errors = (rendering_window#errors : GEdit.text) in + let _ = errors#delete_text 0 errors#length in + errors#insert output +;; + +let annotateb_pressed rendering_window annotation_window () = + let xpath = (rendering_window#output#get_selection : string option) in + match xpath with + None -> (rendering_window#errors : GEdit.text)#insert "\nNo selection!\n" + | Some xpath -> + try + let annobj = get_annotated_obj () + (* next "cast" can't got rid of, but I don't know why *) + and annotation = (annotation_window#annotation : GEdit.text) in + ann := CicXPath.get_annotation annobj xpath ; + CicAnnotationHinter.create_hints annotation_window annobj xpath ; + annotation#delete_text 0 annotation#length ; + begin + match !(!ann) with + None -> + annotation#misc#set_sensitive false ; + annotation_window#radio_none#set_active true ; + radio_some_status := false + | Some ann' -> + annotation#insert ann' ; + annotation#misc#set_sensitive true ; + annotation_window#radio_some#set_active true ; + radio_some_status := true + end ; + GMain.Grab.add (annotation_window#window_to_annotate#coerce) ; + annotation_window#show () ; + with + e -> + (* next "cast" can't got rid of, but I don't know why *) + let errors = (rendering_window#errors : GEdit.text) in + errors#insert ("\n" ^ Printexc.to_string e ^ "\n") +;; + +(* called when the annotation is confirmed *) +let save_annotation annotation = + if !radio_some_status then + !ann := Some (annotation#get_chars 0 annotation#length) + else + !ann := None ; + match !annotated_obj with + None -> raise GtkInterfaceInternalError + | Some (annobj,_) -> + let uri = get_current_uri () in + let annxml = Annotation2Xml.pp_annotation annobj uri in + Xml.pp annxml (Some (fst (Getter.get_ann_file_name_and_uri uri))) +;; + +let parse_no_cache uri = + let module U = UriManager in + XsltProcessor.process uri false "cic" +;; + + +(* STUFF TO BUILD THE GTK INTERFACE *) + +(* Stuff to build the tree window *) + +(* selection_changed is actually selection_changed or theory_selection_changed*) +let mktree selection_changed rendering_window = + let rec aux treeitem = + function + Dir (dirname, content) -> + let subtree = GTree.tree () in + treeitem#set_subtree subtree ; + List.iter + (fun ti -> + let label = get_name ti + and uri = get_uri ti in + let treeitem2 = GTree.tree_item ~label:label () in + subtree#append treeitem2 ; + ignore(treeitem2#connect#select + (selection_changed rendering_window uri)) ; + aux treeitem2 ti + ) !content + | _ -> () + in + aux +;; + +class annotation_window output label = + let window_to_annotate = + GWindow.window ~title:"Annotating environment" ~border_width:2 () in + let hbox1 = + GPack.hbox ~packing:window_to_annotate#add () in + let vbox1 = + GPack.vbox ~packing:(hbox1#pack ~padding:5) () in + let hbox2 = + GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in + let radio_some = GButton.radio_button ~label:"Annotation below" + ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in + let radio_none = GButton.radio_button ~label:"No annotation" + ~group:radio_some#group + ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) + ~active:true () in + let annotation = GEdit.text ~editable:true ~width:400 ~height:180 + ~packing:(vbox1#pack ~padding:5) () in + let table = + GPack.table ~rows:3 ~columns:3 ~packing:(vbox1#pack ~padding:5) () in + let annotation_hints = + Array.init 9 + (function i -> + GButton.button ~label:("Hint " ^ string_of_int i) + ~packing:(table#attach ~left:(i mod 3) ~top:(i / 3)) () + ) in + let vbox2 = + GPack.vbox ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in + let confirmb = + GButton.button ~label:"O.K." + ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in + let abortb = + GButton.button ~label:"Abort" + ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in +object (self) + method window_to_annotate = window_to_annotate + method annotation = annotation + method radio_some = radio_some + method radio_none = radio_none + method annotation_hints = annotation_hints + method output = (output : GMathView.math_view) + method show () = window_to_annotate#show () + initializer + (* signal handlers here *) + ignore (window_to_annotate#event#connect#delete + (fun _ -> + window_to_annotate#misc#hide () ; + GMain.Grab.remove (window_to_annotate#coerce) ; + true + )) ; + ignore (confirmb#connect#clicked + (fun () -> + window_to_annotate#misc#hide () ; + save_annotation annotation ; + GMain.Grab.remove (window_to_annotate#coerce) ; + let new_current_uri = + (snd (Getter.get_ann_file_name_and_uri (get_current_uri ()))) + in + visited_uris := new_current_uri::(List.tl !visited_uris) ; + label#set_text (UriManager.string_of_uri new_current_uri) ; + output#load (parse_no_cache new_current_uri) + )) ; + ignore (abortb#connect#clicked + (fun () -> + window_to_annotate#misc#hide () ; + GMain.Grab.remove (window_to_annotate#coerce) + )); + ignore (radio_some#connect#clicked + (fun () -> annotation#misc#set_sensitive true ; radio_some_status := true)) ; + ignore (radio_none #connect#clicked + (fun () -> + annotation#misc#set_sensitive false; + radio_some_status := false) + ) +end;; + +class rendering_window annotation_window output (label : GMisc.label) = + let window = + GWindow.window ~title:"MathML viewer" ~border_width:2 () in + let vbox = + GPack.vbox ~packing:window#add () in + let _ = vbox#pack ~expand:false ~fill:false ~padding:5 label#coerce in + let paned = + GPack.paned `HORIZONTAL ~packing:(vbox#pack ~padding:5) () in + let scrolled_window0 = + GBin.scrolled_window ~border_width:10 ~packing:paned#add1 () in + let _ = scrolled_window0#add output#coerce in + let scrolled_window = + GBin.scrolled_window + ~border_width:10 ~packing:paned#add2 ~width:240 ~height:100 () in + let errors = GEdit.text ~packing:scrolled_window#add_with_viewport () in + let hbox = + GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in + let prevb = + GButton.button ~label:"Prev" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let nextb = + GButton.button ~label:"Next" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let checkb = + GButton.button ~label:"Check" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let annotateb = + GButton.button ~label:"Annotate" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let spinb = + let sadj = + GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 () + in + GEdit.spin_button + ~adjustment:sadj ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) + () in + let closeb = + GButton.button ~label:"Close" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in +object(self) + method nextb = nextb + method prevb = prevb + method label = label + method spinb = spinb + method output = (output : GMathView.math_view) + method errors = errors + method show () = window#show () + initializer + nextb#misc#set_sensitive false ; + prevb#misc#set_sensitive false ; + + (* signal handlers here *) + ignore(output#connect#jump (jump self)) ; + ignore(nextb#connect#clicked (next self)) ; + ignore(prevb#connect#clicked (prev self)) ; + ignore(checkb#connect#clicked (check self)) ; + ignore(spinb#connect#changed (changefont self)) ; + ignore(closeb#connect#clicked window#misc#hide) ; + ignore(annotateb#connect#clicked (annotateb_pressed self annotation_window)) ; + ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true )) +end;; + +class theory_rendering_window rendering_window = + let window = + GWindow.window ~title:"MathML theory viewer" ~border_width:2 () in + let vbox = + GPack.vbox ~packing:window#add () in + let label = + GMisc.label ~text:"???" + ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in + let paned = + GPack.paned `HORIZONTAL ~packing:(vbox#pack ~padding:5) () in + let scrolled_window0 = + GBin.scrolled_window ~border_width:10 ~packing:paned#add1 () in + let output = + GMathView.math_view ~width:400 ~height:380 ~packing:scrolled_window0#add () in + let scrolled_window = + GBin.scrolled_window + ~border_width:10 ~packing:paned#add2 ~width:240 ~height:100 () in + let errors = GEdit.text ~packing:scrolled_window#add_with_viewport () in + let hbox = + GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in + let prevb = + GButton.button ~label:"Prev" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let nextb = + GButton.button ~label:"Next" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let checkb = + GButton.button ~label:"Check" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let spinb = + let sadj = + GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 () + in + GEdit.spin_button + ~adjustment:sadj ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) + () in + let closeb = + GButton.button ~label:"Close" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in +object(self) + method nextb = nextb + method prevb = prevb + method label = label + method output = (output : GMathView.math_view) + method errors = errors + method spinb = spinb + method show () = window#show () + initializer + nextb#misc#set_sensitive false ; + prevb#misc#set_sensitive false ; + + (* signal handlers here *) + ignore(output#connect#jump (jump rendering_window)) ; + ignore(nextb#connect#clicked (theory_next self)) ; + ignore(prevb#connect#clicked (theory_prev self)) ; + ignore(checkb#connect#clicked (theory_check self)) ; + ignore(spinb#connect#changed (changefont self)) ; + ignore(closeb#connect#clicked window#misc#hide) ; + ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true )) +end;; + +(* CSC: fare in modo che i due alberi vengano svuotati invece che distrutti *) +class selection_window theory_rendering_window rendering_window = + let label = "cic:/" in + let theorylabel = "theory:/" in + let win = GWindow.window ~title:"Known uris" ~border_width:2 () in + let vbox = GPack.vbox ~packing:win#add () in + let hbox1 = GPack.hbox ~packing:(vbox#pack ~padding:5) () in + let sw1 = GBin.scrolled_window ~width:250 ~height:600 + ~packing:(hbox1#pack ~padding:5) () in + let tree1 = + GTree.tree ~selection_mode:`BROWSE ~packing:sw1#add_with_viewport () in + let tree_item1 = + GTree.tree_item ~label:theorylabel ~packing:tree1#append () in + let sw = GBin.scrolled_window ~width:250 ~height:600 + ~packing:(hbox1#pack ~padding:5) () in + let tree = + GTree.tree ~selection_mode:`BROWSE ~packing:sw#add_with_viewport () in + let tree_item = + GTree.tree_item ~label:label ~packing:tree#append () in + let hbox = + GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in + let updateb = + GButton.button ~label:"Update" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in + let quitb = + GButton.button ~label:"Quit" + ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in +object (self) + method show () = win#show () + initializer + mktree theory_selection_changed theory_rendering_window tree_item1 + (Dir ("theory:/",theoryuritree)); + mktree selection_changed rendering_window tree_item + (Dir ("cic:/",uritree)); + + (* signal handlers here *) + ignore (tree_item1#connect#select + ~callback:(theory_selection_changed theory_rendering_window None)) ; + ignore (tree_item#connect#select + ~callback:(selection_changed rendering_window None)) ; + ignore (win#connect#destroy ~callback:GMain.Main.quit) ; + ignore (quitb#connect#clicked GMain.Main.quit) ; + ignore(updateb#connect#clicked (updateb_pressed + theory_rendering_window rendering_window (ref sw1, ref sw, hbox1) mktree)) +end;; + + +(* MAIN *) + +let _ = + build_uri_tree () ; + let output = GMathView.math_view ~width:400 ~height:380 () + and label = GMisc.label ~text:"???" () in + let annotation_window = new annotation_window output label in + let rendering_window = new rendering_window annotation_window output label in + let theory_rendering_window = new theory_rendering_window rendering_window in + let selection_window = + new selection_window theory_rendering_window rendering_window + in + selection_window#show () ; + GMain.Main.main () +;; diff --git a/helm/interface/mmlinterface.opt.saved b/helm/interface/mmlinterface.opt.saved new file mode 100755 index 0000000000000000000000000000000000000000..cb5708ade98cabec4953fa1f6944bec5afcf017c GIT binary patch literal 2002374 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%0DQhnOh&9 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%0Df?} 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

8{-pN$`00a`CJkw4mHxLepj6&4D`z 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 literal 0 HcmV?d00001 diff --git a/helm/interface/pxpUriResolver.ml b/helm/interface/pxpUriResolver.ml new file mode 100644 index 000000000..b5b37f398 --- /dev/null +++ b/helm/interface/pxpUriResolver.ml @@ -0,0 +1,101 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 11/10/2000 *) +(* *) +(* *) +(******************************************************************************) + +let resolve = + function + "http://localhost:8081/getdtd?url=cic.dtd" -> + "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/cic.dtd" + | "http://localhost:8081/getdtd?url=maththeory.dtd" -> + "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/maththeory.dtd" + | "http://localhost:8081/getdtd?url=annotations.dtd" -> + "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/annotations.dtd" + | s -> s +;; + +let url_syntax = + let enable_if = + function + `Not_recognized -> Neturl.Url_part_not_recognized + | `Allowed -> Neturl.Url_part_allowed + | `Required -> Neturl.Url_part_required + in + { Neturl.null_url_syntax with + Neturl.url_enable_scheme = enable_if `Allowed; + Neturl.url_enable_host = enable_if `Allowed; + Neturl.url_enable_path = Neturl.Url_part_required; + Neturl.url_accepts_8bits = true; + } +;; + +let file_url_of_id xid = + let file_url_of_sysname sysname = + (* By convention, we can assume that sysname is a URL conforming + * to RFC 1738 with the exception that it may contain non-ASCII + * UTF-8 characters. + *) + try + Neturl.url_of_string url_syntax sysname + (* may raise Malformed_URL *) + with + Neturl.Malformed_URL -> raise Pxp_reader.Not_competent + in + let url = + match xid with + Pxp_types.Anonymous -> raise Pxp_reader.Not_competent + | Pxp_types.Public (_,sysname) -> + let sysname = resolve sysname in + if sysname <> "" then file_url_of_sysname sysname + else raise Pxp_reader.Not_competent + | Pxp_types.System sysname -> + let sysname = resolve sysname in + file_url_of_sysname sysname + in + let scheme = + try Neturl.url_scheme url with Not_found -> "file" in + let host = + try Neturl.url_host url with Not_found -> "" in + + if scheme <> "file" then raise Pxp_reader.Not_competent; + if host <> "" && host <> "localhost" then raise Pxp_reader.Not_competent; + + url +;; + +let from_file ?system_encoding utf8_filename = + + let r = + new Pxp_reader.resolve_as_file + ?system_encoding:system_encoding + ~url_of_id:file_url_of_id + () + in + + let utf8_abs_filename = + if utf8_filename <> "" && utf8_filename.[0] = '/' then + utf8_filename + else + Sys.getcwd() ^ "/" ^ utf8_filename + in + + let syntax = { Neturl.ip_url_syntax with Neturl.url_accepts_8bits = true } in + let url = Neturl.make_url + ~scheme:"file" + ~host:"localhost" + ~path:(Neturl.split_path utf8_abs_filename) + syntax + in + + let xid = Pxp_types.System (Neturl.string_of_url url) in + + + Pxp_yacc.ExtID(xid, r) +;; + + diff --git a/helm/interface/reduction.ml b/helm/interface/reduction.ml new file mode 100644 index 000000000..8acb8eb94 --- /dev/null +++ b/helm/interface/reduction.ml @@ -0,0 +1,70 @@ +let read_from_stdin = ref false;; +let uris_in_input = ref false;; +let reduction_only = ref false;; + +let parse uri = + print_endline ("^^^" ^ uri ^ "^^^") ; + print_string (CicPp.ppobj (CicCache.get_obj (UriManager.uri_of_string uri))) ; + print_endline ("\n$$$" ^ uri ^ "$$$\n") +;; + +let uri_of_filename fn = + if !uris_in_input then fn + else + let uri = + Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn + in + let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in + uri' +;; + +(* filenames are read from command line and converted to uris via *) +(* uri_of_filenames; then the cic terms are load in cache via *) +(* CicCache.get_obj and then pretty printed via CicPp.ppobj *) + +exception NotADefinition;; + +let main () = + let files = ref [] in + Arg.parse + ["-stdin", Arg.Set read_from_stdin, "Read from stdin" ; + "-uris", Arg.Set uris_in_input, "Read uris, not filenames" ; + "-update", Arg.Unit Getter.update, "Update the getter view of the world" ; + "-reduction", Arg.Set reduction_only, "Do reduction instead of tyepchecking"] + (fun x -> files := (uri_of_filename x) :: !files) + " +usage: experiment file ... + +List of options:"; + if !read_from_stdin then + begin + try + while true do + let l = Str.split (Str.regexp " ") (read_line ()) in + List.iter (fun x -> files := (uri_of_filename x) :: !files) l + done + with + End_of_file -> () + end ; + files := List.rev !files; + List.iter + (function x -> + print_string x ; + flush stdout ; + (try + if !reduction_only then + match CicCache.get_obj (UriManager.uri_of_string x) with + Cic.Definition (_,bo,_,_) -> + CicTypeChecker.typecheck (UriManager.uri_of_string x) ; + ignore (CicReduction.whd bo) + | _ -> raise NotADefinition + else + CicTypeChecker.typecheck (UriManager.uri_of_string x) + with + e -> print_newline () ; flush stdout ; raise e ) ; + print_endline " OK!" ; + flush stdout + ) !files +;; + +main ();; diff --git a/helm/interface/servers.txt b/helm/interface/servers.txt new file mode 100644 index 000000000..b91a71522 --- /dev/null +++ b/helm/interface/servers.txt @@ -0,0 +1,2 @@ +http://caristudenti.students.cs.unibo.it/~sacerdot/helm +http://pagadebit.students.cs.unibo.it/really_very_local/helm/PARSER/examples diff --git a/helm/interface/servers.txt.example b/helm/interface/servers.txt.example new file mode 100644 index 000000000..0a1221dde --- /dev/null +++ b/helm/interface/servers.txt.example @@ -0,0 +1,2 @@ +http://rigoletto.casamia.csc/helm1/coq +http://rigoletto.casamia.csc/helm2/coq diff --git a/helm/interface/servers.txt.universita b/helm/interface/servers.txt.universita new file mode 100755 index 000000000..c24a58cad --- /dev/null +++ b/helm/interface/servers.txt.universita @@ -0,0 +1,2 @@ +http://phd.cs.unibo.it/helm/PARSER/examples +http://caristudenti.students.cs.unibo.it/~sacerdot/helm diff --git a/helm/interface/theory.ml b/helm/interface/theory.ml new file mode 100644 index 000000000..be5b288b3 --- /dev/null +++ b/helm/interface/theory.ml @@ -0,0 +1,9 @@ +type theory_elem = + Theorem of string (* uri *) + | Definition of string (* uri *) + | Axiom of string (* uri *) + | Variable of string (* uri *) + | Section of string * theory_elem list (* uri, subtheory *) +and theory = + string * theory_elem list (* uri, subtheory *) +;; diff --git a/helm/interface/theoryCache.ml b/helm/interface/theoryCache.ml new file mode 100644 index 000000000..47a8646b5 --- /dev/null +++ b/helm/interface/theoryCache.ml @@ -0,0 +1,32 @@ +type check_status = Checked | Unchecked;; + +let hashtable = Hashtbl.create 17;; + +let get_term_and_type_checking_info uri = + try + Hashtbl.find hashtable uri + with + Not_found -> + let filename = Getter.get uri in + let term = TheoryParser.theory_of_xml filename in + Hashtbl.add hashtable uri (term, Unchecked) ; + (term, Unchecked) +;; + + +let get_theory uri = + fst (get_term_and_type_checking_info uri) +;; + +let is_type_checked uri = + match snd (get_term_and_type_checking_info uri) with + Checked -> true + | Unchecked -> false +;; + +let set_type_checking_info uri = + match Hashtbl.find hashtable uri with + (term, _) -> + Hashtbl.remove hashtable uri ; + Hashtbl.add hashtable uri (term, Checked) +;; diff --git a/helm/interface/theoryParser.ml b/helm/interface/theoryParser.ml new file mode 100644 index 000000000..abc352807 --- /dev/null +++ b/helm/interface/theoryParser.ml @@ -0,0 +1,29 @@ +exception Warnings;; + +class warner = + object + method warn w = + print_endline ("WARNING: " ^ w) ; + (raise Warnings : unit) + end +;; + +exception EmptyUri;; + +let theory_of_xml filename = + let module Y = Pxp_yacc in + try + let d = + let config = {Y.default_config with Y.warner = new warner} in + Y.parse_document_entity config +(*PXP (Y.ExtID (Pxp_types.System filename, + new Pxp_reader.resolve_as_file ~url_of_id ())) +*) (PxpUriResolver.from_file filename) + Y.default_spec + in + TheoryParser2.get_theory d#root + with + e -> + print_endline (Pxp_types.string_of_exn e) ; + raise e +;; diff --git a/helm/interface/theoryParser2.ml b/helm/interface/theoryParser2.ml new file mode 100644 index 000000000..666b024fc --- /dev/null +++ b/helm/interface/theoryParser2.ml @@ -0,0 +1,41 @@ +exception IllFormedXml of int;; + +(* Utility functions that transform a Pxp attribute into something useful *) + +let string_of_attr a = + let module T = Pxp_types in + match a with + T.Value s -> s + | _ -> raise (IllFormedXml 0) + +let get_theory n = + let module D = Pxp_document in + let module T = Theory in + let rec get_theory_elem n = + let ntype = n # node_type in + match ntype with + D.T_element "THEOREM" -> + let uri = string_of_attr (n # attribute "uri") in + T.Theorem uri + | D.T_element "DEFINITION" -> + let uri = string_of_attr (n # attribute "uri") in + T.Definition uri + | D.T_element "AXIOM" -> + let uri = string_of_attr (n # attribute "uri") in + T.Axiom uri + | D.T_element "VARIABLE" -> + let uri = string_of_attr (n # attribute "uri") in + T.Variable uri + | D.T_element "SECTION" -> + let uri = string_of_attr (n # attribute "uri") + and subtheory = List.map get_theory_elem (n # sub_nodes) in + T.Section (uri, subtheory) + | D.T_element _ | D.T_data | _ -> + raise (IllFormedXml 1) + in + match n # node_type with + D.T_element "Theory" -> + let uri = string_of_attr (n # attribute "uri") in + (uri, List.map get_theory_elem (n # sub_nodes)) + | _ -> raise (IllFormedXml 2) +;; diff --git a/helm/interface/theoryTypeChecker.ml b/helm/interface/theoryTypeChecker.ml new file mode 100644 index 000000000..2d2453633 --- /dev/null +++ b/helm/interface/theoryTypeChecker.ml @@ -0,0 +1,29 @@ +exception NotWellTyped of string;; + +let typecheck uri = + let rec typecheck_term curi t = + let module T = Theory in + let module P = CicTypeChecker in + let module C = CicCache in + let module U = UriManager in + let obj_typecheck uri = + try + P.typecheck (U.uri_of_string uri) + with + P.NotWellTyped s -> + raise (NotWellTyped + ("Type Checking was NOT successfull due to an error during " ^ + "type-checking of term " ^ uri ^ ":\n\n" ^ s)) + in + match t with + T.Theorem uri -> obj_typecheck (curi ^ "/" ^ uri) + | T.Definition uri -> obj_typecheck (curi ^ "/" ^ uri) + | T.Axiom uri -> obj_typecheck (curi ^ "/" ^ uri) + | T.Variable uri -> obj_typecheck (curi ^ "/" ^ uri) + | T.Section (uri,l) -> typecheck_theory l (curi ^ "/" ^ uri) + and typecheck_theory l curi = + List.iter (typecheck_term curi) l + in + let (uri, l) = TheoryCache.get_theory uri in + typecheck_theory l uri +;; diff --git a/helm/interface/toglie_helm_xref.pl b/helm/interface/toglie_helm_xref.pl new file mode 100755 index 000000000..13c9739ab --- /dev/null +++ b/helm/interface/toglie_helm_xref.pl @@ -0,0 +1,8 @@ +#!/usr/bin/perl + +while() +{ + s/helm:xref="[^"]*"//g; + s/helm:xref='[^']*'//g; + print; +} diff --git a/helm/interface/toglie_helm_xref.sh b/helm/interface/toglie_helm_xref.sh new file mode 100755 index 000000000..b3cb4e0d4 --- /dev/null +++ b/helm/interface/toglie_helm_xref.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "****" $1 +cp $1 /tmp/pippo +cat /tmp/pippo | ./toglie_helm_xref.pl > $1 diff --git a/helm/interface/uriManager.ml b/helm/interface/uriManager.ml new file mode 100644 index 000000000..d03d9970f --- /dev/null +++ b/helm/interface/uriManager.ml @@ -0,0 +1,86 @@ +(* "cic:/a/b/c.con" => [| "cic:/a" ; "cic:/a/b" ; "cic:/a/b/c.con" ; "c" |] *) +type uri = string array;; + +let eq uri1 uri2 = + uri1 == uri2 +;; + +let string_of_uri uri = uri.(Array.length uri - 2);; +let name_of_uri uri = uri.(Array.length uri - 1);; +let buri_of_uri uri = uri.(Array.length uri - 3);; +let depth_of_uri uri = Array.length uri - 2;; + +(*CSC: ora e' diventato poco efficiente, migliorare *) +let relative_depth curi uri cookingsno = + let rec length_of_current_prefix l1 l2 = + match (l1, l2) with + (he1::tl1, he2::tl2) when he1 == he2 -> + 1 + length_of_current_prefix tl1 tl2 + | (_,_) -> 0 + in + depth_of_uri uri - + length_of_current_prefix + (Array.to_list (Array.sub curi 0 (Array.length curi - (2 + cookingsno)))) + (Array.to_list (Array.sub uri 0 (Array.length uri - 2))) + (*CSC: vecchio codice da eliminare + if eq curi uri then 0 + else + depth_of_uri uri - + length_of_current_prefix (Array.to_list curi) (Array.to_list uri) + *) +;; + +module OrderedStrings = + struct + type t = string + let compare (s1 : t) (s2 : t) = compare s1 s2 + end +;; + +module SetOfStrings = Map.Make(OrderedStrings);; + +(*CSC: commento obsoleto ed errato *) +(* Invariant: the map is the identity function, *) +(* i.e. (SetOfStrings.find str !set_of_uri) == str *) +let set_of_uri = ref SetOfStrings.empty;; +let set_of_prefixes = ref SetOfStrings.empty;; + +(* similar to uri_of_string, but used for prefixes of uris *) +let normalize prefix = + try + SetOfStrings.find prefix !set_of_prefixes + with + Not_found -> + set_of_prefixes := SetOfStrings.add prefix prefix !set_of_prefixes ; + prefix +;; + +exception IllFormedUri of string;; + +let mk_prefixes str = + let rec aux curi = + function + [he] -> + let prefix_uri = curi ^ "/" ^ he + and name = List.hd (Str.split (Str.regexp "\.") he) in + [ normalize prefix_uri ; name ] + | he::tl -> + let prefix_uri = curi ^ "/" ^ he in + (normalize prefix_uri)::(aux prefix_uri tl) + | _ -> raise (IllFormedUri str) + in + let tokens = (Str.split (Str.regexp "/") str) in + (* ty = "cic:" *) + let (ty, sp) = (List.hd tokens, List.tl tokens) in + aux ty sp +;; + +let uri_of_string str = + try + SetOfStrings.find str !set_of_uri + with + Not_found -> + let uri = Array.of_list (mk_prefixes str) in + set_of_uri := SetOfStrings.add str uri !set_of_uri ; + uri +;; diff --git a/helm/interface/uriManager.ml.implementazione_banale b/helm/interface/uriManager.ml.implementazione_banale new file mode 100644 index 000000000..cd0d71f71 --- /dev/null +++ b/helm/interface/uriManager.ml.implementazione_banale @@ -0,0 +1,18 @@ +type uri = string;; + +let eq uri1 uri2 = + uri1 = uri2 +;; + +let string_of_uri uri = uri;; +let uri_of_string str = str;; + +let name_of_uri uri = + let l = Str.split (Str.regexp "/") uri in + let name_suf = List.nth l (List.length l - 1) in + List.hd (Str.split (Str.regexp "\.") name_suf) +;; + +let depth_of_uri uri = + List.length (Str.split (Str.regexp "/") uri) - 2 +;; diff --git a/helm/interface/uriManager.ml.implementazione_doppia b/helm/interface/uriManager.ml.implementazione_doppia new file mode 100644 index 000000000..d03d9970f --- /dev/null +++ b/helm/interface/uriManager.ml.implementazione_doppia @@ -0,0 +1,86 @@ +(* "cic:/a/b/c.con" => [| "cic:/a" ; "cic:/a/b" ; "cic:/a/b/c.con" ; "c" |] *) +type uri = string array;; + +let eq uri1 uri2 = + uri1 == uri2 +;; + +let string_of_uri uri = uri.(Array.length uri - 2);; +let name_of_uri uri = uri.(Array.length uri - 1);; +let buri_of_uri uri = uri.(Array.length uri - 3);; +let depth_of_uri uri = Array.length uri - 2;; + +(*CSC: ora e' diventato poco efficiente, migliorare *) +let relative_depth curi uri cookingsno = + let rec length_of_current_prefix l1 l2 = + match (l1, l2) with + (he1::tl1, he2::tl2) when he1 == he2 -> + 1 + length_of_current_prefix tl1 tl2 + | (_,_) -> 0 + in + depth_of_uri uri - + length_of_current_prefix + (Array.to_list (Array.sub curi 0 (Array.length curi - (2 + cookingsno)))) + (Array.to_list (Array.sub uri 0 (Array.length uri - 2))) + (*CSC: vecchio codice da eliminare + if eq curi uri then 0 + else + depth_of_uri uri - + length_of_current_prefix (Array.to_list curi) (Array.to_list uri) + *) +;; + +module OrderedStrings = + struct + type t = string + let compare (s1 : t) (s2 : t) = compare s1 s2 + end +;; + +module SetOfStrings = Map.Make(OrderedStrings);; + +(*CSC: commento obsoleto ed errato *) +(* Invariant: the map is the identity function, *) +(* i.e. (SetOfStrings.find str !set_of_uri) == str *) +let set_of_uri = ref SetOfStrings.empty;; +let set_of_prefixes = ref SetOfStrings.empty;; + +(* similar to uri_of_string, but used for prefixes of uris *) +let normalize prefix = + try + SetOfStrings.find prefix !set_of_prefixes + with + Not_found -> + set_of_prefixes := SetOfStrings.add prefix prefix !set_of_prefixes ; + prefix +;; + +exception IllFormedUri of string;; + +let mk_prefixes str = + let rec aux curi = + function + [he] -> + let prefix_uri = curi ^ "/" ^ he + and name = List.hd (Str.split (Str.regexp "\.") he) in + [ normalize prefix_uri ; name ] + | he::tl -> + let prefix_uri = curi ^ "/" ^ he in + (normalize prefix_uri)::(aux prefix_uri tl) + | _ -> raise (IllFormedUri str) + in + let tokens = (Str.split (Str.regexp "/") str) in + (* ty = "cic:" *) + let (ty, sp) = (List.hd tokens, List.tl tokens) in + aux ty sp +;; + +let uri_of_string str = + try + SetOfStrings.find str !set_of_uri + with + Not_found -> + let uri = Array.of_list (mk_prefixes str) in + set_of_uri := SetOfStrings.add str uri !set_of_uri ; + uri +;; diff --git a/helm/interface/uriManager.ml.implementazione_semplice b/helm/interface/uriManager.ml.implementazione_semplice new file mode 100644 index 000000000..8b8921b3e --- /dev/null +++ b/helm/interface/uriManager.ml.implementazione_semplice @@ -0,0 +1,39 @@ +type uri = string;; + +let eq uri1 uri2 = + uri1 == uri2 +;; + +let string_of_uri uri = uri;; + +let name_of_uri uri = + let l = Str.split (Str.regexp "/") uri in + let name_suf = List.nth l (List.length l - 1) in + List.hd (Str.split (Str.regexp "\.") name_suf) +;; + +let depth_of_uri uri = + List.length (Str.split (Str.regexp "/") uri) - 2 +;; + +module OrderedStrings = + struct + type t = string + let compare (s1 : t) (s2 : t) = compare s1 s2 + end +;; + +module SetOfStrings = Map.Make(OrderedStrings);; + +(* Invariant: the map is the identity function, *) +(* i.e. (SetOfStrings.find str !set_of_uri) == str *) +let set_of_uri = ref SetOfStrings.empty;; + +let uri_of_string str = + try + SetOfStrings.find str !set_of_uri + with + Not_found -> + set_of_uri := SetOfStrings.add str str !set_of_uri ; + str +;; diff --git a/helm/interface/uriManager.mli b/helm/interface/uriManager.mli new file mode 100644 index 000000000..8cffc943a --- /dev/null +++ b/helm/interface/uriManager.mli @@ -0,0 +1,15 @@ +type uri + +val eq : uri -> uri -> bool + +val uri_of_string : string -> uri + +val string_of_uri : uri -> string (* complete uri *) +val name_of_uri : uri -> string (* name only (without extension)*) +val buri_of_uri : uri -> string (* base uri only *) +val depth_of_uri : uri -> int (* length of the path *) + +(* relative_depth curi uri cookingsno *) +(* is the number of times to cook uri to use it when the current uri is curi *) +(* cooked cookingsno times *) +val relative_depth : uri -> uri -> int -> int diff --git a/helm/interface/uris_of_filenames.pl b/helm/interface/uris_of_filenames.pl new file mode 100755 index 000000000..d738f51b7 --- /dev/null +++ b/helm/interface/uris_of_filenames.pl @@ -0,0 +1,15 @@ +#!/usr/bin/perl + +while() { + chomp; + split / /; + for (@_) { + if (/.*\.(con|var|ind)\.xml/) + { s/\./cic:/; } + elsif (/.*\.theory\.xml/) + { s/\./theory:/; } + s/\.xml//; + print; + print "\n"; + } +} diff --git a/helm/interface/urls_of_uris.db b/helm/interface/urls_of_uris.db new file mode 100644 index 0000000000000000000000000000000000000000..ef6b46a519a3b053d361547a1ec8792e5695d589 GIT binary patch literal 1261564 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 z%0D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 !K^(6s8rKqkt)zM=msnB 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 + +#include +#include + +#include + +#include + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +int main(int argc, const char* []) +{ +#if !defined(XALAN_NO_NAMESPACES) + using std::cerr; + using std::endl; + using std::ofstream; +#endif + + if (argc != 1) { + cerr << "Usage: SimpleTransform" + << endl + << endl; + } else { + try { + // Call the static initializer for Xerces... + XMLPlatformUtils::Initialize(); + + { + // Initialize the Xalan XSLT subsystem... + XSLTInit theInit; + + // Create the support objects that are necessary for + // running the processor... + XercesDOMSupport theDOMSupport; + XercesParserLiaison theParserLiaison(theDOMSupport); + XPathSupportDefault theXPathSupport(theDOMSupport); + XSLTProcessorEnvSupportDefault theXSLTProcessorEnvSupport; + XObjectFactoryDefault theXObjectFactory; + XPathFactoryDefault theXPathFactory; + + // Create a processor... + XSLTEngineImpl theProcessor( + theParserLiaison, + theXPathSupport, + theXSLTProcessorEnvSupport, + theDOMSupport, + theXObjectFactory, + theXPathFactory); + + // Connect the processor to the support object... + theXSLTProcessorEnvSupport.setProcessor(&theProcessor); + + // Create a stylesheet construction context, and a stylesheet + // execution context... + StylesheetConstructionContextDefault theConstructionContext( + theProcessor, + theXSLTProcessorEnvSupport, + theXPathFactory); + + StylesheetExecutionContextDefault theExecutionContext( + theProcessor, + theXSLTProcessorEnvSupport, + theXPathSupport, + theXObjectFactory); + + // Our input files...The assumption is that the executable will be + // run from same directory as the input files. + const XalanDOMString theXMLFileName("foo.xml"); + const XalanDOMString theXSLFileName("foo.xsl"); + + // Our input sources... + XSLTInputSource theInputSource(c_wstr(theXMLFileName)); + XSLTInputSource theStylesheetSource(c_wstr(theXSLFileName)); + + // Our output target... + const XalanDOMString theOutputFileName("foo.out"); + XSLTResultTarget theResultTarget(theOutputFileName); + + theProcessor.process( + theInputSource, + theStylesheetSource, + theResultTarget, + theConstructionContext, + theExecutionContext); + + } + + // Call the static terminator for Xerces... + XMLPlatformUtils::Terminate(); + } + catch(...) { + cerr << "Exception caught!!!" + << endl + << endl; + } + } + + return 0; +} + +/**************************************************/ +/* + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! * / + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} + +*/ diff --git a/helm/interface/xaland-java/rompi.class b/helm/interface/xaland-java/rompi.class new file mode 100644 index 0000000000000000000000000000000000000000..4abfe3865ad89dd63981985bc0c6ff02a72ffbf9 GIT binary patch literal 732 zcmZuvTTc@~6#k~&?v!OCH`{vQvM9&`mE~12K6r~Htq`gvgs15;HiNr6&0dK9EPbGf z7=M62%6MiqrAFrA+~$1WIcMhl{Ppbzs(6UqI#xLDbF6W!b3EYK;P5#%Id&Xan03H0 z=fKAN6lz#-2zArM8ZH*mG@@n19T(eJbW`6-mc zTGGFTo?YO^cKZS|S5!?}JQ7xBcDnwqV KV)w|aAovY)#-^kI literal 0 HcmV?d00001 diff --git a/helm/interface/xaland-java/rompi.java b/helm/interface/xaland-java/rompi.java new file mode 100644 index 000000000..6a633dbc9 --- /dev/null +++ b/helm/interface/xaland-java/rompi.java @@ -0,0 +1,12 @@ +import java.net.*; + +public class rompi { + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException + { + /* Wait forever ;-) */ + DatagramSocket socket2 = new DatagramSocket(12346); + DatagramPacket packet2 = new DatagramPacket(new byte[1],1); + System.out.println("Ho preso il socket e non lo lascio piu', caro pu, caro pu"); + socket2.receive(packet2); + } +} diff --git a/helm/interface/xaland-java/sped.class b/helm/interface/xaland-java/sped.class new file mode 100644 index 0000000000000000000000000000000000000000..cc6f53dac35bcca947942989dc7259047fd6f055 GIT binary patch literal 1142 zcmZuw+fvg|6kUg=O&T&nfdWB5@PeUSibYWZqLhn73pj$#Fg%6!vcu z4V98~6><{>RD^L`MFfKahJ-n+Lc$#t3PyxBDw6LCxF@3bh3|oe$4Cg65Req`NI*)% zJf=06nAEUISF04Fx(^JJVF{rambIS_)G?!_(e}Y1&-x2D_MU7_JU{VzV!D>k z^9r38zbT!L9z6F8hO4%37bnS_+uOoUTgrwH#&oS?sfTV1S<*d+Y}Wr~zK`b_Br-Dda{@?Ha) z8PTOWdgkP~e5RO+E`{Q=v{9P=8Ch+x{sJ!W{l)+Q literal 0 HcmV?d00001 diff --git a/helm/interface/xaland-java/sped.java b/helm/interface/xaland-java/sped.java new file mode 100644 index 000000000..9d96610d4 --- /dev/null +++ b/helm/interface/xaland-java/sped.java @@ -0,0 +1,28 @@ +import java.net.*; + +public class sped { + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException + { + String input = argv[0]; + String out1 = argv[1]; + String out2 = argv[2]; + + String sent = input + " " + out1 + " " + out2; + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket = new DatagramSocket(); + + int strlen = sent.length(); + byte buf[] = new byte[strlen]; + sent.getBytes(0,strlen,buf,0); + DatagramPacket packet = new DatagramPacket(buf,strlen,address,12345); + + socket.send(packet); + + + /* Wait for answer (or forever ;-) */ + DatagramSocket socket2 = new DatagramSocket(12346); + DatagramPacket packet2 = new DatagramPacket(new byte[1],1); + socket2.receive(packet2); + } +} diff --git a/helm/interface/xaland-java/xaland.class b/helm/interface/xaland-java/xaland.class new file mode 100644 index 0000000000000000000000000000000000000000..6871fda4b77e5da54ed99846b0a35652ccaf2961 GIT binary patch literal 3509 zcma)9Yfu~475=Uyw9B%?Lm*%cr1G&A<;fE-Dy?5+qT zO`mC-PTx&m?jwEIY1*_++DIn2Y12pA=}dogCjUCq>Ay~A`l~Z-e{?3(b9My?kY@rj z=bn4s_uO;NUj6aSS6)RBefWcnw2W&q9+8oe@o^cSl<`>^pOf*7j4#UgvW!<{{8qxZ zBz#-KcO-mQ!uKS6U&0Lu&q?@!gy$vvP{NNSyddGH5?++>l7yd0__>6aB@`vRuAmvC z3fdWT_}B#n^>{!*1A{1oE(S3lBowq^OhF4SGB(a46AT_?+9c~vF=Lv+B?TI06ub@Z zRM3f87MWx4P%T<~BdlJ`-Wh0(3a*OdP*G}gahXmR;$T`!E zj}kbYO4+945R3F?Jou16sJrL#8D2)&R+N@%#yYCe&lDCGOq=YnG8t^`9<8o@tlPJl zw&LU7NhnCu$PV=+EPFA&lFh^&VuSbymQ2%~v@Dm-Tr~ztLTA}1 zXMNakjYZqYP8i8YObVUY)7{>gw>!ui?vj^=*|EfgVLPUsNE>O#%9S&;U7Ew0ok~nk z*jAG6)8ZTGsb;oH+#JH#Ta?|ExS`z?wl{e@dmQ9wjtY0mD%eSLsLIJV&N68_g^W9G z*o);n#eAc;s}1%W?!J7+t2>Di59?ygk8)?#mn-yg^)rM|q;qNaUMl6YR>~Am&RRLg zHFEBZktxvrj$t!vX!RKpgv(Gjm(T;r&*3ng~uo!otnPh@0=~8@}y~` zR{Q(=$)BI#^W;yUcG@;_&VprU$;~B)hCwXJ)trhgo3=v%(%=Xi`MjA+(F{nYle9G- zEf^X0X0D_imk^2WfvcCy5tcA>i|&$u$~Xr&VmYqA-7G?ZM&eGLo}Dr&_)Pk7(mtnv}&hPj+`hSK~}s-0C!xH+3pTFV)c|dCbW09hs?1lZlFR)@2OG z9o@)UC~KtYL(sE(Cix>HWo6^DCiRw69vA`#cFXRb0|E!Di|uGxf&I6atGN2!w;*+% zn#ZzN1rFU_xN;287mNirCID4dMVf;2MHGwKi2D+7D6j~-S07ep<-fDa&mkJ0WF?Q3Z5 zSVz~~;Szc;t|K;gq=dtIsJBlG6>;iCVhenVU<4t8G8w2PV+!^lj8Ax!AR1}6m*_vi zM}5=5A>wubfxCKx12=KvL~n?flf5+q7kk44WL_H3YkK7YJ-m*Nxe^ZE#67yCNm|Vs z?h8PdHE9j>f*?xRr_>T!yM}WCdh={*D4Npev+Fd)S5UN&Pf;~RQ_BkNa~&ld(v_Dm zw2tUpq^5+Pjv|gm0!7@}Nk|bRMchm5NNo`(*U>iD6v8c;KnZ<%J(;R6;xvQ1^#)#! z4K}W$Wln1dMjK1$*PFDa##j;W7>xLcKG>`^1*4H7?$=wirf4K|HQLOZC~cZUSBp5W zx3WLg_v?ivQCM0Fg%lA4He>R5Vdh1d7u>~@nb*oZy0fz0I_l@N))L-c#9h}>&#n}5 zbpwyBqru~J>up*~q^^j8>xgr*w6-FSuVI)|9GlaW5{~HYS{+x17Nzpg+NmOLV34%P z6lopdJK3Q{XJ9RPyVgw%>TT<2r>j1ow+C;@y2eS?w4m13SwdXjqqS>$ia2}Y%_lcY z?msw5cmpIVuzGrrN9ezeim#KN+j|K+Oi%Vcde0Bill(Z9;3?vaP}yCe-v?9l^WX|S z^B*S3G}V6|`|$)0;3*uUa_*)Fb`PGX^#!u>GWzj4;`kGe;tkx1zhD6Wz}@&4j^Te8 z6g9XUi_K%Z{U9M zSB!|iVO0E`)_>vw@o!uZ|3xAoVIrX7!9WyKfjyWG^k61%6umpzO3;snJT)PAY!|J9 W)|%cD_HXrO*e4SFJTU|K{r>@yPnx#? literal 0 HcmV?d00001 diff --git a/helm/interface/xaland-java/xaland.java b/helm/interface/xaland-java/xaland.java new file mode 100644 index 000000000..9eda83124 --- /dev/null +++ b/helm/interface/xaland-java/xaland.java @@ -0,0 +1,89 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/interface/xaland-java/xaland.java.prima_del_loro_baco b/helm/interface/xaland-java/xaland.java.prima_del_loro_baco new file mode 100644 index 000000000..b46ffa6aa --- /dev/null +++ b/helm/interface/xaland-java/xaland.java.prima_del_loro_baco @@ -0,0 +1,85 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/interface/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset b/helm/interface/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset new file mode 100644 index 000000000..1467cdd2e --- /dev/null +++ b/helm/interface/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset @@ -0,0 +1,87 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/interface/xaland.class b/helm/interface/xaland.class new file mode 100644 index 0000000000000000000000000000000000000000..6871fda4b77e5da54ed99846b0a35652ccaf2961 GIT binary patch literal 3509 zcma)9Yfu~475=Uyw9B%?Lm*%cr1G&A<;fE-Dy?5+qT zO`mC-PTx&m?jwEIY1*_++DIn2Y12pA=}dogCjUCq>Ay~A`l~Z-e{?3(b9My?kY@rj z=bn4s_uO;NUj6aSS6)RBefWcnw2W&q9+8oe@o^cSl<`>^pOf*7j4#UgvW!<{{8qxZ zBz#-KcO-mQ!uKS6U&0Lu&q?@!gy$vvP{NNSyddGH5?++>l7yd0__>6aB@`vRuAmvC z3fdWT_}B#n^>{!*1A{1oE(S3lBowq^OhF4SGB(a46AT_?+9c~vF=Lv+B?TI06ub@Z zRM3f87MWx4P%T<~BdlJ`-Wh0(3a*OdP*G}gahXmR;$T`!E zj}kbYO4+945R3F?Jou16sJrL#8D2)&R+N@%#yYCe&lDCGOq=YnG8t^`9<8o@tlPJl zw&LU7NhnCu$PV=+EPFA&lFh^&VuSbymQ2%~v@Dm-Tr~ztLTA}1 zXMNakjYZqYP8i8YObVUY)7{>gw>!ui?vj^=*|EfgVLPUsNE>O#%9S&;U7Ew0ok~nk z*jAG6)8ZTGsb;oH+#JH#Ta?|ExS`z?wl{e@dmQ9wjtY0mD%eSLsLIJV&N68_g^W9G z*o);n#eAc;s}1%W?!J7+t2>Di59?ygk8)?#mn-yg^)rM|q;qNaUMl6YR>~Am&RRLg zHFEBZktxvrj$t!vX!RKpgv(Gjm(T;r&*3ng~uo!otnPh@0=~8@}y~` zR{Q(=$)BI#^W;yUcG@;_&VprU$;~B)hCwXJ)trhgo3=v%(%=Xi`MjA+(F{nYle9G- zEf^X0X0D_imk^2WfvcCy5tcA>i|&$u$~Xr&VmYqA-7G?ZM&eGLo}Dr&_)Pk7(mtnv}&hPj+`hSK~}s-0C!xH+3pTFV)c|dCbW09hs?1lZlFR)@2OG z9o@)UC~KtYL(sE(Cix>HWo6^DCiRw69vA`#cFXRb0|E!Di|uGxf&I6atGN2!w;*+% zn#ZzN1rFU_xN;287mNirCID4dMVf;2MHGwKi2D+7D6j~-S07ep<-fDa&mkJ0WF?Q3Z5 zSVz~~;Szc;t|K;gq=dtIsJBlG6>;iCVhenVU<4t8G8w2PV+!^lj8Ax!AR1}6m*_vi zM}5=5A>wubfxCKx12=KvL~n?flf5+q7kk44WL_H3YkK7YJ-m*Nxe^ZE#67yCNm|Vs z?h8PdHE9j>f*?xRr_>T!yM}WCdh={*D4Npev+Fd)S5UN&Pf;~RQ_BkNa~&ld(v_Dm zw2tUpq^5+Pjv|gm0!7@}Nk|bRMchm5NNo`(*U>iD6v8c;KnZ<%J(;R6;xvQ1^#)#! z4K}W$Wln1dMjK1$*PFDa##j;W7>xLcKG>`^1*4H7?$=wirf4K|HQLOZC~cZUSBp5W zx3WLg_v?ivQCM0Fg%lA4He>R5Vdh1d7u>~@nb*oZy0fz0I_l@N))L-c#9h}>&#n}5 zbpwyBqru~J>up*~q^^j8>xgr*w6-FSuVI)|9GlaW5{~HYS{+x17Nzpg+NmOLV34%P z6lopdJK3Q{XJ9RPyVgw%>TT<2r>j1ow+C;@y2eS?w4m13SwdXjqqS>$ia2}Y%_lcY z?msw5cmpIVuzGrrN9ezeim#KN+j|K+Oi%Vcde0Bill(Z9;3?vaP}yCe-v?9l^WX|S z^B*S3G}V6|`|$)0;3*uUa_*)Fb`PGX^#!u>GWzj4;`kGe;tkx1zhD6Wz}@&4j^Te8 z6g9XUi_K%Z{U9M zSB!|iVO0E`)_>vw@o!uZ|3xAoVIrX7!9WyKfjyWG^k61%6umpzO3;snJT)PAY!|J9 W)|%cD_HXrO*e4SFJTU|K{r>@yPnx#? literal 0 HcmV?d00001 diff --git a/helm/interface/xml.ml b/helm/interface/xml.ml new file mode 100644 index 000000000..5cb3dbd06 --- /dev/null +++ b/helm/interface/xml.ml @@ -0,0 +1,72 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* A tactic to print Coq objects in XML *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 18/10/2000 *) +(* *) +(* This module defines a pretty-printer and the stream of commands to the pp *) +(* *) +(******************************************************************************) + + +(* the type token for XML cdata, empty elements and not-empty elements *) +(* Usage: *) +(* Str cdata *) +(* Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen] *) +(* NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *) +(* content *) +type token = Str of string + | Empty of string * (string * string) list + | NEmpty of string * (string * string) list * token Stream.t +;; + +(* currified versions of the constructors make the code more readable *) +let xml_empty name attrs = [< 'Empty(name,attrs) >] +let xml_nempty name attrs content = [< 'NEmpty(name,attrs,content) >] +let xml_cdata str = [< 'Str str >] + +(* Usage: *) +(* pp tokens None pretty prints the output on stdout *) +(* pp tokens (Some filename) pretty prints the output on the file filename *) +let pp strm fn = + let channel = ref stdout in + let rec pp_r m = + parser + [< 'Str a ; s >] -> + print_spaces m ; + fprint_string (a ^ "\n") ; + pp_r m s + | [< 'Empty(n,l) ; s >] -> + print_spaces m ; + fprint_string ("<" ^ n) ; + List.iter (function (n,v) -> fprint_string (" " ^ n ^ "=\"" ^ v ^ "\"")) l; + fprint_string "/>\n" ; + pp_r m s + | [< 'NEmpty(n,l,c) ; s >] -> + print_spaces m ; + fprint_string ("<" ^ n) ; + List.iter (function (n,v) -> fprint_string (" " ^ n ^ "=\"" ^ v ^ "\"")) l; + fprint_string ">\n" ; + pp_r (m+1) c ; + print_spaces m ; + fprint_string ("\n") ; + pp_r m s + | [< >] -> () + and print_spaces m = + for i = 1 to m do fprint_string " " done + and fprint_string str = + output_string !channel str + in + match fn with + Some filename -> + channel := open_out filename ; + pp_r 0 strm ; + close_out !channel ; + print_string ("\nWriting on file \"" ^ filename ^ "\" was succesfull\n"); + flush stdout + | None -> + pp_r 0 strm +;; diff --git a/helm/interface/xml.mli b/helm/interface/xml.mli new file mode 100644 index 000000000..a82c582f6 --- /dev/null +++ b/helm/interface/xml.mli @@ -0,0 +1,35 @@ +(******************************************************************************) +(* *) +(* PROJECT HELM *) +(* *) +(* A tactic to print Coq objects in XML *) +(* *) +(* Claudio Sacerdoti Coen *) +(* 18/10/2000 *) +(* *) +(* This module defines a pretty-printer and the stream of commands to the pp *) +(* *) +(******************************************************************************) + +(* Tokens for XML cdata, empty elements and not-empty elements *) +(* Usage: *) +(* Str cdata *) +(* Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen] *) +(* NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *) +(* content *) +type token = + | Str of string + | Empty of string * (string * string) list + | NEmpty of string * (string * string) list * token Stream.t + +(* currified versions of the token constructors make the code more readable *) +val xml_empty : string -> (string * string) list -> token Stream.t +val xml_nempty : + string -> (string * string) list -> token Stream.t -> token Stream.t +val xml_cdata : string -> token Stream.t + +(* The pretty printer for streams of token *) +(* Usage: *) +(* pp tokens None pretty prints the output on stdout *) +(* pp tokens (Some filename) pretty prints the output on the file filename *) +val pp : token Stream.t -> string option -> unit diff --git a/helm/interface/xsltProcessor.ml b/helm/interface/xsltProcessor.ml new file mode 100644 index 000000000..c82a8f5f8 --- /dev/null +++ b/helm/interface/xsltProcessor.ml @@ -0,0 +1,64 @@ +exception XsltProcessorCouldNotSend;; +exception XsltProcessorCouldNotReceive;; + +let portserver = 12345;; +let portclient = 12346;; +let time_to_wait = 10;; + +let rec process uri usecache mode = + let module U = Unix in + let uri = UriManager.string_of_uri uri in + let pid = string_of_int (U.getpid ()) + and filename' = + let uri' = Str.replace_first (Str.regexp ".*:") "" uri in + Str.global_replace (Str.regexp "/") "_" + (Str.global_replace (Str.regexp "_") "__" uri') + in let tmpfile = "/tmp/helm_" ^ filename' ^ "_" ^ pid in + (* test if the cache can be used *) + let tmp_file_exists = Sys.file_exists tmpfile in + if usecache && tmp_file_exists then + tmpfile + else + let url = Configuration.getter_url ^ uri in + (* purge the cache if asked to *) + if not usecache && tmp_file_exists then + Sys.remove tmpfile ; + let string_to_send = mode ^ " " ^ url ^ " " ^ tmpfile in + (* next function is for looping in case the server is not responding *) + let rec contact_server () = + let socketclient = U.socket U.PF_INET U.SOCK_DGRAM 0 + and socketserver = U.socket U.PF_INET U.SOCK_DGRAM 0 in + let bounded = ref false in + while not !bounded do + try + U.bind socketclient (U.ADDR_INET(U.inet_addr_any,portclient)) ; + bounded := true + with _ -> + print_endline "Port unavailable. Retrying..." ; flush stdout ; + U.sleep 5 (* wait hoping the inetaddr is released *) + done ; + let n = + U.sendto socketserver string_to_send 0 (String.length string_to_send) + [] (U.ADDR_INET(U.inet_addr_any,portserver)) + in + if n = -1 then raise XsltProcessorCouldNotSend ; + U.close socketserver ; + let process_signal _ = U.close socketclient in + Sys.set_signal Sys.sigalrm (Sys.Signal_handle process_signal) ; + (* if the server does not respond, repeat the query *) + ignore (U.alarm time_to_wait) ; + try + if U.recv socketclient "" 0 0 [] = -1 then + raise XsltProcessorCouldNotReceive ; + ignore (U.alarm 0) ; (* stop the bomb *) + Sys.set_signal Sys.sigalrm Sys.Signal_default ; + U.close socketclient ; + tmpfile + with + U.Unix_error(_,"recv",_) -> + print_endline "Xaland server not responding. Retrying..." ; + flush stdout; + contact_server () + in + contact_server () +;; diff --git a/helm/pacchetti/Makefile b/helm/pacchetti/Makefile new file mode 100644 index 000000000..e47e23f45 --- /dev/null +++ b/helm/pacchetti/Makefile @@ -0,0 +1,76 @@ +all: helm_configuration helm_data helm_http_getter helm_xsltd helm_gtk_interface +clean: + rm -f helm_*.spec helm_*.tar.gz + +helm_configuration: prep_helm_configuration clean_helm_configuration + +prep_helm_configuration: + cvs export -D20100101 configuration + mv configuration/helm_configuration-0.0.1-1.spec . + (cd configuration ; autoconf) + mv configuration helm_configuration-0.0.1 + tar -zcvf helm_configuration-0.0.1-1.tar.gz helm_configuration-0.0.1 + +clean_helm_configuration: + rm -rf helm_configuration-0.0.1 + + + +helm_data: prep_helm_data clean_helm_data + +prep_helm_data: + cvs export -D20100101 helm_data + mv helm_data/helm_data-0.0.1-1.spec . + (cd helm_data ; cvs export -D20100101 dtd ; cvs export -D20100101 style ; autoconf) + mv helm_data helm_data-0.0.1 + tar -zcvf helm_data-0.0.1-1.tar.gz helm_data-0.0.1 + +clean_helm_data: + rm -rf helm_data-0.0.1 + + + +helm_http_getter: prep_helm_http_getter clean_helm_http_getter + +prep_helm_http_getter: + cvs export -D20100101 http_getter + mv http_getter/helm_http_getter-0.0.1-1.spec . + (cd http_getter ; autoconf) + mv http_getter helm_http_getter-0.0.1 + tar -zcvf helm_http_getter-0.0.1-1.tar.gz helm_http_getter-0.0.1 + +clean_helm_http_getter: + rm -rf helm_http_getter-0.0.1 + + + +helm_xsltd: prep_helm_xsltd clean_helm_xsltd + +prep_helm_xsltd: + cvs export -D20100101 xsltd + mv xsltd/helm_xsltd-0.0.1-1.spec . + (cd xsltd ; autoconf) + mv xsltd helm_xsltd-0.0.1 + tar -zcvf helm_xsltd-0.0.1-1.tar.gz helm_xsltd-0.0.1 + +clean_helm_xsltd: + rm -rf helm_xsltd-0.0.1 + + + +helm_gtk_interface: prep_helm_gtk_interface clean_helm_gtk_interface + +prep_helm_gtk_interface: + cvs export -D20100101 interface + mv interface/helm_gtk_interface-0.0.1-1.spec . + (cd interface ; autoconf) + mv interface helm_gtk_interface-0.0.1 + tar -zcvf helm_gtk_interface-0.0.1-1.tar.gz helm_gtk_interface-0.0.1 + +clean_helm_gtk_interface: + rm -rf helm_gtk_interface-0.0.1 + + + + +PHONY: all clean helm_configuration prep_helm_configuration clean_helm_configuration diff --git a/helm/scripts/Makefile b/helm/scripts/Makefile new file mode 100644 index 000000000..f0ddad968 --- /dev/null +++ b/helm/scripts/Makefile @@ -0,0 +1,18 @@ + +all: + ./makeit V7 marcello marcello marcello.cshrc + ./makeit V7 marcello marcello marcello.rc + ./makeit V7 marcello phd marcello_phd.cshrc + ./makeit V7 marcello phd marcello_phd.rc + ./makeit V7 phd phd phd.cshrc + ./makeit V7 phd phd phd.rc + ./makeit V7 phd marcello phd_marcello.cshrc + ./makeit V7 phd marcello phd_marcello.rc + chmod a+x marcello*rc phd*rc + +clean: + rm -f marcello*rc phd*rc + +cleanbak: + rm -f *~ + diff --git a/helm/scripts/makeit b/helm/scripts/makeit new file mode 100755 index 000000000..bbd7cfd05 --- /dev/null +++ b/helm/scripts/makeit @@ -0,0 +1,11 @@ +#!/bin/sh + +if test $# != 3; then + echo "Usage: makeit " + echo + echo " is either V6.2 or V7" + echo " is either phd or marcello" + exit 1 +fi + +sed -e "s/@COQV@/$1/" -e "s/@WHERE@/$2/" -e "s/@FROM@/$3/" diff --git a/helm/scripts/start-tomcat b/helm/scripts/start-tomcat new file mode 100755 index 000000000..ac9912ee3 --- /dev/null +++ b/helm/scripts/start-tomcat @@ -0,0 +1,8 @@ +#!/bin/sh +trap stop-tomcat-debug EXIT +start-tomcat-debug >/dev/null +echo TOMCAT is on its way, wait a few seconds before using it. +echo Press enter to kill TOMCAT. +echo +read +echo Shutting down... diff --git a/helm/scripts/start-tomcat-debug b/helm/scripts/start-tomcat-debug new file mode 100755 index 000000000..bae236b46 --- /dev/null +++ b/helm/scripts/start-tomcat-debug @@ -0,0 +1,2 @@ +#!/bin/sh +$HELMROOT/shared/libraries/tomcat/bin/startup.sh diff --git a/helm/scripts/stop-tomcat-debug b/helm/scripts/stop-tomcat-debug new file mode 100755 index 000000000..89f4e5d31 --- /dev/null +++ b/helm/scripts/stop-tomcat-debug @@ -0,0 +1,2 @@ +#! /bin/sh +exec $HELMROOT/shared/libraries/tomcat/bin/shutdown.sh diff --git a/helm/scripts/template.cshrc b/helm/scripts/template.cshrc new file mode 100644 index 000000000..cd11bf582 --- /dev/null +++ b/helm/scripts/template.cshrc @@ -0,0 +1,69 @@ + +set COQV=@COQV@ +set WHERE=@WHERE@ +set FROM=@FROM@ + +setenv CVS_RSH=ssh + +echo "Configuring HELM for $WHERE (from $FROM), Coq $COQV" + +if ($WHERE == phd) then + setenv HELMROOT /projects/helm + setenv JAVA_HOME /opt/java/jdk1.3 + setenv PATH .:$JAVA_HOME/bin/:$PATH + if ($?LD_LIBRARY_PATH == 1) then + setenv LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH + else + setenv LD_LIBRARY_PATH /usr/local/lib + endif +else + setenv HELMROOT /home/projects/helm + setenv JAVA_HOME /usr/local/jdk1.3 + setenv PATH .:$JAVA_HOME/bin:$HELMROOT/local/bin:$PATH + if ($?LD_LIBRARY_PATH == 1) then + setenv LD_LIBRARY_PATH $HELMROOT/local/lib:$LD_LIBRARY_PATH + else + setenv LD_LIBRARY_PATH $HELMROOT/local/lib + endif +endif + +if ($WHERE == $FROM) then + set FONTROOT=$HELMROOT +else + if ($FROM == phd) then + set FONTROOT=/projects/helm + else + set FONTROOT=/home/projects/helm + endif +endif + +setenv PATH $HELMROOT/http_getter:$PATH +setenv PATH $HELMROOT/V7/interface:$PATH +setenv PATH $HELMROOT/shared/scripts:$PATH + +setenv HELM_CONFIGURATION_DIR $HELMROOT/$COQV/$WHERE/local/etc/helm +setenv HELM_STYLE_DIR $HELMROOT/$COQV/style +setenv HELM_LIB_DIR $HELMROOT/$COQV/$WHERE/local/lib/helm +setenv HTTP_GETTER_RDF_DIR $HELMROOT/shared/V7/rdf_library +setenv HTTP_GETTER_RDF_DBM $HELMROOT/shared/V7/rdf_urls_of_uris.db +setenv HTTP_GETTER_XSLT_DBM $HELMROOT/shared/V7/xslt_urls_of_uris.db +setenv HTTP_GETTER_PORT 48081 + +echo HELM_CONFIGURATION_DIR=$HELM_CONFIGURATION_DIR +echo HELM_LIB_DIR=$HELM_LIB_DIR +echo HELM_STYLE_DIR=$HELM_STYLE_DIR + +setenv CLASSPATH . +setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/xalan.jar +setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/xerces.jar +setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/uwobo_client.jar +setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/uwobo_server.jar + +setenv MATHENGINECONF $HELMROOT/$COQV/$WHERE/local/etc/helm/helm-math-engine-configuration.xml + +umask 002 + +# Stix font +xset fp +xset fp+ $FONTROOT/fonts/mathematica/Type1/ +xset fp rehash diff --git a/helm/scripts/template.rc b/helm/scripts/template.rc new file mode 100644 index 000000000..6fb3c0cdc --- /dev/null +++ b/helm/scripts/template.rc @@ -0,0 +1,61 @@ + +COQV=@COQV@ +WHERE=@WHERE@ +FROM=@FROM@ + +export CVS_RSH=ssh + +echo "Configuring HELM for $WHERE (from $FROM), Coq $COQV" + +if test $WHERE = phd; then + export HELMROOT=/projects/helm + export JAVA_HOME=/opt/java/jdk1.3 + export PATH=.:$JAVA_HOME/bin/:$PATH + export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH +else + export HELMROOT=/home/projects/helm + export JAVA_HOME=/usr/local/jdk1.3 + export PATH=.:$JAVA_HOME/bin:$HELMROOT/local/bin:$PATH + export LD_LIBRARY_PATH=$HELMROOT/local/lib:$LD_LIBRARY_PATH +fi + +if test $WHERE = $FROM; then + FONTROOT=$HELMROOT +else + if test $FROM = phd; then + FONTROOT=/projects/helm + else + FONTROOT=/home/projects/helm + fi +fi + +export PATH=$HELMROOT/http_getter:$PATH +export PATH=$HELMROOT/V7/interface:$PATH +export PATH=$HELMROOT/shared/scripts:$PATH + +export HELM_CONFIGURATION_DIR=$HELMROOT/$COQV/$WHERE/local/etc/helm +export HELM_STYLE_DIR=$HELMROOT/$COQV/style +export HELM_LIB_DIR=$HELMROOT/$COQV/$WHERE/local/lib/helm +export HTTP_GETTER_RDF_DIR=$HELMROOT/shared/V7/rdf_library +export HTTP_GETTER_RDF_DBM=$HELMROOT/shared/V7/rdf_urls_of_uris.db +export HTTP_GETTER_XSLT_DBM=$HELMROOT/shared/V7/xslt_urls_of_uris.db +export HTTP_GETTER_PORT=48081 + +echo HELM_CONFIGURATION_DIR=$HELM_CONFIGURATION_DIR +echo HELM_LIB_DIR=$HELM_LIB_DIR +echo HELM_STYLE_DIR=$HELM_STYLE_DIR + +# export CLASSPATH=. +# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/xalan.jar +# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/xerces.jar +# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/uwobo_client.jar +# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/uwobo_server.jar + +export MATHENGINECONF=$HELMROOT/$COQV/$WHERE/local/etc/helm/helm-math-engine-configuration.xml + +umask 002 + +# Stix font +xset fp +xset fp+ $FONTROOT/fonts/mathematica/Type1/ +xset fp rehash diff --git a/helm/style/annotatedcont.xsl b/helm/style/annotatedcont.xsl new file mode 100644 index 000000000..e97d08f2b --- /dev/null +++ b/helm/style/annotatedcont.xsl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/annotatedcont.xsl.csc b/helm/style/annotatedcont.xsl.csc new file mode 100644 index 000000000..3508d6be4 --- /dev/null +++ b/helm/style/annotatedcont.xsl.csc @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/annotatedpres.xsl b/helm/style/annotatedpres.xsl new file mode 100644 index 000000000..511f915f5 --- /dev/null +++ b/helm/style/annotatedpres.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/basic.xsl b/helm/style/basic.xsl new file mode 100644 index 000000000..93eb28052 --- /dev/null +++ b/helm/style/basic.xsl @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $x + + + app + + $x + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + app + + + + + + + + + x + + + + app + + x + + + + app + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/content.xsl b/helm/style/content.xsl new file mode 100644 index 000000000..24b97e6e6 --- /dev/null +++ b/helm/style/content.xsl @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + + + + arrow + + + + prod + + + + + + + + + + + + + + + + + cast + + + + + + + + + + + + + + + + + + + + + + + + + letin + + + + + let + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mutcase + + + + + + + + + + + + + + + app + + + + LAMBDA + + + + LAMBDA + + + + + + + + fix + + + + + + + + + cofix + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/content.xsl.csc b/helm/style/content.xsl.csc new file mode 100644 index 000000000..5f7c1e131 --- /dev/null +++ b/helm/style/content.xsl.csc @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + [[]] + + + + + + + + + + + + + + + + + + + + arrow + + + + + + prod + + + [[]] + + + + + + + + + + + + + + + + + + + + cast + + + + + + + + + + + + + [[]] + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + [[]] + + + + + + + + [[]] + + + + + + + + [[]] + + + + + + + + + + + + [[]] + + + + + + + + + + [[]] + + + + + + + + + + mutcase + + + + + + + + + + + + + + + + + + + app + + + + LAMBDA + + + + LAMBDA + + + + + + + + + fix + + + + + + + + + cofix + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/content_senza_tipi.13.9.00.xsl b/helm/style/content_senza_tipi.13.9.00.xsl new file mode 100644 index 000000000..7de998720 --- /dev/null +++ b/helm/style/content_senza_tipi.13.9.00.xsl @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + + + + arrow + + + + prod + + + + + + + + + + + + + + + + + cast + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mutcase + + + + + + + + + + + + + + + app + + + + LAMBDA + + + + LAMBDA + + + + + + + + fix + + + + + + + + + cofix + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/content_to_html.xsl b/helm/style/content_to_html.xsl new file mode 100644 index 000000000..dd1c07794 --- /dev/null +++ b/helm/style/content_to_html.xsl @@ -0,0 +1,657 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P + + : + + +
+ + + + . + + + +
+ + + P + + : + + . + + +
+
+ + + + ( + + + +
+ + + + + ® + + + + ) +
+ + ( + + + ® + + ) + +
+
+ + + + ( + + + + +
+ + + + + + +
+ ) +
+ + ( + + +   + + + ) + +
+
+ + + + + + ( + + +
+ + + :> + + + + ) +
+ + ( + + :> + + ) + +
+
+ + + + + +
+
+ + Prop + + + Set + + + Type + + + + + < + + + + > + CASE + + + + OF + +
+ + + + + +    + + + | + + + + Þ + + + +
+
+ + < + + > + CASE + + OF + + + + | + + + + Þ + + + + + +
+
+ + + + FIX + + { + +
+ + + + + : + + + +
+ + + + := + + + +
+
+ + + + } +
+ + FIX + + { + + + : + + := + + + + } + + + ; + + + + +
+
+ + + + COFIX + + { +
+ + + + + + : + + + +
+ + + + := + + + + +
+
+ + + + } +
+ + COFIX + + { + + + : + + := + + + + } + + + ; + + + + +
+
+
+ +
+ + + + + + + + + + + + + + l + + : + + +
+ + + + . + + + +
+ + + l + + : + + . + + +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+DEFINITION ()
+TYPE =
+ + + + + +
+BODY =
+ + + + + + +

+ + + + + + +

+AXIOM ()
+TYPE = + + +

+
+ + + + + +

+UNFINISHED PROOF ()
+THESIS: + +
+CONJECTURES: + +
+ + + + : + + + +
+
+PROOF: + + + +

+
+ + + + + +

+ + + + + + INDUCTIVE DEFINITION + + + COINDUCTIVE DEFINITION + + + + + AND + + + () + [ + + + + : + + + + ]
+ OF ARITY + + +
+ BUILT FROM: + +
+ + + + + +    + + + | + + + + : + + + +
+
+

+
+ + + + + +

+VARIABLE
+TYPE = + + +

+
+ + + + + + + + + +

BEGIN OF SECTION

+ +

END OF SECTION

+
+ + diff --git a/helm/style/html_init.xsl b/helm/style/html_init.xsl new file mode 100644 index 000000000..9e81b169c --- /dev/null +++ b/helm/style/html_init.xsl @@ -0,0 +1,259 @@ + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + +
+ + + + + + + + + + + + + + + ) +
+ + ( + + + + + + + + + + + ) + +
+
+ + + + + + + + + + + + + + + + - + + + + + + + + + + + + ( + + + +
+ + + + + + + + - + + + + + ) +
+ + ( + + + + + + - + + + ) + +
+
+
+
+ + + + + + + + + + + + + + Ø + + + + + + + + + + + + + + + + + + + + + + $ + + + : + + + +
+ + + + . + + + +
+ + + + + + $ + + + : + + . + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/helm/style/html_reals.xsl b/helm/style/html_reals.xsl new file mode 100644 index 000000000..04ff478c5 --- /dev/null +++ b/helm/style/html_reals.xsl @@ -0,0 +1,234 @@ + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + lim + + + + ® + + +
+ + + + + + +
+ + + + + + lim + + + + ® + + + + + + +
+
+ + + + + + + + + + + + + + d + / + + d + + + + + + + + + + + + + + + + | + + + + | + + + + + + + + + + + + + + ! + + + + + + + + + + + (sqr + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + + + + , +
+ + + + + + + } +
+ + + + + + + + { + + , + + } + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/helm/style/html_set.xsl b/helm/style/html_set.xsl new file mode 100644 index 000000000..6c7f66b1b --- /dev/null +++ b/helm/style/html_set.xsl @@ -0,0 +1,463 @@ + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + ( + + + +
+ + + + + + + + Î + + + + + ) +
+ + ( + + + + + + Î + + + ) + +
+
+ + + + + + + + + + + + + + + ( + + + +
+ + + + Ï + + + + ) +
+ + ( + + Ï + + ) + +
+
+ + + + + + + + + + + + Æ + + + + + + + + + + { + + : + + +
+ + + + | + + + + } +
+ + { + + : + + | + + } + +
+
+ + + + { + + + + + , +
+ + + + + + +
+ } +
+ + { + + + + + } + + + , + + + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + ( + + + +
+ + + + + + + + Ç + + + + + ) +
+ + ( + + + + + + Ç + + + ) + +
+
+ + + + + + + + + + + + + + + ( + + + +
+ + + + + + + + È + + + + + ) +
+ + ( + + + + + + È + + + ) + +
+
+ + + + + + + + + + + + + + ( + + + +
+ + + + + + + + Í + + + + + ) +
+ + ( + + + + + + Í + + + ) + +
+
+ + + + + + + + + + + + + + ( + + + +
+ + + + + + + + Ì + + + + + ) +
+ + ( + + + + + + Ì + + + ) + +
+
+ + + + + + + + + + + + + + + + ( + + + +
+ + + + + + + + / + + + + + ) +
+ + ( + + + + + + / + + + ) + +
+
+ + + + + + + + + | + + + + | + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/helm/style/mml2mmlv1_0.xsl b/helm/style/mml2mmlv1_0.xsl new file mode 100644 index 000000000..67e1accfb --- /dev/null +++ b/helm/style/mml2mmlv1_0.xsl @@ -0,0 +1,1957 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + i + + + + + + + + - + + + + + + + + + i + + + + + + + + / + + + + + + + + / + + + + + + + + Polar + + + + + + + + + + Polar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ln + + + exp + + + arcsin + + + arccos + + + arctan + + + arcsec + + + arccsc + + + arccot + + + arcsinh + + + arccosh + + + arctanh + + + arcsech + + + arccsch + + + arccoth + + + sin + + + cos + + + tan + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Λ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + + + + + + + + + + + + / + + + + + + + + + + e + + + + + + + + + + + + ! + + + + + + + + + + max + + + min + + + + + + + + + + + | + + + + + + + + + + + + + + max + + + min + + + + + + + + + | + + + + + + + max + + + min + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + gcd + + + + gcd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + not + + + + + + + + + + for all + + + + + + + : + + , + + + + + + + + + + + + + + + + , + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + arg + + + Real + + + Imaginary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + = + + + > + + + < + + + + + + + + + + + + + + + + + + + + + + + + + + ln + + + + + ln + + + + + + + + + + + + + + + + log + + + + + + log + + + + + + + + log + + + + log + + + + + + + + + + + + + + + + + + + + + + + + + d + + + + d + + + + + + + + + + d + + d + + + + + + + + + + + + + + + + d + + + + d + + + + + + + + + + d + + d + + + + + + + + + + + + + + + + + + div + + + grad + + + curl + + + + + + + + + + + + + + + + + + + Δ + 2 + + + + + + + + + + + + + + | + + + + + + + + + | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + + + + + + + + + + + + + + + + + + + + + + + + + + + lim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sin + + + cos + + + tan + + + sec + + + csc + + + cot + + + sinh + + + cosh + + + tanh + + + sech + + + csch + + + coth + + + arcsin + + + arccos + + + arctan + + + + + + + + + + + + + + + + + + + + σ + + + + + + + + + + + + σ + + + + + + + 2 + + + + + + + + median + + + + + + + + + + + + mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + T + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + diff --git a/helm/style/mml2mmlv1_0_original.xsl b/helm/style/mml2mmlv1_0_original.xsl new file mode 100644 index 000000000..44c34df74 --- /dev/null +++ b/helm/style/mml2mmlv1_0_original.xsl @@ -0,0 +1,1848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + i + + + + + + + + - + + + + + + + + + i + + + + + + + + / + + + + + + + + / + + + + + + + + Polar + + + + + + + + + + Polar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ln + + + exp + + + arcsin + + + arccos + + + arctan + + + arcsec + + + arccsc + + + arccot + + + arcsinh + + + arccosh + + + arctanh + + + arcsech + + + arccsch + + + arccoth + + + sin + + + cos + + + tan + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Λ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + + + + + + + + + + + / + + + + + + + + + + e + + + + + + + + + + + ! + + + + + + + + + max + + + min + + + + + + + + + + + | + + + + + + + + + + + + + + max + + + min + + + + + + + + + | + + + + + + + max + + + min + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + gcd + + + + gcd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + not + + + + + + + + + for all + + + + + + + : + + , + + + + + + + + + + + + + + + , + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + arg + + + Real + + + Imaginary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + = + + + > + + + < + + + + + + + + + + + + + + + + + + + + + + + + + ln + + + + + ln + + + + + + + + + + + + + + + log + + + + + + log + + + + + + + + log + + + + log + + + + + + + + + + + + + + + + + + + + + + + + d + + + + d + + + + + + + + + + d + + d + + + + + + + + + + + + + + + d + + + + d + + + + + + + + + + d + + d + + + + + + + + + + + + + + + + + div + + + grad + + + curl + + + + + + + + + + + + + + + + + + Δ + 2 + + + + + + + + + + + + + | + + + + + + + + + | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + + + + + + + + + + + + + + + + + + + + + + + + + + lim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sin + + + cos + + + tan + + + sec + + + csc + + + cot + + + sinh + + + cosh + + + tanh + + + sech + + + csch + + + coth + + + arcsin + + + arccos + + + arctan + + + + + + + + + + + + + + + + + + σ + + + + + + + + + + + σ + + + + + + + 2 + + + + + + + median + + + + + + + + + + + mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + T + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + diff --git a/helm/style/mmlextension.xsl b/helm/style/mmlextension.xsl new file mode 100644 index 000000000..566ccdf0a --- /dev/null +++ b/helm/style/mmlextension.xsl @@ -0,0 +1,1382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + type="text/xhtml" + + + + + + + + + + + + DEFINITION () OF TYPE + + + + + + + __ + + + + + + + + AS + + + + + + + __ + + + + + + + + + + + + + + + + + AXIOM () OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + UNFINISHED PROOF () + + + + + + + THESIS: + + + + + + + __ + + + + + + + + CONJECTURES: + + + + + + + + __ + : + + + + + + + + + CORRESPONDING PROOF: + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + INDUCTIVE DEFINITION + + + COINDUCTIVE DEFINITION + + + + + AND + + + _ + () + + + + + + + __ + [ + + + + + + + + + : + + + + + + + + + ] + + + + + + + ] + + + + + + + + + OF ARITY + + + + + + + __ + + + + + + + + BUILT FROM + + + + + + + + + + __ + + + | + _ + + + OF + _ + + + + + + + + + + + + + + + + + + + VARIABLE OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + Π + + + + + + + . + + + + + + + + Π + + : + + . + + + + + + + + + + + + ( + + + + + + + + + + + + + + + + ) + + + + + + + ( + + + + ) + + + + + + + + + + + ( + + + + + + + + + ( + + + + + + + + + ) + + + + + + + ( + + + _ + + + ) + + + + + + + + + + + ( + + + + + + + + :> + + + + + + + + ) + + + + + + + ( + + :> + + ) + + + + + Prop + + + Set + + + Type + + + + + + + + + + < + + + > + CASES + _ + + + + + + + + + + > + CASES + _ + + + + + + + + + OF + + + + + + + + + + + | + + + | + + + _ + + + + + + + + + + + + + |_ + + + + + + + + + + + END + + + + + + + <> + CASES + _ + + _ + OF + + + + | + + + + + + + _ + END + + + + + + + + + + + FIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + FIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + COFIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + COFIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + + + + + + + + + we proved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + + + Consider + + + + + + + + + + + + + + + Rewrite + _ + + _ + with + _ + + _ + by + _ + + _ + in + _ + + _ + and apply + _ + + + + + + + + + + + + + + + + + Consider + + + + + + + + + In particular, we have + + + + + + ( + + ) + + + + + + + + ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + Consider + _ + + + + + + + + + We prove + _ + + _ + by cases: + + + + + + * + + + + + + + + * + + + + + + + + ERROR + + + + + + + + + + + + + Rewrite + _ + + _ + with + _ + + _ + by + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + λ + + + + + + + . + + + + + + + + λ + + : + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + + + + + __ + + = + + + + + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + + + + + __ + + + + + + + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + + + + + + { + | + + + + + + } + + + + + + + + + { + + + , + + + + + + + { + + + , + + + + + + + } + + + + + + + + + + + + + + + + | + + | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + diff --git a/helm/style/mmlextension_andrea.xsl b/helm/style/mmlextension_andrea.xsl new file mode 100644 index 000000000..b4bbcdbdb --- /dev/null +++ b/helm/style/mmlextension_andrea.xsl @@ -0,0 +1,1052 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + type="text/xhtml" + + + + + + + + + + + + DEFINITION () OF TYPE + + + + + + + __ + + + + + + + + AS + + + + + + + __ + + + + + + + + + + + + + + + + + AXIOM () OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + UNFINISHED PROOF () + + + + + + + THESIS: + + + + + + + __ + + + + + + + + CONJECTURES: + + + + + + + + __ + : + + + + + + + + + CORRESPONDING PROOF: + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + INDUCTIVE DEFINITION + + + COINDUCTIVE DEFINITION + + + + + AND + + + _ + () + + + + + + + __ + [ + + + + + + + + + : + + + + + + + + + ] + + + + + + + ] + + + + + + + + + OF ARITY + + + + + + + __ + + + + + + + + BUILT FROM + + + + + + + + + + __ + + + | + _ + + + OF + _ + + + + + + + + + + + + + + + + + + + VARIABLE OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + Π + + + + + + + . + + + + + + + + Π + + : + + . + + + + + + + + + + + + ( + + + + + + + + + + + + + + + + ) + + + + + + + ( + + + + ) + + + + + + + + + + + ( + + + + + + + + + ( + + + + + + + + + ) + + + + + + + ( + + + _ + + + ) + + + + + + + + + + + ( + + + + + + + + :> + + + + + + + + ) + + + + + + + ( + + :> + + ) + + + + + Prop + + + Set + + + Type + + + + + + + + + + < + + + > + CASES + _ + + + + + + + + + + > + CASES + _ + + + + + + + + + OF + + + + + + + + + + + | + + + | + + + _ + + + + + + + + + + + + + |_ + + + + + + + + + + + END + + + + + + + <> + CASES + _ + + _ + OF + + + + | + + + + + + + _ + END + + + + + + + + + + + FIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + FIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + COFIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + COFIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + + + + + + + + λ + + + + + + + . + + + + + + + + λ + + : + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + + + + + + __ + + + + + + + + + + + ) + + + + + + + + + + + + + + + + + + + + + + { + + + + + + __ + | + + + + + + } + + + + + + + + + { + + + , + + + + + + + _ + + + , + + + + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + diff --git a/helm/style/mmlextension_irene.xsl b/helm/style/mmlextension_irene.xsl new file mode 100644 index 000000000..90852b79e --- /dev/null +++ b/helm/style/mmlextension_irene.xsl @@ -0,0 +1,868 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFINITION () OF TYPE + + + + + + + __ + + + + + + + + AS + + + + + + + __ + + + + + + + + + + + + + + + + + AXIOM () OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + UNFINISHED PROOF () + + + + + + + THESIS: + + + + + + + __ + + + + + + + + CONJECTURES: + + + + + + + + __ + : + + + + + + + + + CORRESPONDING PROOF: + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + INDUCTIVE DEFINITION + + + COINDUCTIVE DEFINITION + + + + + AND + + + _ + () + + + + + + + __ + [ + + + + + + + + + : + + + + + + + + + ] + + + + + + + ] + + + + + + + + + OF ARITY + + + + + + + __ + + + + + + + + BUILT FROM + + + + + + + + + + __ + + + | + _ + + + OF + _ + + + + + + + + + + + + + + + + + + + VARIABLE OF TYPE + + + + + + + __ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Π + + : + + + + + + + + + + + . + + + + + + + + + . + + + + + + + + Π + + : + + . + + + + + + + + + + + + ( + + + + + + + + + + + + + + + + ) + + + + + + + ( + + + + ) + + + + + + + + + + + ( + + + + + + + + + ( + + + + + + + + + ) + + + + + + + ( + + + _ + + + ) + + + + + + + + + + + ( + + + + + + + + :> + + + + + + + + ) + + + + + + + ( + + :> + + ) + + + + + Prop + + + Set + + + Type + + + + + + + + + + < + + + > + CASES + _ + + + + + + + + + + > + CASES + _ + + + + + + + + + OF + + + + + + + + + + + | + + + | + + + _ + + + + + + + + + + + + + |_ + + + + + + + + + + + END + + + + + + + <> + CASES + _ + + _ + OF + + + + | + + + + + + + _ + END + + + + + + + + + + + FIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + FIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + COFIX + _ + + { + + + + + + + __ + + + + + + + + : + + + + + + + + + + + := + + + + + + + + + := + + + + + + + + + + + + + } + + + + + + + COFIX + + { + + + + + + + : + + := + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + λ + + + : + + + + + + + + + + + . + + + + + + + + + . + + + + + + + + λ + + : + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + diff --git a/helm/style/objcontent.xsl b/helm/style/objcontent.xsl new file mode 100644 index 000000000..6ad0a4922 --- /dev/null +++ b/helm/style/objcontent.xsl @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + type="text/xml" + href="" type="text/xsl" + type="xslt" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PROD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + + + + + + + + + + + $ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/objcontent.xsl.csc b/helm/style/objcontent.xsl.csc new file mode 100644 index 000000000..d2a846cba --- /dev/null +++ b/helm/style/objcontent.xsl.csc @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + type="text/xml" + href="" type="text/xsl" + type="xslt" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PROD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + + + + + + + + + + + $ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/objcontent_old.xsl b/helm/style/objcontent_old.xsl new file mode 100644 index 000000000..d3514b499 --- /dev/null +++ b/helm/style/objcontent_old.xsl @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + type="text/xml" + href="" type="text/xsl" + type="xslt" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PROD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + + + + + + + + + + + + + + + + $ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/params.xsl b/helm/style/params.xsl new file mode 100644 index 000000000..034eeba97 --- /dev/null +++ b/helm/style/params.xsl @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + diff --git a/helm/style/proof31-10-00.xsl b/helm/style/proof31-10-00.xsl new file mode 100644 index 000000000..3c4234307 --- /dev/null +++ b/helm/style/proof31-10-00.xsl @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + rewrite + + + rw_step + + + + + + + + + + + and_ind + + + + + + + + + + + or_ind + + + + + + + + + proof + + + + + + + + + + + + + + + + + + + + + + + + + rw_step + + + + + + + + + + + + + + + + + + + + + + + + + + rewrite_and_apply + + rw_step + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + app + + * + * + * + + + + + + app + + + + + + + + + + + + + + diff --git a/helm/style/proofs.xsl b/helm/style/proofs.xsl new file mode 100644 index 000000000..88af829f8 --- /dev/null +++ b/helm/style/proofs.xsl @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + thread + + + rw_step + + + + + + + + + + thread + + + app + + + + + + + + + and_ind + + + + + + + + + + + or_ind + + + + + + + + + proof + + + + + + + + + + + + + + + + + + + + + + prev + + + + + + + + + + + + + + + rw_step + + + + + + + + + thread + + + + + + + + + + + + + + + + + + + + + + + + + + + rewrite_and_apply + + rw_step + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + + + app + + * + * + * + + + + + + app + + + + + + + + + + + + + + diff --git a/helm/style/reals.xsl b/helm/style/reals.xsl new file mode 100644 index 000000000..6c47f9562 --- /dev/null +++ b/helm/style/reals.xsl @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + 0 + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $x + + + + + + app + + $x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $x + + + app + + $x + + + + + + + + + + + + + + diff --git a/helm/style/ricerca.xsl b/helm/style/ricerca.xsl new file mode 100644 index 000000000..e0fa13a93 --- /dev/null +++ b/helm/style/ricerca.xsl @@ -0,0 +1,91 @@ + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + +
+
+ + +
+ + + + + + +
+
+
+ + + + + + +
+
+
+ + + + + + + + + + +
diff --git a/helm/style/rootcontent.xsl b/helm/style/rootcontent.xsl new file mode 100644 index 000000000..9e85f0344 --- /dev/null +++ b/helm/style/rootcontent.xsl @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/rootcontent_withproofs.xsl b/helm/style/rootcontent_withproofs.xsl new file mode 100644 index 000000000..11d668436 --- /dev/null +++ b/helm/style/rootcontent_withproofs.xsl @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/roottheory.xsl b/helm/style/roottheory.xsl new file mode 100644 index 000000000..d293ee6f2 --- /dev/null +++ b/helm/style/roottheory.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/set.xsl b/helm/style/set.xsl new file mode 100644 index 000000000..303c872ef --- /dev/null +++ b/helm/style/set.xsl @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/style/theory_content.xsl b/helm/style/theory_content.xsl new file mode 100644 index 000000000..9b65cc5b2 --- /dev/null +++ b/helm/style/theory_content.xsl @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + +http://localhost:8081/get?url= + + + + +
+ +
+
+ + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/helm/style/theory_pres.xsl b/helm/style/theory_pres.xsl new file mode 100644 index 000000000..9a96cdc03 --- /dev/null +++ b/helm/style/theory_pres.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + BEGIN SECTION + + END SECTION + + + + + BEGIN SECTION + + END SECTION + + + + + diff --git a/helm/xmltheory/Coq_v2theoryxml/.depend b/helm/xmltheory/Coq_v2theoryxml/.depend new file mode 100644 index 000000000..e69de29bb diff --git a/helm/xmltheory/Coq_v2theoryxml/Makefile b/helm/xmltheory/Coq_v2theoryxml/Makefile new file mode 100644 index 000000000..1f9fae538 --- /dev/null +++ b/helm/xmltheory/Coq_v2theoryxml/Makefile @@ -0,0 +1,17 @@ +COQTOP=/home/projects/helm/EXPORT/V7 +OCAMLC=ocamlc -I $(COQTOP)/config -I $(COQTOP)/toplevel + +COQV2THEORYXMLOBJS= \ + $(COQTOP)/config/coq_config.cmo \ + $(COQTOP)/toplevel/usage.cmo \ + coq_v2theoryxml.cmo + +coq_v2theoryxml: $(COQV2THEORYXMLOBJS) + $(OCAMLC) -o $@ unix.cma $(COQV2THEORYXMLOBJS) + +coq_v2theoryxml.cmo: coq_v2theoryxml.ml + $(OCAMLC) -c $< + +.PHONY: clean +clean: + rm -f coq_v2theoryxml *.cmo *.cmi diff --git a/helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml b/helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml new file mode 100644 index 000000000..b1e856e1a --- /dev/null +++ b/helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml @@ -0,0 +1,176 @@ +(* environment *) + +let environment = Unix.environment () + +let bindir = ref Coq_config.bindir +let binary = "coqtop.byte" +let image = ref "" +let xml_theory_library_root = ref ( + try + Sys.getenv "XML_THEORY_LIBRARY_ROOT" + with Not_found -> "" +) + +(* the $COQBIN environment variable has priority over the Coq_config value *) +let _ = + try + let c = Sys.getenv "COQBIN" in + if c <> "" then bindir := c + with Not_found -> () + +(* coq_v2theoryxml options *) + +let keep = ref false + +(* Verifies that a string do not contains others caracters than letters, + digits, or `_` *) + +let check_module_name s = + let err () = + output_string stderr + "Modules names must only contain letters, digits, or underscores\n"; + output_string stderr + "and must begin with a letter\n"; + exit 1 + in + match String.get s 0 with + | 'a' .. 'z' | 'A' .. 'Z' -> + for i = 1 to (String.length s)-1 do + match String.get s i with + | 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' -> () + | _ -> err () + done + | _ -> err () + + (* compilation of a file [file] with command [command] and args [args] *) + +let compile command args file = + let dirname = Filename.dirname file in + let basename = Filename.basename file in + let modulename = + if Filename.check_suffix basename ".vo" then + Filename.chop_suffix basename ".vo" + else + basename + in + check_module_name modulename; + let tmpfile = Filename.temp_file "coq_v2theoryxml" ".v" in + let args' = + command :: "-batch" :: "-silent" :: "-is" :: "barestate" :: args + @ ["-load-vernac-source"; tmpfile] in + let devnull = + if Sys.os_type = "Unix" then + Unix.openfile "/dev/null" [] 0o777 + else + Unix.stdin + in + let oc = open_out tmpfile in + Printf.fprintf oc "Require XmlTheory.\n" ; + Printf.fprintf oc "XmlTheory Begin %s \"%s\".\n" modulename + !xml_theory_library_root ; + Printf.fprintf oc "Load %s.\n" modulename; + Printf.fprintf oc "XmlTheory End.\n" ; + flush oc; + close_out oc; + try + let pid = + Unix.create_process_env command + (Array.of_list args') environment devnull Unix.stdout Unix.stderr in + let status = Unix.waitpid [] pid in + if not !keep then Sys.remove tmpfile ; + match status with + | _, Unix.WEXITED 0 -> () + | _, Unix.WEXITED 127 -> + Printf.printf "Cannot execute %s\n" command; + exit 1 + | _, Unix.WEXITED c -> exit c + | _ -> exit 1 + with _ -> + if not !keep then Sys.remove tmpfile; exit 1 + +(* parsing of the command line + * + * special treatment for -bindir and -i. + * other options are passed to coqtop *) + +let usage () = + Usage.print_usage + "Usage: coq_v2theoryxml module...\n +options are: + -xml-theory-library-root d specify the path to the root of the XML library + (overrides $XML_THEORY_LIBRARY_ROOT) + -image f specify an alternative executable for Coq + -t keep temporary files\n\n" ; + flush stderr ; + exit 1 + +let parse_args () = + let rec parse (cfiles,args) = function + | [] -> + List.rev cfiles, List.rev args + | "-xml-theory-library-root" :: v :: rem -> + xml_theory_library_root := v ; parse (cfiles,args) rem + | "-t" :: rem -> + keep := true ; parse (cfiles,args) rem + | "-boot" :: rem -> + bindir:= Filename.concat Coq_config.coqtop "bin"; + parse (cfiles, "-boot"::args) rem + | "-bindir" :: d :: rem -> + bindir := d ; parse (cfiles,args) rem + | "-bindir" :: [] -> + usage () + | "-byte" :: rem -> + parse (cfiles,args) rem + | "-opt" :: rem -> + raise (Failure "To load ML modules, only -byte is allowed") + | "-image" :: f :: rem -> + image := f; parse (cfiles,args) rem + | "-image" :: [] -> + usage () + | ("-?"|"-h"|"-H"|"-help"|"--help") :: _ -> usage () + | ("-libdir"|"-outputstate"|"-I"|"-include" + |"-inputstate"|"-is"|"-load-vernac-source"|"-load-vernac-object" + |"-load-ml-source"|"-require"|"-load-ml-object"|"-user" + |"-init-file" as o) :: rem -> + begin + match rem with + | s :: rem' -> parse (cfiles,s::o::args) rem' + | [] -> usage () + end + | "-R" as o :: s :: t :: rem -> parse (cfiles,t::s::o::args) rem + | ("-notactics"|"-debug"|"-db"|"-debugger"|"-nolib"|"-batch"|"-nois" + |"-q"|"-full"|"-profile"|"-just-parsing"|"-echo" |"-unsafe"|"-quiet" + |"-silent"|"-m" as o) :: rem -> + parse (cfiles,o::args) rem + | ("-v"|"--version") :: _ -> + Usage.version () + | "-where" :: _ -> + print_endline Coq_config.coqlib; exit 0 + | f :: rem -> parse (f::cfiles,args) rem + in + parse ([],[]) (List.tl (Array.to_list Sys.argv)) + +(* main: we parse the command line, define the command to compile files + * and then call the compilation on each file *) + +let main () = + let cfiles, args = parse_args () in + if cfiles = [] then begin + prerr_endline "coq_v2theoryxml: too few arguments" ; + usage () + end; + let coqtopname = + if !image <> "" then !image else Filename.concat !bindir (binary ^ Coq_config.exec_extension) + in + if !xml_theory_library_root = "" then + begin + prerr_endline "coq_v2theoryxml: you must either set $XML_THEORY_LIBRARY_ROOT or use -xml-theory-library-root"; + usage () + end + else + List.iter (compile coqtopname args) cfiles ; + prerr_endline + ("\nWARNING: all the URIs in the generated XML files are broken." ^ + "\n See the README in the XML contrib to learn how to fix them.\n") + +let _ = Printexc.print main (); exit 0 diff --git a/helm/xmltheory/FakeCoq_vo2xml/README b/helm/xmltheory/FakeCoq_vo2xml/README new file mode 100644 index 000000000..4accfcafc --- /dev/null +++ b/helm/xmltheory/FakeCoq_vo2xml/README @@ -0,0 +1,3 @@ +# This coq_vo2xml must be put in PATH before the real coq_vo2xml. +# It's aim is to run coq_v2theoryxml instead of coq_vo2xml +# Remember to set $XML_THEORY_LIBRARY_ROOT before starting this coq_vo2xml diff --git a/helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml b/helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml new file mode 100755 index 000000000..34e44a0a4 --- /dev/null +++ b/helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml @@ -0,0 +1,4 @@ +#!/bin/bash + +BASEDIR=/home/projects/helm/EXPORT/xmltheory +$BASEDIR/Coq_v2theoryxml/coq_v2theoryxml -R $BASEDIR/XmlTheory Bologna.XmlTheory $@ diff --git a/helm/xmltheory/XmlTheory/.depend b/helm/xmltheory/XmlTheory/.depend new file mode 100644 index 000000000..2b814a941 --- /dev/null +++ b/helm/xmltheory/XmlTheory/.depend @@ -0,0 +1,8 @@ +xmltheoryentries.cmo: xmltheoryentries.ml iXml.cmi +xmltheoryentries.cmx: xmltheoryentries.ml iXml.cmx +iXml.cmo: iXml.ml iXml.cmi +iXml.cmx: iXml.ml iXml.cmi +iXml.cmi: iXml.mli +XmlTheory.vo: XmlTheory.v iXml.cmo xmltheoryentries.cmo +XmlTheory.vi: XmlTheory.v iXml.cmo xmltheoryentries.cmo +XmlTheory.html: XmlTheory.v iXml.cmo xmltheoryentries.cmo diff --git a/helm/xmltheory/XmlTheory/COME_COMPILARE b/helm/xmltheory/XmlTheory/COME_COMPILARE new file mode 100644 index 000000000..f1389cc35 --- /dev/null +++ b/helm/xmltheory/XmlTheory/COME_COMPILARE @@ -0,0 +1,5 @@ +# Settare + +OPT=-byte # Nota: questo andrebbe fatto nel Make, ma un bug di coq_makefile + # lo impedisce +COQTOP=... diff --git a/helm/xmltheory/XmlTheory/Make b/helm/xmltheory/XmlTheory/Make new file mode 100644 index 000000000..a927b6345 --- /dev/null +++ b/helm/xmltheory/XmlTheory/Make @@ -0,0 +1,5 @@ +-R . Bologna.XmlTheory +-I $(COQTOP)/contrib/xml +XmlTheory.v +iXml.ml +xmltheoryentries.ml diff --git a/helm/xmltheory/XmlTheory/Makefile b/helm/xmltheory/XmlTheory/Makefile new file mode 100644 index 000000000..1dc9d35c4 --- /dev/null +++ b/helm/xmltheory/XmlTheory/Makefile @@ -0,0 +1,165 @@ +############################################################################## +## The Calculus of Inductive Constructions ## +## ## +## Projet Coq ## +## ## +## INRIA ENS-CNRS ## +## Rocquencourt Lyon ## +## ## +## Coq V7 ## +## ## +## ## +############################################################################## + +# WARNING +# +# This Makefile has been automagically generated by coq_makefile +# Edit at your own risks ! +# +# END OF WARNING + +# +# This Makefile was generated by the command line : +# coq_makefile -f Make -o Makefile +# + +########################## +# # +# Variables definitions. # +# # +########################## + +CAMLP4LIB=`camlp4 -where` +MAKE=make "COQBIN=$(COQBIN)" "OPT=$(OPT)" +COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ + -I $(COQTOP)/library -I $(COQTOP)/parsing -I $(COQTOP)/pretyping \ + -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ + -I $(COQTOP)/toplevel -I $(CAMLP4LIB) +ZFLAGS=$(OCAMLLIBS) $(COQSRC) +COQFLAGS=-q $(OPT) $(COQLIBS) +COQC=$(COQBIN)coqc +COQFULL=$(COQBIN)coqc $(FULLOPT) -q $(COQLIBS) +GALLINA=gallina +COQ2HTML=coq2html +COQ2LATEX=coq2latex +CAMLC=ocamlc -c +CAMLOPTC=ocamlopt -c +CAMLLINK=ocamlc +CAMLOPTLINK=ocamlopt +COQDEP=$(COQBIN)coqdep -c +COQVO2XML=coq_vo2xml + +######################### +# # +# Libraries definition. # +# # +######################### + +OCAMLLIBS=-I .\ + -I $(COQTOP)/contrib/xml +COQLIBS=-I .\ + -R . Bologna.XmlTheory\ + -I $(COQTOP)/contrib/xml + +################################### +# # +# Definition of the "all" target. # +# # +################################### + +all: XmlTheory.vo\ + iXml.cmo\ + xmltheoryentries.cmo + +spec: XmlTheory.vi + +gallina: XmlTheory.g + +html: XmlTheory.html + +tex: XmlTheory.tex + +gallinatex: XmlTheory.g.tex + +gallinahtml: XmlTheory.g.html + +xml: .xml_time_stamp +.xml_time_stamp: XmlTheory.vo + $(COQVO2XML) $(COQFLAGS) $(?:%.o=%) + touch .xml_time_stamp + +#################### +# # +# Special targets. # +# # +#################### + +.PHONY: all opt byte archclean clean install depend xml + +.SUFFIXES: .mli .ml .cmo .cmi .cmx .v .vo .vi .g .html .tex .g.tex .g.html + +.mli.cmi: + $(CAMLC) $(ZDEBUG) $(ZFLAGS) $< + +.ml.cmo: + $(CAMLC) $(ZDEBUG) $(ZFLAGS) $< + +.ml.cmx: + $(CAMLOPTC) $(ZDEBUG) $(ZFLAGS) $< + +.v.vo: + $(COQC) $(COQDEBUG) $(COQFLAGS) $* + +.v.vi: + $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* + +.v.g: + $(GALLINA) $< + +.v.html: + $(COQ2HTML) $< + +.v.tex: + $(COQ2LATEX) $< -latex -o $@ + +.v.g.html: + $(GALLINA) -stdout $< | $(COQ2HTML) -f > $@ + +.v.g.tex: + $(GALLINA) -stdout $< | $(COQ2LATEX) - -latex -o $@ + +byte: + $(MAKE) all "OPT=" + +opt: + $(MAKE) all "OPT=-opt" + +include .depend + +depend: + rm .depend + $(COQDEP) -i $(COQLIBS) *.v *.ml *.mli >.depend + $(COQDEP) $(COQLIBS) -suffix .html *.v >>.depend + +install: + @if test -z $(TARGETDIR); then echo "You must set TARGETDIR (for instance with 'make TARGETDIR=foobla install')"; exit 1; fi + cp -f *.vo $(TARGETDIR) + cp -f *.cmo $(TARGETDIR) + +Makefile: Make + mv -f Makefile Makefile.bak + $(COQBIN)coq_makefile -f Make -o Makefile + +clean: + rm -f *.cmo *.cmi *.cmx *.o *.vo *.vi *~ + +archclean: + rm -f *.cmx *.o + +# WARNING +# +# This Makefile has been automagically generated by coq_makefile +# Edit at your own risks ! +# +# END OF WARNING + diff --git a/helm/xmltheory/XmlTheory/README b/helm/xmltheory/XmlTheory/README new file mode 100644 index 000000000..ce4c86c98 --- /dev/null +++ b/helm/xmltheory/XmlTheory/README @@ -0,0 +1,78 @@ +Here we show the procedure to follow to add the recognition of +a new syntactical form. + +Form to recognize in the model: + +Lemma existsDec : (l:(list A)){(list_exists l)}+{~(list_exists l)}. + +1. cd V7 ; grep "Lemma" */*.ml4 + the result should be one or a few files. In this case the + only file is parsing/g_vernac.ml4. In the case of many files, + only one is the good one. +2. open the file and search for Lemma: + thm_tok: + [ [ "Theorem" -> <:ast< "THEOREM" >> + | IDENT "Lemma" -> <:ast< "LEMMA" >> + | IDENT "Fact" -> <:ast< "FACT" >> + | IDENT "Remark" -> <:ast< "REMARK" >> + | IDENT "Decl" -> <:ast< "DECL" >> ] ] + + so a Lemma is mapped into an ast of phylum thm_tok. + Let's search for thm_tok. Many occurrences are found, + but the only one that matches the form to recognize is + + gallina: + (* Definition, Goal *) + [ [ thm = thm_tok; id = identarg; ":"; c = constrarg -> + <:ast< (StartProof $thm $id $c) >> + + So the ast created is tagged StartProof +3. grep "StartProof" */*.ml (usually toplevel/...) + Open the file and search for StartProof. + This is found: + let _ = + add "StartProof" + (function + | [VARG_STRING kind;VARG_IDENTIFIER s;VARG_CONSTR com] -> + ... +4. edit xmltheoryentries.ml and copy the entry for another rule, + substituting StartProof as the parameter for set_hook and + using the above match (with V. added where appropriate) after function: + +let module V = Vernacinterp in + set_hook "StartProof" + (function + [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] -> + ??? + | _ -> fail () + ) +;; + + Finally, write OCaml code to print to XML the availables interesting + infos. In our case the code becomes + +let module V = Vernacinterp in + set_hook "StartProof" + (function + [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] -> + IXml.output + (Xml.xml_empty + "THEOREM" + ["uri", Names.string_of_id s ^ ".con"; "as",kind] + ) + | _ -> fail () + ) +;; + + IXml.output should always be present and the code inside + (that is simply XML written in OCaml form) should be changed. + The syntax is + Xml.xml_empty "name" ["att1","value1" ; ... ; "attn","valuen"] + to create an empty element name with attributes att1 ... attn. + To create a non-empty element, use + Xml.xml_nempty "name" ["att1","value1" ; ... ; "attn","valuen"] + stream + where stream is an OCaml stream of other XML elements, as: + * another Xml.xml_nempty + * an Xml.xml_empty + * [< stream1 ; ... ; streamk >] diff --git a/helm/xmltheory/XmlTheory/XmlTheory.v b/helm/xmltheory/XmlTheory/XmlTheory.v new file mode 100644 index 000000000..54fdf82e6 --- /dev/null +++ b/helm/xmltheory/XmlTheory/XmlTheory.v @@ -0,0 +1,15 @@ +Declare ML Module "iXml" "xmltheoryentries". + +(*Vecchio, ma funzionante +Grammar vernac vernac : ast := + xml_theory_begin [ "XmlTheory" "Begin" stringarg($s) stringarg($f) "." ] -> + [(XMLTHEORYBEGIN $s $f)] +| xml_theory_end [ "XmlTheory" "End" "." ] -> + [(XMLTHEORYEND)]. +*) + +Grammar vernac vernac : ast := + xml_theory_begin [ "XmlTheory" "Begin" identarg($s) stringarg($f) "." ] -> + [(XMLTHEORYBEGIN $s $f)] +| xml_theory_end [ "XmlTheory" "End" "." ] -> + [(XMLTHEORYEND)]. diff --git a/helm/xmltheory/XmlTheory/iXml.ml b/helm/xmltheory/XmlTheory/iXml.ml new file mode 100644 index 000000000..98fb186d8 --- /dev/null +++ b/helm/xmltheory/XmlTheory/iXml.ml @@ -0,0 +1,53 @@ +exception NoOpenNonEmptyElements + +type sectionTree = + Leaf of Xml.token Stream.t + | Node of string * (string * string) list * sectionTree list ref +;; + +let rec token_stream_of_section_tree_list = + function + he::tl -> + [< token_stream_of_section_tree_list tl; token_stream_of_section_tree he >] + | [] -> [<>] +and token_stream_of_section_tree = + function + Leaf t -> [< t >] + | Node (elem_name, attr_list, section_tree) -> + Xml.xml_nempty elem_name attr_list + (token_stream_of_section_tree_list !section_tree) +;; + +let section_stack = ref [];; +let xmloutput = ref (ref []);; +let filename = ref "";; + +let reset_output fname = + filename := fname ; + xmloutput := ref [] ; + section_stack := [] +;; + +let output n = + let xmloutput = !xmloutput in + xmloutput := (Leaf n) :: !xmloutput +;; + +let open_non_empty_element elem_name attr_list = + let newxmloutput = ref [] in + !xmloutput := (Node (elem_name, attr_list, newxmloutput)) :: !(!xmloutput) ; + section_stack := !xmloutput :: !section_stack ; + xmloutput := newxmloutput +;; + +let close_non_empty_element () = + match !section_stack with + oldxmloutput::oldsection_stack -> + xmloutput := oldxmloutput ; + section_stack := oldsection_stack + | _ -> raise NoOpenNonEmptyElements +;; + +let print_output () = + Xml.pp (token_stream_of_section_tree_list !(!xmloutput)) (Some !filename) +;; diff --git a/helm/xmltheory/XmlTheory/iXml.mli b/helm/xmltheory/XmlTheory/iXml.mli new file mode 100644 index 000000000..11fad8202 --- /dev/null +++ b/helm/xmltheory/XmlTheory/iXml.mli @@ -0,0 +1,7 @@ +exception NoOpenNonEmptyElements + +val reset_output : string -> unit +val output : Xml.token Stream.t -> unit +val open_non_empty_element : string -> (string * string) list -> unit +val close_non_empty_element : unit -> unit +val print_output : unit -> unit diff --git a/helm/xmltheory/XmlTheory/xmltheoryentries.ml b/helm/xmltheory/XmlTheory/xmltheoryentries.ml new file mode 100644 index 000000000..de3c5030a --- /dev/null +++ b/helm/xmltheory/XmlTheory/xmltheoryentries.ml @@ -0,0 +1,371 @@ +(*********************) +(* Utility functions *) +(*********************) + +let fail () = + Pp.warning "XmlTheory: AST not recognized" +;; + +(* name is the name of the function to hook *) +(* hook is an hook partial-function to recognize particular inputs *) +let set_hook name hook = + let module V = Vernacinterp in + let old = V.vinterp_map name in + V.vinterp_add name + (fun l () -> + old l () ; + hook l + ) +;; + + +(*****************************************************) +(* Vernacular administrative commands for the module *) +(*****************************************************) + +let header = +"\n" ^ +"\n" +;; + +(*Vecchio, ma funzionante +let module V = Vernacinterp in + V.vinterp_add "XMLTHEORYBEGIN" + (function + [V.VARG_STRING curi ; V.VARG_STRING filename] -> + fun () -> + IXml.reset_output filename ; + IXml.output (Xml.xml_cdata header) ; + IXml.open_non_empty_element "Theory" ["uri","cic:" ^ curi] + | _ -> V.bad_vernac_args "XMLTHEORYBEGIN" + ) +;; +*) + +let module V = Vernacinterp in +let module L = Library in +let module S = System in +let module N = Names in + V.vinterp_add "XMLTHEORYBEGIN" + (function + [V.VARG_IDENTIFIER id ; V.VARG_STRING root_dir] -> + fun () -> + let s = N.string_of_id id in + let lpe,_ = + S.find_file_in_path (L.get_load_path ()) (s^".v") + in + let curi = "/" ^ String.concat "/" lpe.S.coq_dirpath in + let dirname = root_dir ^ curi in + Unix.system ("mkdir -p " ^ dirname) ; + let filename = dirname ^ "/" ^ s ^ ".theory" in + IXml.reset_output filename ; + IXml.output (Xml.xml_cdata header) ; + IXml.open_non_empty_element "Theory" ["uri","cic:" ^ curi ^ "/" ^ s] + | _ -> V.bad_vernac_args "XMLTHEORYBEGIN" + ) +;; + +let module V = Vernacinterp in + V.vinterp_add "XMLTHEORYEND" + (function + [] -> + fun () -> + IXml.close_non_empty_element () ; + IXml.print_output () + | _ -> V.bad_vernac_args "XMLTHEORYEND" + ) +;; + + +(**********************************************************) +(* All the vernacular commands on which one is interested *) +(* should be overridden here *) +(**********************************************************) + +let module V = Vernacinterp in +let module N = Names in +let module S = System in +let module L = Library in + set_hook "Require" + (function + [V.VARG_STRING import; V.VARG_STRING specif; V.VARG_IDENTIFIER id] -> + (* id is the identifier of the module, but we need the absolute *) + (* identifier as an URI. *) + (* E.g.: Logic ==> theory:/Coq/Init/Logic.theory *) + let name = N.string_of_id id in + let ({S.coq_dirpath = coq_dirpath},_) = L.module_filename name in + let uri = + "theory:/" ^ (String.concat "/" coq_dirpath) ^ "/" ^ name ^ ".theory" + in + IXml.output + (Xml.xml_nempty "vernacular" [] + (Xml.xml_empty + "Require" + ["import",import; "specif",specif; "uri",uri] + ) + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in +let module T = Nametab in +let module N = Names in + set_hook "HintsResolve" + (function + (V.VARG_VARGLIST l)::lh -> + IXml.output + (Xml.xml_nempty "vernacular" [] + (Xml.xml_nempty + "HintsResolve" [] + [< Xml.xml_nempty "dbs" [] + (List.fold_right + (function + (V.VARG_IDENTIFIER x) -> + (function i -> + [< Xml.xml_empty "db" ["name",N.string_of_id x]; + i + >] + ) + | _ -> Vernacinterp.bad_vernac_args "HintsResolve" + ) + l [<>]) ; + Xml.xml_nempty "hints" [] + (List.fold_right + (function + (V.VARG_QUALID x) -> + (function i -> + [< Xml.xml_empty "hint" ["name",T.string_of_qualid x]; + i + >] + ) + | _ -> Vernacinterp.bad_vernac_args "HintsResolve" + ) + lh [<>] + ) + >] + ) + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "IMPLICIT_ARGS_ON" + (function + [] -> + IXml.output + (Xml.xml_nempty "vernacular" [] + (Xml.xml_empty + "ImplicitArguments" + ["status","ON"] + ) + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "DEFINITION" + (function + (* Coq anomaly: a Local definition is a Definition at the syntax *) + (* level but a Variable at the logical level. Here we have to *) + (* recognize the two cases and treat them differently *) + (V.VARG_STRING "LOCAL":: V.VARG_IDENTIFIER id:: V.VARG_CONSTR c:: rest) -> + IXml.output + (Xml.xml_nempty "VARIABLES" ["as","LOCAL"] + (Xml.xml_empty + "VARIABLE" + ["uri",Names.string_of_id id ^ ".var"] + ) + ) + | (V.VARG_STRING kind:: V.VARG_IDENTIFIER id:: V.VARG_CONSTR c :: rest) -> + IXml.output + (Xml.xml_empty + "DEFINITION" + ["uri", Names.string_of_id id ^ ".con" ; "as",kind] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "BeginSection" + (function + [V.VARG_IDENTIFIER id] -> + IXml.open_non_empty_element "SECTION" ["uri", Names.string_of_id id] + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "EndSection" + (function + [V.VARG_IDENTIFIER id] -> + IXml.close_non_empty_element () + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "StartProof" + (function + [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] -> + IXml.output + (Xml.xml_empty + "THEOREM" + ["uri", Names.string_of_id s ^ ".con"; "as",kind] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "MUTUALINDUCTIVE" + (function + [V.VARG_STRING f; V.VARG_VARGLIST indl] -> + (* we need the name of the first inductive defined *) + (* type in the block to get the URI *) + let name = + match indl with + (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name + | _ -> assert false + in + IXml.output + (Xml.xml_empty + "DEFINITION" + ["uri", Names.string_of_id name ^ ".ind"; "as",f] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "VARIABLE" + (function + [V.VARG_STRING kind; V.VARG_BINDERLIST slcl] -> + (* here we need all the names *) + let names = + List.flatten (List.map fst slcl) + in + IXml.output + (Xml.xml_nempty "VARIABLES" ["as",kind] + (List.fold_right + (fun name s -> + [< (Xml.xml_empty + "VARIABLE" + ["uri",Names.string_of_id name ^ ".var"] + ) ; s + >] + ) names [<>] + ) + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in +let module T = Nametab in +let module N = Names in + set_hook "COERCION" + (function + [V.VARG_STRING kind; V.VARG_STRING identity; V.VARG_QUALID qid; + V.VARG_QUALID qids; V.VARG_QUALID qidt] -> + (* let's substitute empty strings with non-empty strings *) + (* to get a stricter DTD *) + let remove_empty_string s = if s = "" then "UNSPECIFIED" else s in + let kind = remove_empty_string kind in + let identity = remove_empty_string identity in + IXml.output + (Xml.xml_nempty "vernacular" [] + (Xml.xml_empty + "Coercion" + ["kind",kind; "identity",identity ; "name",T.string_of_qualid qid ; + "source",T.string_of_qualid qids;"target",T.string_of_qualid qidt] + ) + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "MUTUALRECURSIVE" + (function + [V.VARG_VARGLIST lmi] -> + (* we need the name of the first inductive defined *) + (* type in the block to get the URI *) + let name = + match lmi with + (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name + | _ -> assert false + in + IXml.output + (Xml.xml_empty + "DEFINITION" + ["uri", Names.string_of_id name ^ ".con" ; "as","Fixpoint"] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "MUTUALCORECURSIVE" + (function + [V.VARG_VARGLIST lmi] -> + (* we need the name of the first inductive defined *) + (* type in the block to get the URI *) + let name = + match lmi with + (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name + | _ -> assert false + in + IXml.output + (Xml.xml_empty + "DEFINITION" + ["uri", Names.string_of_id name ^ ".con" ; "as","CoFixpoint"] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "RECORD" + (function + [V.VARG_STRING coe; + V.VARG_IDENTIFIER struc; + V.VARG_BINDERLIST binders; + V.VARG_CONSTR sort; + V.VARG_VARGLIST namec; + V.VARG_VARGLIST cfs] -> + IXml.output + (Xml.xml_empty + "DEFINITION" + ["uri", Names.string_of_id struc ^ ".ind" ; "as","Record"] + ) + | _ -> fail () + ) +;; + +let module V = Vernacinterp in + set_hook "PARAMETER" + (function + [V.VARG_STRING kind; V.VARG_BINDERLIST slcl] -> + (* here we need all the names *) + let names = + List.flatten (List.map fst slcl) + in + IXml.output + (Xml.xml_nempty "AXIOMS" ["as",kind] + (List.fold_right + (fun name s -> + [< (Xml.xml_empty + "AXIOM" + ["uri",Names.string_of_id name ^ ".con"] + ) ; s + >] + ) names [<>] + ) + ) + | _ -> fail () + ) +;; diff --git a/helm/xmltheory/maththeory.dtd b/helm/xmltheory/maththeory.dtd new file mode 100644 index 000000000..f010b6500 --- /dev/null +++ b/helm/xmltheory/maththeory.dtd @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helm/xsltd/Makefile b/helm/xsltd/Makefile new file mode 100644 index 000000000..83c51d9d5 --- /dev/null +++ b/helm/xsltd/Makefile @@ -0,0 +1,29 @@ +start-xaland: + java -ss1024K -oss8192K \ + xaland 12345 12346 \ + $(HELM_STYLES_DIR)/rootcontent.xsl \ + $(HELM_STYLES_DIR)/annotatedpres.xsl \ + $(HELM_STYLES_DIR)/theory_content.xsl \ + $(HELM_STYLES_DIR)/theory_pres.xsl + +start-xaland-2: + java -ss1024K -oss8192K \ + xaland2 12345 12346 \ + $(HELM_STYLES_DIR)/rootcontent.xsl \ + $(HELM_STYLES_DIR)/annotatedpres.xsl \ + $(HELM_STYLES_DIR)/theory_content.xsl \ + $(HELM_STYLES_DIR)/theory_pres.xsl + +start-xaland-old: + java xaland 12345 12346 \ + $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/rootcontent.xsl \ + $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/annotatedpres.xsl \ + $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/theory_content.xsl \ + $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/theory_pres.xsl + +start-xaland3: + java xaland 12347 12348 \ + $(HELM_STYLES_DIR)/rootcontent.xsl \ + $(HELM_STYLES_DIR)/annotatedpres.xsl \ + $(HELM_STYLES_DIR)/theory_content.xsl \ + $(HELM_STYLES_DIR)/theory_pres.xsl diff --git a/helm/xsltd/cadet b/helm/xsltd/cadet new file mode 100755 index 000000000..6206c54cd --- /dev/null +++ b/helm/xsltd/cadet @@ -0,0 +1,11 @@ +#! /bin/sh + +export PATH=~/HELM/installation/jdk118/bin:$PATH + +#export CLASSPATH=/home/cadet/sacerdot/xalan-j_1_1/xalan.jar:/home/cadet/sacerdot/xalan-j_1_1/xerces.jar:. +export CLASSPATH=~/HELM/installation/xalan-j_1_2/xalan.jar:~/HELM/installation/xalan-j_1_2/xerces.jar:. +#export CLASSPATH=~/HELM/installation/xalan-j_1_2_1/xalan.jar:~/HELM/installation/xalan-j_1_2_1/xerces.jar:. +#export CLASSPATH=/home/cadet/sacerdot/xalan-j_2_0_D01/bin/xalan.jar:/home/cadet/sacerdot/xalan-j_2_0_D01/bin/xerces.jar:. + +export HELM_STYLES_DIR=../V6.2/examples/style +#export HELM_STYLES_DIR=../V7/examples/style diff --git a/helm/xsltd/isterix b/helm/xsltd/isterix new file mode 100755 index 000000000..e11d92c8b --- /dev/null +++ b/helm/xsltd/isterix @@ -0,0 +1,10 @@ +#! /bin/sh + +export PATH=$PATH:/opt/java/jdk118/bin/ + +export CLASSPATH=. +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xalan.jar +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xerces.jar +export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/saxon-5.3.2/saxon.jar + +export HELM_STYLES_DIR=../V6.2/examples/style diff --git a/helm/xsltd/xaland-cpp/xaland.cpp b/helm/xsltd/xaland-cpp/xaland.cpp new file mode 100644 index 000000000..e22140267 --- /dev/null +++ b/helm/xsltd/xaland-cpp/xaland.cpp @@ -0,0 +1,207 @@ +// Base header file. Must be first. +#include + +#include +#include + +#include + +#include + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +int main(int argc, const char* []) +{ +#if !defined(XALAN_NO_NAMESPACES) + using std::cerr; + using std::endl; + using std::ofstream; +#endif + + if (argc != 1) { + cerr << "Usage: SimpleTransform" + << endl + << endl; + } else { + try { + // Call the static initializer for Xerces... + XMLPlatformUtils::Initialize(); + + { + // Initialize the Xalan XSLT subsystem... + XSLTInit theInit; + + // Create the support objects that are necessary for + // running the processor... + XercesDOMSupport theDOMSupport; + XercesParserLiaison theParserLiaison(theDOMSupport); + XPathSupportDefault theXPathSupport(theDOMSupport); + XSLTProcessorEnvSupportDefault theXSLTProcessorEnvSupport; + XObjectFactoryDefault theXObjectFactory; + XPathFactoryDefault theXPathFactory; + + // Create a processor... + XSLTEngineImpl theProcessor( + theParserLiaison, + theXPathSupport, + theXSLTProcessorEnvSupport, + theDOMSupport, + theXObjectFactory, + theXPathFactory); + + // Connect the processor to the support object... + theXSLTProcessorEnvSupport.setProcessor(&theProcessor); + + // Create a stylesheet construction context, and a stylesheet + // execution context... + StylesheetConstructionContextDefault theConstructionContext( + theProcessor, + theXSLTProcessorEnvSupport, + theXPathFactory); + + StylesheetExecutionContextDefault theExecutionContext( + theProcessor, + theXSLTProcessorEnvSupport, + theXPathSupport, + theXObjectFactory); + + // Our input files...The assumption is that the executable will be + // run from same directory as the input files. + const XalanDOMString theXMLFileName("foo.xml"); + const XalanDOMString theXSLFileName("foo.xsl"); + + // Our input sources... + XSLTInputSource theInputSource(c_wstr(theXMLFileName)); + XSLTInputSource theStylesheetSource(c_wstr(theXSLFileName)); + + // Our output target... + const XalanDOMString theOutputFileName("foo.out"); + XSLTResultTarget theResultTarget(theOutputFileName); + + theProcessor.process( + theInputSource, + theStylesheetSource, + theResultTarget, + theConstructionContext, + theExecutionContext); + + } + + // Call the static terminator for Xerces... + XMLPlatformUtils::Terminate(); + } + catch(...) { + cerr << "Exception caught!!!" + << endl + << endl; + } + } + + return 0; +} + +/**************************************************/ +/* + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! * / + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} + +*/ diff --git a/helm/xsltd/xaland-java/rompi.class b/helm/xsltd/xaland-java/rompi.class new file mode 100644 index 0000000000000000000000000000000000000000..4abfe3865ad89dd63981985bc0c6ff02a72ffbf9 GIT binary patch literal 732 zcmZuvTTc@~6#k~&?v!OCH`{vQvM9&`mE~12K6r~Htq`gvgs15;HiNr6&0dK9EPbGf z7=M62%6MiqrAFrA+~$1WIcMhl{Ppbzs(6UqI#xLDbF6W!b3EYK;P5#%Id&Xan03H0 z=fKAN6lz#-2zArM8ZH*mG@@n19T(eJbW`6-mc zTGGFTo?YO^cKZS|S5!?}JQ7xBcDnwqV KV)w|aAovY)#-^kI literal 0 HcmV?d00001 diff --git a/helm/xsltd/xaland-java/rompi.java b/helm/xsltd/xaland-java/rompi.java new file mode 100644 index 000000000..6a633dbc9 --- /dev/null +++ b/helm/xsltd/xaland-java/rompi.java @@ -0,0 +1,12 @@ +import java.net.*; + +public class rompi { + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException + { + /* Wait forever ;-) */ + DatagramSocket socket2 = new DatagramSocket(12346); + DatagramPacket packet2 = new DatagramPacket(new byte[1],1); + System.out.println("Ho preso il socket e non lo lascio piu', caro pu, caro pu"); + socket2.receive(packet2); + } +} diff --git a/helm/xsltd/xaland-java/sped.class b/helm/xsltd/xaland-java/sped.class new file mode 100644 index 0000000000000000000000000000000000000000..cc6f53dac35bcca947942989dc7259047fd6f055 GIT binary patch literal 1142 zcmZuw+fvg|6kUg=O&T&nfdWB5@PeUSibYWZqLhn73pj$#Fg%6!vcu z4V98~6><{>RD^L`MFfKahJ-n+Lc$#t3PyxBDw6LCxF@3bh3|oe$4Cg65Req`NI*)% zJf=06nAEUISF04Fx(^JJVF{rambIS_)G?!_(e}Y1&-x2D_MU7_JU{VzV!D>k z^9r38zbT!L9z6F8hO4%37bnS_+uOoUTgrwH#&oS?sfTV1S<*d+Y}Wr~zK`b_Br-Dda{@?Ha) z8PTOWdgkP~e5RO+E`{Q=v{9P=8Ch+x{sJ!W{l)+Q literal 0 HcmV?d00001 diff --git a/helm/xsltd/xaland-java/sped.java b/helm/xsltd/xaland-java/sped.java new file mode 100644 index 000000000..9d96610d4 --- /dev/null +++ b/helm/xsltd/xaland-java/sped.java @@ -0,0 +1,28 @@ +import java.net.*; + +public class sped { + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException + { + String input = argv[0]; + String out1 = argv[1]; + String out2 = argv[2]; + + String sent = input + " " + out1 + " " + out2; + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket = new DatagramSocket(); + + int strlen = sent.length(); + byte buf[] = new byte[strlen]; + sent.getBytes(0,strlen,buf,0); + DatagramPacket packet = new DatagramPacket(buf,strlen,address,12345); + + socket.send(packet); + + + /* Wait for answer (or forever ;-) */ + DatagramSocket socket2 = new DatagramSocket(12346); + DatagramPacket packet2 = new DatagramPacket(new byte[1],1); + socket2.receive(packet2); + } +} diff --git a/helm/xsltd/xaland-java/xaland.class b/helm/xsltd/xaland-java/xaland.class new file mode 100644 index 0000000000000000000000000000000000000000..6871fda4b77e5da54ed99846b0a35652ccaf2961 GIT binary patch literal 3509 zcma)9Yfu~475=Uyw9B%?Lm*%cr1G&A<;fE-Dy?5+qT zO`mC-PTx&m?jwEIY1*_++DIn2Y12pA=}dogCjUCq>Ay~A`l~Z-e{?3(b9My?kY@rj z=bn4s_uO;NUj6aSS6)RBefWcnw2W&q9+8oe@o^cSl<`>^pOf*7j4#UgvW!<{{8qxZ zBz#-KcO-mQ!uKS6U&0Lu&q?@!gy$vvP{NNSyddGH5?++>l7yd0__>6aB@`vRuAmvC z3fdWT_}B#n^>{!*1A{1oE(S3lBowq^OhF4SGB(a46AT_?+9c~vF=Lv+B?TI06ub@Z zRM3f87MWx4P%T<~BdlJ`-Wh0(3a*OdP*G}gahXmR;$T`!E zj}kbYO4+945R3F?Jou16sJrL#8D2)&R+N@%#yYCe&lDCGOq=YnG8t^`9<8o@tlPJl zw&LU7NhnCu$PV=+EPFA&lFh^&VuSbymQ2%~v@Dm-Tr~ztLTA}1 zXMNakjYZqYP8i8YObVUY)7{>gw>!ui?vj^=*|EfgVLPUsNE>O#%9S&;U7Ew0ok~nk z*jAG6)8ZTGsb;oH+#JH#Ta?|ExS`z?wl{e@dmQ9wjtY0mD%eSLsLIJV&N68_g^W9G z*o);n#eAc;s}1%W?!J7+t2>Di59?ygk8)?#mn-yg^)rM|q;qNaUMl6YR>~Am&RRLg zHFEBZktxvrj$t!vX!RKpgv(Gjm(T;r&*3ng~uo!otnPh@0=~8@}y~` zR{Q(=$)BI#^W;yUcG@;_&VprU$;~B)hCwXJ)trhgo3=v%(%=Xi`MjA+(F{nYle9G- zEf^X0X0D_imk^2WfvcCy5tcA>i|&$u$~Xr&VmYqA-7G?ZM&eGLo}Dr&_)Pk7(mtnv}&hPj+`hSK~}s-0C!xH+3pTFV)c|dCbW09hs?1lZlFR)@2OG z9o@)UC~KtYL(sE(Cix>HWo6^DCiRw69vA`#cFXRb0|E!Di|uGxf&I6atGN2!w;*+% zn#ZzN1rFU_xN;287mNirCID4dMVf;2MHGwKi2D+7D6j~-S07ep<-fDa&mkJ0WF?Q3Z5 zSVz~~;Szc;t|K;gq=dtIsJBlG6>;iCVhenVU<4t8G8w2PV+!^lj8Ax!AR1}6m*_vi zM}5=5A>wubfxCKx12=KvL~n?flf5+q7kk44WL_H3YkK7YJ-m*Nxe^ZE#67yCNm|Vs z?h8PdHE9j>f*?xRr_>T!yM}WCdh={*D4Npev+Fd)S5UN&Pf;~RQ_BkNa~&ld(v_Dm zw2tUpq^5+Pjv|gm0!7@}Nk|bRMchm5NNo`(*U>iD6v8c;KnZ<%J(;R6;xvQ1^#)#! z4K}W$Wln1dMjK1$*PFDa##j;W7>xLcKG>`^1*4H7?$=wirf4K|HQLOZC~cZUSBp5W zx3WLg_v?ivQCM0Fg%lA4He>R5Vdh1d7u>~@nb*oZy0fz0I_l@N))L-c#9h}>&#n}5 zbpwyBqru~J>up*~q^^j8>xgr*w6-FSuVI)|9GlaW5{~HYS{+x17Nzpg+NmOLV34%P z6lopdJK3Q{XJ9RPyVgw%>TT<2r>j1ow+C;@y2eS?w4m13SwdXjqqS>$ia2}Y%_lcY z?msw5cmpIVuzGrrN9ezeim#KN+j|K+Oi%Vcde0Bill(Z9;3?vaP}yCe-v?9l^WX|S z^B*S3G}V6|`|$)0;3*uUa_*)Fb`PGX^#!u>GWzj4;`kGe;tkx1zhD6Wz}@&4j^Te8 z6g9XUi_K%Z{U9M zSB!|iVO0E`)_>vw@o!uZ|3xAoVIrX7!9WyKfjyWG^k61%6umpzO3;snJT)PAY!|J9 W)|%cD_HXrO*e4SFJTU|K{r>@yPnx#? literal 0 HcmV?d00001 diff --git a/helm/xsltd/xaland-java/xaland.java b/helm/xsltd/xaland-java/xaland.java new file mode 100644 index 000000000..1b9312c46 --- /dev/null +++ b/helm/xsltd/xaland-java/xaland.java @@ -0,0 +1,91 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { +/* + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } +*/ + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = + XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison()); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco new file mode 100644 index 000000000..b46ffa6aa --- /dev/null +++ b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco @@ -0,0 +1,85 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset new file mode 100644 index 000000000..1467cdd2e --- /dev/null +++ b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset @@ -0,0 +1,87 @@ +import org.apache.xalan.xslt.*; +import java.net.*; +import java.io.*; + +public class xaland { + public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL); + XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL); + style.process(xmlSource, xmlResult); + } + + public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException + { + int port = Integer.parseInt(argv[0]); + int port2 = Integer.parseInt(argv[1]); + String xsl1 = argv[2]; + String xsl2 = argv[3]; + String theory_xsl1 = argv[4]; + String theory_xsl2 = argv[5]; + + XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot theory_style1 = + theory_processor.processStylesheet(theory_xsl1); + theory_processor.reset(); + StylesheetRoot theory_style2 = + theory_processor.processStylesheet(theory_xsl2); + theory_processor.setStylesheet(theory_style2); + + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + StylesheetRoot style1 = processor.processStylesheet(xsl1); + processor.reset(); + StylesheetRoot style2 = processor.processStylesheet(xsl2); + processor.setStylesheet(style2); + + DatagramSocket socket = new DatagramSocket(port); + + System.out.println("Demon activated on input port " + port + + " and output port " + port2); + while(true) { + System.out.print("Ready..."); + + /* Warning: the packet must be a fresh one! */ + DatagramPacket packet = new DatagramPacket(new byte[1024],1024); + socket.receive(packet); + byte data[] = packet.getData(); + int datalen = packet.getLength(); + String received = new String(data,0,datalen); + + int first = received.indexOf(' '); + int last = received.lastIndexOf(' '); + String mode = received.substring(0,first); + String input = received.substring(first+1,last); + String output = received.substring(last+1); + + System.out.println("request received! Parameters are"); + System.out.println("Mode: " + mode + " "); + System.out.println("Input file: \"" + input + "\""); + System.out.println("Output file: \"" + output + "\"\n"); + + if ((new File(output)).exists()) { + System.out.println("Using cached version\n"); + } else { + FileOutputStream fout = new FileOutputStream(output); + if (mode.equals("cic")) { + processor.setDocumentHandler(style2.getSAXSerializer(fout)); + XSLTResultTarget content = new XSLTResultTarget(processor); + style1.process(new XSLTInputSource(input), content); + } else if (mode.equals("theory")) { + theory_processor.setDocumentHandler( + theory_style2.getSAXSerializer(fout)); + XSLTResultTarget content = + new XSLTResultTarget(theory_processor); + theory_style1.process(new XSLTInputSource(input), content); + } + } + + InetAddress address = InetAddress.getLocalHost(); + DatagramSocket socket2 = new DatagramSocket(); + + byte buf[] = new byte[0]; + DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2); + + socket2.send(packet2); + } + } +} diff --git a/helm/xsltd/xaland-java2/xaland2.class b/helm/xsltd/xaland-java2/xaland2.class new file mode 100644 index 0000000000000000000000000000000000000000..95b42c712d3475766cddddbc121344701c3c66a8 GIT binary patch literal 3773 zcmb7HdvqLC8UNkcO=hw?Cyz}x$>h}~wvePv2GSB?(pLKljpWrPElpb_liizS+kJIr z5;m=-p#LGV>kL_ysoq@YL@Me&U#GEKm40NIC%W-%xjBi@U;qssI21q?Mgj;4P$$490qQXtKrIdn?1*68A;8ffHexJ*RvZ)D z<3jg@5V);4 z#U-3q@fEyJ#gllyimwXB*N|256wavlIzFu88@N}+3j%x(52|<(XI1d_=|Xai0M9tN0`47+8d%Dq^N$k@Sp{ znQt~-{Q)kiHeWlyH9B)3SSIWLh-CUl#)d($b0r+I|#dtSVH$sQej*rryEL`4(EBD37G$th~< zQZtj`sTf10X|HZP>Z)iwN^VA}z#YEabfm*i&zK3}2G7QAhY)#+J0i{0IE1 zLDu7`7|#w((!uU*qWF22t}EUaw<|++fz>y(oTDOYQT%Bxu1vf>8ckE&qHwLyys}?K z@@j~pu_EP>yk=f4J7+sQ$x!RcUfnS3aYoXjm1rC<>l6)Ls>@~afSGXTZ0zu%{-S$! z3W2N$u%0n3nj5x0?5>ox$@tWaWr~_DQV1qYoAR0uvp;FZQw+frzq`+Eh$vN9IqixD zJ2m+=MiayJ*O2I?&PrSKI%!3MtEbgEywSomU}#vYx5~jfOtu7^YU4$}gCb>iABBn(me%o#MDw{iNo3w&xtNSEK z6nYv&?@=Dg?3oGMee|jMooVhSM{&}HdY7{%J$|t+>cl+eRvL{G3Nu;G+6jmLMzzr& zJn@rIhVSB2v_1^@-b5+=or3goyRT~j`**ba#j>-#q-(Ifw9D|f%UwoEyV7NphAJ1Z z+mJPR37f{Wl6l;i!vRCllts|{ZJVGQ0!RCF8An~KhLPpDm=Z) zB{YmR%wwxj^(^)-p>8ZhM)igqwuht~Zf+zbhv6JM&!xC!8v}#{?!#ui-uokY2b={K5Ev=4R3NZr9KDj&!hpuUY=evrh2wuJ5`ImW1s2bDi z=h2bFtrt;VFm(xUEg|G`I*kUcE)>k+mW!|!@OGn7D_;aX!bX$Us5LF(b_rV3i@4z; zsPUJaN09m_J12L(}MrQaByA23)pEih-#R}7NgO3SuvVKsoq$Lkot-!X`PVhC^GAOjAuGK{cljIsz0 zvn{xTZNpJEgfVss$JlwCU=QO?_86^C;4bzQ#;ICNwuA|G1yS}YV(c|=_BUGpfhqPc z#MzrTDM>gb1(A?6q@)&%OPi6FbY!IMI4$jjCH2CV2H{9!w4T7MG>NR_U`{%VGtxPn zl`h~O=@Hy3J&yaNCvi@C8uv@j