diff -r a7769a89c529 -r c090baa7059d exps/Element.scala --- 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