fun createScaleProviderBuilder()

in plot-stem/src/commonMain/kotlin/org/jetbrains/letsPlot/core/spec/config/ScaleConfig.kt [221:286]


    fun createScaleProviderBuilder(): ScaleProviderBuilder<T> {
        val discreteDomain = enforceDiscreteDomain()
        val reverse = getBoolean(Option.Scale.DISCRETE_DOMAIN_REVERSE)

        val b = ScaleProviderBuilder(aes)
        b.discreteDomain(discreteDomain)
        b.discreteDomainReverse(reverse)

        if (getBoolean(Option.Scale.DATE_TIME)) {
            val dateTimeFormatter = getString(FORMAT)?.let { pattern ->
                val stringFormat = FormatterUtil.byPattern(pattern, tz = tz)
                return@let { value: Any -> stringFormat.format(value) }
            }

            // Check if 'break_width' is specified
            val breakWidthSpec = getString(BREAK_WIDTH)
            if (breakWidthSpec != null) {
                val breakWidth = TimeInterval.parse(breakWidthSpec)
                b.breaksGenerator(
                    DateTimeFixedBreaksGen(
                        breakWidth = breakWidth,
                        providedFormatter = dateTimeFormatter,
                        tz = tz
                    )
                )
            } else {
                configureDateTimeScaleBreaks(
                    b,
                    dateTimeFormatter,
                    dataType,
                    tz,
                )
            }
        } else if (getBoolean(Option.Scale.TIME)) {
            b.breaksGenerator(TimeBreaksGen())
        } else if (!discreteDomain && has(Option.Scale.CONTINUOUS_TRANSFORM)) {
            val transformName = getStringSafe(Option.Scale.CONTINUOUS_TRANSFORM)
            val transform = when (transformName.lowercase()) {
                TransformName.IDENTITY -> Transforms.IDENTITY
                TransformName.LOG10 -> Transforms.LOG10
                TransformName.LOG2 -> Transforms.LOG2
                TransformName.SYMLOG -> Transforms.SYMLOG
                TransformName.REVERSE -> Transforms.REVERSE
                TransformName.SQRT -> Transforms.SQRT
                else -> throw IllegalArgumentException(
                    "Unknown transform name: '$transformName'. Supported: ${
                        listOf(
                            TransformName.IDENTITY,
                            TransformName.LOG10,
                            TransformName.LOG2,
                            TransformName.SYMLOG,
                            TransformName.REVERSE,
                            TransformName.SQRT
                        ).joinToString(transform = { "'$it'" })
                    }."
                )
            }
            b.continuousTransform(transform)
        }

        if (aes in listOf<Aes<*>>(Aes.X, Aes.Y) && has(Option.Scale.POSITION)) {
            b.axisPosition = axisPosition(aes)
        }

        return applyCommons(b)
    }