fun showFilters()

in plot-api/src/jvmTest/kotlin/org/jetbrains/letsPlot/util/pngj/TestSupport.kt [124:168]


    fun showFilters(
        pngr: File, maxgroups: Int, usenewlines: Boolean, showSumm: Boolean = false,
        showSummPercent: Boolean = false
    ): String {
        @Suppress("NAME_SHADOWING")
        var maxgroups = maxgroups
        @Suppress("NAME_SHADOWING")
        var usenewlines = usenewlines
        if (maxgroups == 0) usenewlines = false
        if (maxgroups < 0) maxgroups = Int.MAX_VALUE
        val types = IntArray(5)
        val png = PngReaderByte(pngr.toInputPngStream())
        val sb = StringBuilder()
        val ft = IntArray(png.imgInfo!!.rows + 1)
        for (r in 0 until png.imgInfo!!.rows) {
            ft[r] = (png.readRow() as IImageLineArray).filterType.value
            types[ft[r]]++
        }
        png.end()
        ft[png.imgInfo!!.rows] = -1 // dummy end value to ease computation
        if (showSummPercent) {
            for (i in 0..4) {
                types[i] = ((types[i] * 100 + png.imgInfo!!.rows / 2) / png.imgInfo!!.rows)
            }
        }
        if (showSumm || showSummPercent) sb.append(types.contentToString() + if (usenewlines) "\n" else "\t")
        // groups
        if (maxgroups != 0) {
            var contgroups = 0
            var r0 = 0
            for (r in 1 until ft.size) {
                if (ft[r] != ft[r - 1]) { // found group
                    sb.append(java.lang.String.format("%s:%d(%d)", FilterType.getByVal(ft[r - 1]), r0, r - r0))
                        .append(if (usenewlines) "\n" else " ")
                    contgroups++
                    r0 = r
                    if (contgroups >= maxgroups && r < ft.size - 1) {
                        sb.append("...").append(if (usenewlines) "\n" else " ")
                        break
                    }
                }
            }
        }
        return sb.toString().trim { it <= ' ' }.replace("FILTER_".toRegex(), "")
    }