| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Fri, 11 Oct 2024 19:13:00 +0100 | |
| changeset 966 | d82c91f85391 | 
| parent 873 | c885ed3c39cf | 
| permissions | -rw-r--r-- | 
| 
738
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
1  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
2  | 
import scalatags.Text.all._  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
3  | 
import scalatags.Text._  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
4  | 
import scala.util.Random  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
5  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
7  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
8  | 
object MinimalApplication extends cask.MainRoutes{
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
9  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
10  | 
abstract class Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
11  | 
case object ZERO extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
12  | 
case object ONE extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
13  | 
case class CHAR(c: Char) extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
14  | 
case class ALT(r1: Rexp, r2: Rexp) extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
15  | 
case class SEQ(r1: Rexp, r2: Rexp) extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
16  | 
case class STAR(r: Rexp) extends Rexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
17  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
18  | 
  val evil2 = ALT(SEQ(STAR(STAR(CHAR('a'))), CHAR('b')), ONE)
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
19  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
20  | 
  def pp(r: Rexp) : TypedTag[String] = r match {
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
21  | 
case CHAR(c) => li(code(c.toString))  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
22  | 
    case ALT(r1, r2) => li(code("+"), ul(pp(r1), pp(r2)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
23  | 
    case SEQ(r1, r2) => li(code("o"), ul(pp(r1), pp(r2)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
24  | 
    case STAR(r1) => li(code("*"), ul(pp(r1)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
25  | 
    case ZERO => li(code("0"))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
26  | 
case ONE => li(code(div(style :="line-height:50%")  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
27  | 
                           ("1",br, 
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
28  | 
                            div(color:="blue", fontSize:=6.pt)("0101010101"))))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
29  | 
}  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
30  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
31  | 
abstract class ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
32  | 
case object AZERO extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
33  | 
case class AONE(bs: String) extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
34  | 
case class ACHAR(bs:String, c: Char) extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
35  | 
case class AALT(bs:String, r1: ARexp, r2: ARexp) extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
36  | 
case class ASEQ(bs: String,r1: ARexp, r2: ARexp) extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
37  | 
case class ASTAR(bs:String,r: ARexp) extends ARexp  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
38  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
39  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
40  | 
  def node(s: String, bs: String) = {
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
41  | 
if (bs == "")  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
42  | 
      code(div(div(style :="line-height:75%")(s, br, div(color:="blue", fontSize:=6.pt)(raw(" ")))))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
43  | 
else  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
44  | 
code(div(div(style :="line-height:75%")(s, br, div(color:="blue", fontSize:=6.pt)(bs))))  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
45  | 
}  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
46  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
47  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
48  | 
  val aevil2 = AALT("", ASEQ(" ",ASTAR("111",ASTAR("0",ACHAR("00",'a'))), ACHAR("00",'b')), AONE("01"))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
49  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
50  | 
  def ppa(r: ARexp) : TypedTag[String] = r match {
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
51  | 
case ACHAR(bs, c) => li(node(c.toString, bs))  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
52  | 
    case AALT(bs, r1, r2) => li(node("+", bs), ul(ppa(r1), ppa(r2)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
53  | 
    case ASEQ(bs, r1, r2) => li(node("o", bs), ul(ppa(r1), ppa(r2)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
54  | 
    case ASTAR(bs, r1) => li(node("*", bs), ul(ppa(r1)))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
55  | 
    case AZERO => li(node("0", ""))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
56  | 
    case AONE(bs) => li(node("1", bs))
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
57  | 
}  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
58  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
59  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
60  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
61  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
62  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
63  | 
val bootstrap = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.css"  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
64  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
65  | 
var cnt = 0  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
66  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
67  | 
  @cask.get("/")
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
68  | 
def hello() =  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
69  | 
      doctype("html")(
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
70  | 
html(  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
71  | 
head(link(rel := "stylesheet", href := bootstrap),  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
72  | 
link(rel := "stylesheet", href := "static/style.css")),  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
73  | 
body(  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
74  | 
div(cls := "container")(  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
75  | 
h1(s"Hello"),  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
76  | 
ul(cls := "tree")(pp(evil2)),  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
77  | 
ul(cls := "tree")(ppa(aevil2))  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
78  | 
)  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
79  | 
)  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
80  | 
)  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
81  | 
)  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
82  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
83  | 
  @cask.postForm("/")
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
84  | 
  def answer(name: String) = {
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
85  | 
cnt = cnt + 1  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
86  | 
hello()  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
87  | 
}  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
88  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
89  | 
  //@cask.staticFiles("/static/")
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
90  | 
//def staticFileRoutes() = "static"  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
91  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
92  | 
  @cask.staticResources("/static")
 | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
93  | 
def staticResourceRoutes() = "static"  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
94  | 
|
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
95  | 
initialize()  | 
| 
 
03f46065ef04
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
96  | 
}  |