I made two SWISH notebooks:
Natural Deduction Minimal Logic with DNE
https://swish.swi-prolog.org/p/glue.p.swinb
Natural Deduction Minimal Logic with RAA
https://swish.swi-prolog.org/p/glue2.p.swinb
Can’t run my code:
How give permission, to it? Is it unsafe for some reason?
What would be also swell, if we could have easy
text coloring. How can I do the following:
prove(F) :-
prove(F,P), !,
tag('<span style="color: red">'), show(P, 0'x), tag('</span>'),
write(':'),
tag('<span style="color: blue">'), write(F), tag('</span>'), nl.
It allows me to do using a library(misc/markup):
But how do this in SWISH? Does the server provide some sort of
tag/1 predicate to control the output by injecting the span HTML
element, which we can then use to submit a
CSS-style attribute from the SWISH server to the SWISH client?
Don’t know the whole answer but a possible place to start is library(http/html_write)
. Using DCG html//1
:
?- html(span(style("color:red"), ["\\x: \\y:y*x"]),Out,[]), print_html(Out).
<span style="color:red">\x: \y:y*x</span>
Out = [<, span, ' ', style, '="', "color:red", '"', >, "\\x: \\y:y*x", </, span, >].
Unfortunately when running this on SWISH resulted in:
Sandbox restriction!
Could not derive which predicate may be called fromSearch space too large
but that may be fixable.
I would hope that using print_html/1
on SWISH would properly render the HTML.
I see. But is there a way to stream HTML elements? Now
that Jan W. has implemented event coalescing?
See this other thread:
SWISH - slow printing and missing toplevel bindings
https://swi-prolog.discourse.group/t/swish-slow-printing-and-missing-toplevel-bindings/7490/11
Perhaps I missing your point, but I would think you could use html//1
to produce all of the html tokens for the proof so that only a single output “event” is required.
But I’m out of my depth here as I use DCG’s very little and generate html even less.
FWIW, you can have a class in the CSS and then add
or remove
it dynamically (or you can specify the class=
attribute in the tag).
For example, I have this in my CSS file:
.src_hilite {
background-color: gold;
cursor: pointer;
}
and then use <div class=src_hilite>
to turn it on. (I also do this dynamically using JavaScript; presumably it could also be done with Prolog, but I haven’t yet converted my JavaScript code to Prolog.)
I think that there’s a way to dynamically add CSS items, but I don’t know the details – there’s a “CSSOM” in the DOM, so presumably items can be dynamically added to it.