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