@@ -4,6 +4,7 @@ import jetbrains.datalore.plot.base.Aes
4
4
import kotlinx.datetime.Instant
5
5
import kotlinx.datetime.LocalDate
6
6
import kotlinx.datetime.LocalDateTime
7
+ import kotlinx.datetime.LocalTime
7
8
import org.jetbrains.kotlinx.ggdsl.ir.aes.AesName
8
9
import org.jetbrains.kotlinx.ggdsl.ir.scale.*
9
10
import org.jetbrains.kotlinx.ggdsl.letsplot.internal.*
@@ -22,6 +23,10 @@ internal val dateTimeTypes = setOf(
22
23
typeOf<Instant >(), typeOf<LocalDateTime >(), typeOf<LocalDate >()
23
24
)
24
25
26
+ internal val timeTypes = setOf (
27
+ typeOf<LocalTime >(),
28
+ )
29
+
25
30
/* *
26
31
* TODO datetime
27
32
*/
@@ -92,42 +97,58 @@ internal fun Scale.wrap(
92
97
93
98
is PositionalContinuousScale <* > -> {
94
99
when (aesName) {
95
- X -> if (domainType ! in dateTimeTypes) {
96
- scaleXContinuous (
100
+ X -> if (domainType in dateTimeTypes) {
101
+ scaleXDateTime (
97
102
limits = limits.wrap(),
98
103
name = name,
99
- breaks = breaks?.values?.map { it as Number }, // TODO() }
104
+ breaks = breaks?.values,
100
105
labels = labels,
101
- trans = (transform as ? Transformation )?.name,
102
106
format = format
103
107
)
104
- } else {
105
- scaleXDateTime (
108
+ } else if (domainType in timeTypes) {
109
+ scaleXTime (
106
110
limits = limits.wrap(),
107
111
name = name,
108
112
breaks = breaks?.values,
109
113
labels = labels,
110
- format = format
114
+ // format = format
111
115
)
112
- }
113
-
114
- Y -> if (domainType !in dateTimeTypes) {
115
- scaleYContinuous(
116
+ } else {
117
+ scaleXContinuous(
116
118
limits = limits.wrap(),
117
119
name = name,
118
120
breaks = breaks?.values?.map { it as Number }, // TODO() }
119
121
labels = labels,
120
122
trans = (transform as ? Transformation )?.name,
121
123
format = format
122
124
)
123
- } else {
125
+ }
126
+
127
+ Y -> if (domainType in dateTimeTypes) {
124
128
scaleYDateTime(
125
129
limits = limits.wrap(),
126
130
name = name,
127
131
breaks = breaks?.values,
128
132
labels = labels,
129
133
format = format
130
134
)
135
+ } else if (domainType in timeTypes) {
136
+ scaleYTime(
137
+ limits = limits.wrap(),
138
+ name = name,
139
+ breaks = breaks?.values,
140
+ labels = labels,
141
+ // format = format
142
+ )
143
+ } else {
144
+ scaleYContinuous(
145
+ limits = limits.wrap(),
146
+ name = name,
147
+ breaks = breaks?.values?.map { it as Number }, // TODO() }
148
+ labels = labels,
149
+ trans = (transform as ? Transformation )?.name,
150
+ format = format
151
+ )
131
152
}
132
153
133
154
else -> TODO ()
@@ -165,15 +186,17 @@ internal fun Scale.wrap(
165
186
when (this ) {
166
187
is NonPositionalCategoricalScale <* , * > -> {
167
188
when (aesName) {
168
- SIZE -> if (rangeValues != null ) {scaleSizeManual(
169
- values = rangeValues!! .values.map { it as Number },
170
- limits = domainCategories?.values,
171
- name = name,
172
- breaks = breaks?.values,
173
- labels = labels,
174
- guide = legendType,
175
- format = format
176
- )} else {
189
+ SIZE -> if (rangeValues != null ) {
190
+ scaleSizeManual(
191
+ values = rangeValues!! .values.map { it as Number },
192
+ limits = domainCategories?.values,
193
+ name = name,
194
+ breaks = breaks?.values,
195
+ labels = labels,
196
+ guide = legendType,
197
+ format = format
198
+ )
199
+ } else {
177
200
org.jetbrains.letsPlot.intern.Scale (
178
201
Aes .SIZE ,
179
202
limits = domainCategories?.values,
@@ -231,15 +254,17 @@ internal fun Scale.wrap(
231
254
}
232
255
}
233
256
// TODO
234
- ALPHA -> if (rangeValues != null ) { scaleAlphaManual(
235
- limits = domainCategories?.values,
236
- values = rangeValues!! .values.map { it as Double },
237
- name = name,
238
- breaks = breaks?.values,
239
- labels = labels,
240
- guide = legendType,
241
- format = format
242
- )} else {
257
+ ALPHA -> if (rangeValues != null ) {
258
+ scaleAlphaManual(
259
+ limits = domainCategories?.values,
260
+ values = rangeValues!! .values.map { it as Double },
261
+ name = name,
262
+ breaks = breaks?.values,
263
+ labels = labels,
264
+ guide = legendType,
265
+ format = format
266
+ )
267
+ } else {
243
268
org.jetbrains.letsPlot.intern.Scale (
244
269
Aes .ALPHA ,
245
270
limits = domainCategories?.values,
@@ -588,6 +613,27 @@ internal fun Scale.wrap(
588
613
format = format
589
614
)
590
615
616
+ else -> TODO ()
617
+ }
618
+ } else if (domainType in timeTypes) {
619
+ return when (aesName) {
620
+ X -> scaleXTime(
621
+ // limits = limits.toLP(),
622
+ name = name,
623
+ breaks = breaks?.values?.map { it as Number }, // TODO() }
624
+ labels = labels,
625
+ // trans = (transform as? Transformation)?.name,
626
+ // format = format
627
+ )
628
+
629
+ Y -> scaleYTime(
630
+ // limits = categories,
631
+ name = name,
632
+ breaks = breaks?.values,
633
+ labels = labels,
634
+ // format = format
635
+ )
636
+
591
637
else -> TODO ()
592
638
}
593
639
}
0 commit comments