box drawing real

This commit is contained in:
alex-s168
2024-03-29 22:03:44 +01:00
parent 8db5ca9171
commit 5f01479f46
6 changed files with 122 additions and 10 deletions

View File

@@ -12,7 +12,7 @@ repositories {
} }
dependencies { dependencies {
implementation("me.alex_s168:blitz:0.10") implementation("me.alex_s168:blitz:0.11")
} }
``` ```
@@ -185,6 +185,20 @@ list.add(5)
println(list.contents) println(list.contents)
// outputs: [1, 5, 9] // outputs: [1, 5, 9]
``` ```
### Matrix
```kotlin
val mat = Matrix(3, 3) { x, y -> x * (3-y) }
println(mat)
println(mat.transposeCopy())
println(mat.diagonals())
```
### Box drawing
```kotlin
val out = MutMultiColoredMultiLineString(fill = ColoredChar(' '))
out.box(x to y, 20 to 5, BoxDrawingCharSet.ROUND, Terminal.COLORS.WHITE.brighter.fg)
println(out.toString())
```
### Either ### Either
No example yet No example yet

View File

@@ -28,3 +28,15 @@ kotlin {
application { application {
mainClass.set("blitz.FnpKt") mainClass.set("blitz.FnpKt")
} }
publishing {
publications {
create<MavenPublication>("maven") {
groupId = group.toString()
artifactId = "blitz"
version = version.toString()
from(components["kotlin"])
}
}
}

View File

@@ -59,12 +59,3 @@ class Matrix<T>(
it.joinToString(separator = ", ", prefix = "| ", postfix = " |") it.joinToString(separator = ", ", prefix = "| ", postfix = " |")
} + "\n--" } + "\n--"
} }
fun main() {
val mat = Matrix(3, 3) { x, y -> x * (3-y) }
println(mat)
println(mat.transposeCopy())
println(mat.diagonals())
}

View File

@@ -0,0 +1,86 @@
package blitz.str
data class BoxDrawingCharSet(
val cornerLeftTop: Char,
val cornerRightTop: Char,
val cornerLeftBottom: Char,
val cornerRightBottom: Char,
val horizontal: Char,
val vertical: Char,
) {
constructor(corner: Char, horizontal: Char, vertical: Char): this(corner,corner,corner,corner,horizontal,vertical)
constructor(corner: Char, line: Char): this(corner, line, line)
constructor(all: Char): this(all, all)
/*
0 1 2 3 4 5 6 7 8 9 A B C D E F
U+250x ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏
U+251x ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟
U+252x ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯
U+253x ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿
U+254x ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏
U+255x ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟
U+256x ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯
U+257x ╰ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿
*/
companion object {
val ASCII = BoxDrawingCharSet('*', '-', '|')
val ASCII_BOLD = BoxDrawingCharSet('#', '=', '|')
val NORMAL = BoxDrawingCharSet('┌', '┐', '└', '┘', '─', '│')
val BOLD = BoxDrawingCharSet('┏', '┓', '┗', '┛', '━', '┃')
val BOLD_SPACED = BoxDrawingCharSet('┏', '┓', '┗', '┛', '╸', '╏')
val DOUBLE = BoxDrawingCharSet('╔', '╗', '╚', '╝', '═', '║')
val ROUND = BoxDrawingCharSet('╭', '╮', '╰', '╯', '─', '│')
val DOTTED = BoxDrawingCharSet('┌', '┐', '└', '┘', '╴', '┆')
val DOTTED_SMALL = BoxDrawingCharSet('┌', '┐', '└', '┘', '╴', '┊')
val BOLD_DOTTED = BoxDrawingCharSet('┏', '┓', '┗', '┛', '╸', '┇')
val BOLD_DOTTED_SMALL = BoxDrawingCharSet('┏', '┓', '┗', '┛', '╸', '┋')
val all = listOf(
ASCII,
ASCII_BOLD,
NORMAL,
BOLD,
BOLD_SPACED,
DOUBLE,
ROUND,
DOTTED,
DOTTED_SMALL,
BOLD_DOTTED,
BOLD_DOTTED_SMALL,
)
}
fun draw(start: Pair<Int, Int>, end: Pair<Int, Int>, pixel: (x: Int, y: Int, c: Char) -> Unit) {
pixel(start.first, start.second, cornerLeftTop)
pixel(end.first, start.second, cornerRightTop)
pixel(start.first, end.second, cornerLeftBottom)
pixel(end.first, end.second, cornerRightBottom)
fun row(row: Int) {
for (col in start.first+1..<end.first) {
pixel(col, row, horizontal)
}
}
fun col(col: Int) {
for (row in start.second+1..<end.second) {
pixel(col, row, vertical)
}
}
row(start.second)
row(end.second)
col(start.first)
col(end.first)
}
}

View File

@@ -1,6 +1,7 @@
package blitz.str package blitz.str
import blitz.term.AnsiiMode import blitz.term.AnsiiMode
import blitz.term.Terminal
class MutMultiColoredMultiLineString( class MutMultiColoredMultiLineString(
var fill: ColoredChar var fill: ColoredChar
@@ -104,6 +105,10 @@ class MutMultiColoredMultiLineString(
} }
} }
fun box(start: Pair<Int, Int>, end: Pair<Int, Int>, set: BoxDrawingCharSet, style: AnsiiMode = AnsiiMode(mutableListOf())) {
set.draw(start, end) { x, y, c -> this[y, x] = ColoredChar(c, style) }
}
override fun toString(): String = override fun toString(): String =
lines.joinToString(separator = "\n") lines.joinToString(separator = "\n")
} }

View File

@@ -64,6 +64,10 @@ class MutMultiLineString(
} }
} }
fun box(start: Pair<Int, Int>, end: Pair<Int, Int>, set: BoxDrawingCharSet) {
set.draw(start, end) { x, y, c -> this[y, x] = c }
}
override fun toString(): String = override fun toString(): String =
lines.joinToString(separator = "\n") lines.joinToString(separator = "\n")