diff --git a/NEWS b/NEWS index 5f0660bff..b663881a7 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,12 @@ New in spot 2.6.1.dev (not yet released) Zielonka algorithm. Calude's quasi-polynomial time algorithm has been dropped as it was not used. + Build: + + - We no longer distribute the Python-based CGI script + javascript + code for the online translator. Its replacement has its own + repository: https://gitlab.lrde.epita.fr/spot/spot-web-app/ + Library: - The LTL parser learned syntactic sugar for nested ranges of X diff --git a/README b/README index c130e2f98..1c23ac463 100644 --- a/README +++ b/README @@ -228,7 +228,6 @@ bench/ Benchmarks for ... stutter/ ... stutter-invariance checking algorithms, wdba/ ... WDBA minimization (for obligation properties). python/ Python bindings for Spot and BuDDy - ajax/ LTL-to-TGBA translator with web interface, using Javascript. Third party software -------------------- diff --git a/configure.ac b/configure.ac index 5d69ccc8e..2edae69bc 100644 --- a/configure.ac +++ b/configure.ac @@ -244,7 +244,6 @@ AC_CONFIG_FILES([ spot/twaalgos/Makefile spot/twa/Makefile spot/gen/Makefile - python/ajax/Makefile python/Makefile tests/core/defs tests/ltsmin/defs:tests/core/defs.in diff --git a/python/Makefile.am b/python/Makefile.am index a9ba4400b..57d3e75ea 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -20,8 +20,6 @@ ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . -SUBDIRS = . ajax - AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_builddir) -I$(top_srcdir) \ diff --git a/python/ajax/Makefile.am b/python/ajax/Makefile.am deleted file mode 100644 index af8852b94..000000000 --- a/python/ajax/Makefile.am +++ /dev/null @@ -1,40 +0,0 @@ -## -*- coding: utf-8 -*- -## Copyright (C) 2011, 2012, 2015, 2016, 2018 Laboratoire de Recherche et -## Développement de l'Epita (LRDE). -## -## This file is part of Spot, a model checking library. -## -## Spot is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 3 of the License, or -## (at your option) any later version. -## -## Spot is distributed in the hope that it will be useful, but WITHOUT -## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -## License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program. If not, see . - -nodist_noinst_SCRIPTS = spotcgi.py -EXTRA_DIST = $(srcdir)/spotcgi.in README trans.html css/trans.css \ - css/tipTip.css js/jquery.tipTip.minified.js js/jquery.ba-bbq.min.js \ - js/jquery.ba-dotimeout.min.js css/loading.gif protocol.txt - -CLEANFILES = $(nodist_noinst_SCRIPTS) - -spotcgi.py: $(srcdir)/spotcgi.in Makefile - sed -e 's|[@]PYTHON[@]|@PYTHON@|g' \ - -e 's|[@]pythondir[@]|@pythondir@|g' \ - -e 's|[@]srcdir[@]|@srcdir@|g' \ - -e 's|[@]top_builddir[@]|@top_builddir@|g' \ - -e 's|[@]PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g' \ - -e 's|[@]DOT[@]|@DOT@|g' \ - -e 's|[@]LTL3BA[@]|@LTL3BA@|g' \ - <$(srcdir)/spotcgi.in >spotcgi.tmp - chmod +x spotcgi.tmp - mv -f spotcgi.tmp $@ - -clean-local: - rm -rf spotimg diff --git a/python/ajax/README b/python/ajax/README deleted file mode 100644 index 4a9055673..000000000 --- a/python/ajax/README +++ /dev/null @@ -1,90 +0,0 @@ -ltl2tgba.html is a dynamic web page that translates user-supplied LTL -formulae to Transition-based Generalized Büchi Automata. The actual -translation work is performed by a CGI script in Python: spotcgi.py. - -There are two ways to use the script: using a web server such as -Apache, or standalone. - -In both cases you should ensure that the command `dot', from the -GraphViz package, is in the PATH. configure should have picked it up. - -The "ltl3ba" tab will only be enabled if ltl3ba is available (as -checked by ./configure) and supports options -v/-T/-T3 (checked by the -CGI script). These option were introduced into ltl3ba version 1.1.0. - - -Standalone usage -================ - -Simply run spotcgi.py from this directory. This will create a directory -called spotimg/ in the current directory (this will hold the generated -pictures) and start an HTTP server on port 8000. Point your browser -to http://localhost:8000/trans.html and you should be OK. - -After you have killed the server process (e.g. with Control-C), -you may want to erase the spotimg/ directory. - - -Installing on a real web server -=============================== - -1) Install Spot first (run `make install' from the top-level). - - The CGI script uses the Python bindings and assume they - have been installed. Near the top of the script, you - should see a call to sys.path.insert(), with the expected - location of the Python bindings for spot. This path was - configured from ./configure's arguments and you should not - have to fiddle with it. I'm mentionning it just in case. - -2) Copy spotcgi.py to some place were CGI execution is allowed. - Depending on your HTTP server's configuration, you may have - to rename the script as spotcgi.cgi or something else, so - that the server accepts to run it. - - Apache users in trouble should look at the following options - before digging the Apache manual deeper. These can go - in a .htaccess file (if allowed). - - # Treat *.py files as CGI scripts - AddHandler cgi-script .py - - # Allow CGI execution in some directory. - Options +ExecCGI - -3) In the directory where you have installed spotcgi.py, - create a subdirectory called spotimg/. This is where - the script will cache its images and other temporary - files. (If you want to change this name, see the imgdir - variable at the top of the script.) - - This directory must be writable by the Unix user that - will run the script when the HTTP server processes the - request. - - spotcgi.py purges old files at most once every hour. - -4) Copy the directories css/, js/, and logos/ along with trans.html - to their destination. You may have to adjust a few paths at the - top of the html page. - - -Debugging -========= - -When working on the script, remember that the contents of spotimg/ is -used as a cache and that a request will not be processed again if its -result is in the cache. So if you don't understand why the change you -have performed has no effect, make sure you are performing some fresh -query, or wipe the contents of the cache (i.e., erase all files inside -spotimg/ but not the spotimg/ directory itself). - - -The hash string displayed in the web browser is the query string sent -to the CGI script, so you can simulate the call from the command line -with a command like this: - - % export QUERY_STRING="f=a+U+b&r=br&r=lf&r=si&r=eu&o=a&ff=o&mf=d&af=t&ra=t&rf=p&t=fm&fm=od&fm=sm&la=sp&ta=lc&as=ps&ec=Cou99&eo=" - % export SCRIPT_NAME=spotcgi.py - % export SERVER_SOFTWARE=SimpleHTTP - % ./spotcgi.py diff --git a/python/ajax/css/loading.gif b/python/ajax/css/loading.gif deleted file mode 100644 index e15844396..000000000 Binary files a/python/ajax/css/loading.gif and /dev/null differ diff --git a/python/ajax/css/tipTip.css b/python/ajax/css/tipTip.css deleted file mode 100644 index 70e54f971..000000000 --- a/python/ajax/css/tipTip.css +++ /dev/null @@ -1,114 +0,0 @@ -/* TipTip CSS - Version 1.2 */ - -#tiptip_holder { - display: none; - position: absolute; - top: 0; - left: 0; - z-index: 99999; -} - -#tiptip_holder.tip_top { - padding-bottom: 5px; -} - -#tiptip_holder.tip_bottom { - padding-top: 5px; -} - -#tiptip_holder.tip_right { - padding-left: 5px; -} - -#tiptip_holder.tip_left { - padding-right: 5px; -} - -#tiptip_content { - font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; - font-size: 1em; - color: #fff; - text-shadow: 0 0 2px #000; - padding: 4px 8px; - border: 1px solid rgba(255,255,255,0.25); - background-color: rgb(25,25,25); - background-color: rgba(25,25,25,0.92); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); - border-radius: 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - box-shadow: 0 0 3px #555; - -webkit-box-shadow: 0 0 3px #555; - -moz-box-shadow: 0 0 3px #555; -} - -#tiptip_arrow, #tiptip_arrow_inner { - position: absolute; - border-color: transparent; - border-style: solid; - border-width: 6px; - height: 0; - width: 0; -} - -#tiptip_holder.tip_top #tiptip_arrow { - border-top-color: #fff; - border-top-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_bottom #tiptip_arrow { - border-bottom-color: #fff; - border-bottom-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_right #tiptip_arrow { - border-right-color: #fff; - border-right-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_left #tiptip_arrow { - border-left-color: #fff; - border-left-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_top #tiptip_arrow_inner { - margin-top: -7px; - margin-left: -6px; - border-top-color: rgb(25,25,25); - border-top-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_bottom #tiptip_arrow_inner { - margin-top: -5px; - margin-left: -6px; - border-bottom-color: rgb(25,25,25); - border-bottom-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_right #tiptip_arrow_inner { - margin-top: -6px; - margin-left: -5px; - border-right-color: rgb(25,25,25); - border-right-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_left #tiptip_arrow_inner { - margin-top: -6px; - margin-left: -7px; - border-left-color: rgb(25,25,25); - border-left-color: rgba(25,25,25,0.92); -} - -/* Webkit Hacks */ -@media screen and (-webkit-min-device-pixel-ratio:0) { - #tiptip_content { - padding: 4px 8px 5px 8px; - background-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_bottom #tiptip_arrow_inner { - border-bottom-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_top #tiptip_arrow_inner { - border-top-color: rgba(20,20,20,0.92); - } -} diff --git a/python/ajax/css/trans.css b/python/ajax/css/trans.css deleted file mode 100644 index 1a980dddb..000000000 --- a/python/ajax/css/trans.css +++ /dev/null @@ -1,129 +0,0 @@ -html {overflow-y:scroll;} - -.ltl2tgba .ui-widget { - font-size: 1em; -} - -input.formula { - width: 720px; -} - -span#send { - width: 60px; - margin-left: 4px; - margin-right: 0px; -} - -.shadow { - -moz-box-shadow: 2px 2px 2px #888888; - -webkit-box-shadow: 2px 1px 2px #888888; - box-shadow: 2px 2px 2px #888888; -} - -div.ltl2tgba { - width: 800px; - position:relative; - left:0px; - top:0px; - margin-left: auto; - margin-right: auto; - z-index:10; -} - -#spotlogo { - position:fixed; - left:10px; - top:10px; - z-index:1; -} -#mailicon { - position:fixed; - left:10px; - top:84px; - z-index:1; -} -#results-body { - overflow: auto; -} -.ltldoc { - text-align: right; -} - -table.ltltable -{ - border-collapse:collapse; - font-size: 90%; -} - -.ltldocrow { - font-weight: bold; - vertical-align:top; -} - -.ltl2tgba div.ui-widget-content { - padding: 3px; - margin: 2px 0px; - background: #eeeeee; -} - -.ltl2tgba h3 { - font-size:1em; - margin: 0; - padding: 0px 0.2em 0px; - border-bottom:1px solid #eee; - text-transform: capitalize; -} - -.floatright { - float: right; -} - -.colleft { - float: left; - width: 49%; -} - -.ltl2tgba .head .ui-icon { - float: right; - margin: 1px 0px; -} - -.ltl2tgba .formula, #tiptip_content .formula { - font-family: monospace; - font-weight: bold; - font-size: 1.1em; -} - -.ltl2tgba .error { - color: red; -} - -.ltl2tgba .parse-error { - font-family: monospace; - white-space: pre; - color: red; - font-size: 1.1em; -} - -.ltl2tgba .ec-error { - color: red; -} - -.ltl2tgba .loading { - display: block; - margin: 0 auto; - text-align: center; -} - -.ltl2tgba .neverclaim, .ltl2tgba .accrun { - font-family: monospace; - white-space: pre; - font-size: 1.1em; -} - -#ltl3ba-tab { - margin-left: 1em; -} - -.ui-button-text-only .ui-button-text { padding: .1em .3em; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .1em .3em; text-decoration: none; } diff --git a/python/ajax/js/jquery.ba-bbq.min.js b/python/ajax/js/jquery.ba-bbq.min.js deleted file mode 100644 index 80de36f1c..000000000 --- a/python/ajax/js/jquery.ba-bbq.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/26/2010 - * http://benalman.com/projects/jquery-bbq-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,r){var h,n=Array.prototype.slice,t=decodeURIComponent,a=$.param,j,c,m,y,b=$.bbq=$.bbq||{},s,x,k,e=$.event.special,d="hashchange",B="querystring",F="fragment",z="elemUrlAttr",l="href",w="src",p=/^.*\?|#.*$/g,u,H,g,i,C,E={};function G(I){return typeof I==="string"}function D(J){var I=n.call(arguments,1);return function(){return J.apply(this,I.concat(n.call(arguments)))}}function o(I){return I.replace(H,"$2")}function q(I){return I.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(K,P,I,L,J){var R,O,N,Q,M;if(L!==h){N=I.match(K?H:/^([^#?]*)\??([^#]*)(#?.*)/);M=N[3]||"";if(J===2&&G(L)){O=L.replace(K?u:p,"")}else{Q=m(N[2]);L=G(L)?m[K?F:B](L):L;O=J===2?L:J===1?$.extend({},L,Q):$.extend({},Q,L);O=j(O);if(K){O=O.replace(g,t)}}R=N[1]+(K?C:O||!N[1]?"?":"")+O+M}else{R=P(I!==h?I:location.href)}return R}a[B]=D(f,0,q);a[F]=c=D(f,1,o);a.sorted=j=function(J,K){var I=[],L={};$.each(a(J,K).split("&"),function(P,M){var O=M.replace(/(?:%5B|=).*$/,""),N=L[O];if(!N){N=L[O]=[];I.push(O)}N.push(M)});return $.map(I.sort(),function(M){return L[M]}).join("&")};c.noEscape=function(J){J=J||"";var I=$.map(J.split(""),encodeURIComponent);g=new RegExp(I.join("|"),"g")};c.noEscape(",/");c.ajaxCrawlable=function(I){if(I!==h){if(I){u=/^.*(?:#!|#)/;H=/^([^#]*)(?:#!|#)?(.*)$/;C="#!"}else{u=/^.*#/;H=/^([^#]*)#?(.*)$/;C="#"}i=!!I}return i};c.ajaxCrawlable(0);$.deparam=m=function(L,I){var K={},J={"true":!0,"false":!1,"null":null};$.each(L.replace(/\+/g," ").split("&"),function(O,T){var N=T.split("="),S=t(N[0]),M,R=K,P=0,U=S.split("]["),Q=U.length-1;if(/\[/.test(U[0])&&/\]$/.test(U[Q])){U[Q]=U[Q].replace(/\]$/,"");U=U.shift().split("[").concat(U);Q=U.length-1}else{Q=0}if(N.length===2){M=t(N[1]);if(I){M=M&&!isNaN(M)?+M:M==="undefined"?h:J[M]!==h?J[M]:M}if(Q){for(;P<=Q;P++){S=U[P]===""?R.length:U[P];R=R[S]=P7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('