All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlinx.jupyter.api.defaultRenderers.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.jupyter.api

import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import java.awt.image.BufferedImage
import java.io.ByteArrayOutputStream
import java.lang.reflect.Array
import java.util.Base64
import javax.imageio.ImageIO

val bufferedImageRenderer = createRenderer {
    val format = "png"
    val stream = ByteArrayOutputStream()
    ImageIO.write(it, format, stream)
    val data = stream.toByteArray()
    val encoder = Base64.getEncoder()
    val encodedData = encoder.encodeToString(data)
    MimeTypedResultEx(
        buildJsonObject {
            put(MimeTypes.PNG, JsonPrimitive(encodedData))
            put(MimeTypes.PLAIN_TEXT, JsonPrimitive("${it::class}: ${it.width}x${it.height} px"))
        },
    )
}

/**
 * Renders any array (primitive or non-primitive) into list
 */
val arrayRenderer = object : RendererHandler {
    override fun accepts(value: Any?): Boolean {
        return value != null && value::class.java.isArray
    }

    private fun toListRuntime(a: Any): List {
        val len = Array.getLength(a)
        return ArrayList(len).apply {
            for (i in 0 until len) {
                add(Array.get(a, i))
            }
        }
    }

    override val execution = ResultHandlerExecution { _, result -> FieldValue(toListRuntime(result.value!!), null) }
    override fun replaceVariables(mapping: Map) = this

    override fun toString(): String {
        return "Default renderer of arrays: renders them to lists"
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy