241 {
242 if (!jrange) {
243 return nullptr;
244 }
245
246 enum : int32_t {
247 kRange_SelectorType = 0,
248 kExpression_SelectorType = 1,
249
250
251 };
252
253 {
254 const auto type = ParseDefault<int>((*jrange)[
"t"], kRange_SelectorType);
255 if (
type != kRange_SelectorType) {
257 "Ignoring unsupported selector type '%d'",
type);
258 return nullptr;
259 }
260 }
261
262 static constexpr Units gUnitMap[] = {
265 };
266
267 static constexpr Domain gDomainMap[] = {
272 };
273
274 static constexpr Mode gModeMap[] = {
276 };
277
278 static constexpr Shape gShapeMap[] = {
285 };
286
288 new RangeSelector(ParseEnum<Units> (gUnitMap , (*jrange)["r" ], abuilder, "units" ),
289 ParseEnum<Domain>(gDomainMap, (*jrange)["b" ], abuilder, "domain"),
290 ParseEnum<Mode> (gModeMap , (*jrange)["m" ], abuilder, "mode" ),
291 ParseEnum<Shape> (gShapeMap , (*jrange)["sh"], abuilder, "shape" )));
292
293 acontainer->bind(*abuilder, (*jrange)["s" ], &selector->fStart );
294 acontainer->bind(*abuilder, (*jrange)["e" ], &selector->fEnd );
295 acontainer->bind(*abuilder, (*jrange)["o" ], &selector->fOffset);
296 acontainer->bind(*abuilder, (*jrange)["a" ], &selector->fAmount);
297 acontainer->bind(*abuilder, (*jrange)["ne"], &selector->fEaseLo);
298 acontainer->bind(*abuilder, (*jrange)["xe"], &selector->fEaseHi);
299
300
302 acontainer->bind(*abuilder, (*jrange)["sm" ], &selector->fSmoothness);
303 }
304
305 return selector;
306}