exps/Element.scala
changeset 310 c090baa7059d
parent 309 a7769a89c529
child 311 8b8db9558ecf
--- a/exps/Element.scala	Mon Feb 11 23:17:52 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-import Element.elem
-abstract class Element{
-  def contents: Array[String]
-
-  def height: Int = contents.length
-  def width: Int = contents(0).length
-
-  
-
-  def above(that: Element): Element = {
-    //new ArrayElement(this.contents ++ that.contents)
-    val this1 = this widen that.width
-    val that1 = that widen this.width
-    elem(this1.contents ++ that1.contents)
-  }
-  def left_align(that: Element): Element = {
-    if (this.width == that.width){
-      this above that
-    }
-    else if (this.width < that.width) {
-      (this beside elem(' ', that.width - this.width, this.height)) above that
-    }
-    else {
-      this above (that beside elem(' ', this.width - that.width, that.height))
-    }
-  }
-  def up_align(that: Element): Element = {
-    if (this.height == that.height){
-      this beside that
-    }
-    else if (this.height < that.height) {
-      (this above elem(' ', this.width, that.height - this.height)) beside that
-    }
-    else {
-      this beside (that above elem(' ', that.width, this.height - that.height))
-    }  
-  }
-  def beside(that: Element): Element = {
-    val this1 = this heighten that.height
-    val that1 = that heighten this.height
-    elem(
-      for ((line1, line2) <- this1.contents zip that1.contents)
-      yield line1 + line2)
-  }
-  def widen(w: Int): Element = 
-    if(w <= width) this
-    else {
-      val left = Element.elem(' ', (w - width) / 2, height)
-      var right = Element.elem(' ', w - width - left.width, height)
-      left beside this beside right
-    }
-  def heighten(h: Int): Element = 
-    if (h <= height) this
-    else {
-      val top = Element.elem(' ', width, (h - height) / 2)
-      val bot = Element.elem(' ', width, h - height - top.height)
-      top above this above bot
-    }
-  override def toString = contents mkString "\n"
-}
-object Element {
-  private class ArrayElement(
-    val contents: Array[String]
-  ) extends Element
-
-  private class LineElement(s: String) extends Element {
-    val contents = Array(s)
-    override def width = s.length
-    override def height = 1
-  }
-
-  private class UniformElement(
-    ch: Char,
-    override val width: Int,
-    override val height: Int
-  ) extends Element {
-    private val line = ch.toString * width
-    def contents = Array.fill(height)(line)
-  }
-
-  def elem(contents: Array[String]): Element =
-    new ArrayElement(contents)
-    
-  def elem(chr: Char, width: Int, height: Int): Element =
-    new UniformElement(chr, width, height)
-    
-  def elem(line: String): Element =
-      new LineElement(line)
-}
\ No newline at end of file