v. 1.0.4, add vh,vw measurements

Took 47 seconds
This commit is contained in:
2021-11-09 13:38:36 +01:00
parent 68ce4ffa16
commit 70a52a3bb5
6 changed files with 74 additions and 38 deletions

View File

@@ -7,7 +7,7 @@ plugins {
}
group = "nl.astraeus"
version = "1.0.3"
version = "1.0.4"
repositories {
mavenCentral()

View File

@@ -0,0 +1,31 @@
package nl.astraeus.css.properties
fun calc(expression: CalcExpression) = Calc(expression)
infix operator fun CalcExpression.plus(other: CalcExpression) = CompoundCalcExpression(
this,
"+",
other
)
infix operator fun CalcExpression.minus(other: CalcExpression) = CompoundCalcExpression(
this,
"-",
other
)
interface CalcExpression
class CompoundCalcExpression(
val left: CalcExpression,
val operator: String,
val right: CalcExpression
): CalcExpression {
override fun toString(): String {
return "$left $operator $right"
}
}
class Calc(
expression: CalcExpression
) : CssProperty(expression.toString())

View File

@@ -10,6 +10,7 @@ open class CssProperty(
override fun css(): String = value
override fun toString(): String = value
}
fun text(value: String) = TextProperty(value)

View File

@@ -9,13 +9,15 @@ enum class MeasurementUoM {
PC,
PRC,
CM,
FR
FR,
VH,
VW
}
open class Measurement(
value: String,
val uom: MeasurementUoM = MeasurementUoM.NONE
) : CssProperty(value) {
) : CssProperty(value), CalcExpression {
override fun toString(): String = super.value
@@ -25,37 +27,14 @@ open class Measurement(
val inherit = Measurement("inherit")
val normal = Measurement("normal")
fun fromString(value:String): Measurement = when {
value == "0" -> Measurement("0", MeasurementUoM.PX)
value.endsWith("px") -> Measurement(value.slice(0..(value.length-2)), MeasurementUoM.PX)
value.endsWith("rel") -> Measurement(value.slice(0..(value.length-3)), MeasurementUoM.REL)
else -> {
TODO("Unable to parse $value")
}
fun fromString(value: String): Measurement = when {
value == "0" -> Measurement("0", MeasurementUoM.PX)
value.endsWith("px") -> Measurement(value.slice(0..(value.length - 2)), MeasurementUoM.PX)
value.endsWith("rel") -> Measurement(value.slice(0..(value.length - 3)), MeasurementUoM.REL)
else -> {
TODO("Unable to parse $value")
}
fun px(nr: Int) = if (nr == 0) {
Measurement(
"0",
MeasurementUoM.PX
)
} else {
Measurement(
"${nr}px",
MeasurementUoM.PX
)
}
fun px(nr: Double) = nr.px
fun em(nr: Int) = nr.em
fun em(nr: Double) = nr.em
fun prc(nr: Int) = nr.prc
fun prc(nr: Double) = nr.prc
fun pc(nr: Int) = nr.pc
fun pc(nr: Double) = nr.pc
fun cm(nr: Int) = nr.cm
fun cm(nr: Double) = nr.cm
fun fr(nr: Int) = nr.fr
}
}
@@ -100,8 +79,10 @@ val Int.cm: Measurement
get() = Measurement("${this}cm", MeasurementUoM.CM)
val Int.fr: Measurement
get() = Measurement("${this}fr", MeasurementUoM.FR)
fun Int.px(): Measurement = Measurement.px(this)
val Int.vw: Measurement
get() = Measurement("${this}vw", MeasurementUoM.VW)
val Int.vh: Measurement
get() = Measurement("${this}vh", MeasurementUoM.VH)
val Double.px: Measurement
get() = Measurement("${this}px", MeasurementUoM.PX)
@@ -115,8 +96,12 @@ val Double.pc: Measurement
get() = Measurement("${this}pc", MeasurementUoM.PC)
val Double.cm: Measurement
get() = Measurement("${this}cm", MeasurementUoM.CM)
fun Double.px(): Measurement = Measurement.px(this)
val Double.fr: Measurement
get() = Measurement("${this}fr", MeasurementUoM.FR)
val Double.vw: Measurement
get() = Measurement("${this}vw", MeasurementUoM.VW)
val Double.vh: Measurement
get() = Measurement("${this}vh", MeasurementUoM.VH)
open class LineHeight(value: String) : CssProperty(value) {
companion object {

View File

@@ -1015,8 +1015,8 @@ open class InlineStyle : CssGenerator() {
}
fun gridGap(
rowGap: Measurement = Measurement.px(0),
columnGap: Measurement = Measurement.px(0)
rowGap: Measurement = 0.px,
columnGap: Measurement = 0.px
) {
props["grid-gap"] = prp(rowGap, columnGap)
}

View File

@@ -0,0 +1,19 @@
package nl.astraeus.css
import nl.astraeus.css.properties.calc
import nl.astraeus.css.properties.em
import nl.astraeus.css.properties.minus
import nl.astraeus.css.properties.plus
import nl.astraeus.css.properties.px
import kotlin.test.Test
class TestCalcExpression {
@Test
fun testCalcExpression() {
val a = calc(10.px + 20.px - 5.em)
println(a)
}
}