cronli5 0.8.2 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -0
- package/cronli5.min.js +2 -2
- package/dist/cronli5.cjs +69 -5
- package/dist/cronli5.js +69 -5
- package/dist/lang/de.cjs +86 -1
- package/dist/lang/de.js +86 -1
- package/dist/lang/en.cjs +69 -5
- package/dist/lang/en.js +69 -5
- package/dist/lang/es.cjs +105 -3
- package/dist/lang/es.js +105 -3
- package/dist/lang/fi.cjs +70 -0
- package/dist/lang/fi.js +70 -0
- package/dist/lang/fr.cjs +77 -0
- package/dist/lang/fr.js +77 -0
- package/dist/lang/pt.cjs +78 -0
- package/dist/lang/pt.js +78 -0
- package/dist/lang/zh.cjs +36 -4
- package/dist/lang/zh.js +36 -4
- package/package.json +1 -1
- package/src/lang/de/index.ts +190 -1
- package/src/lang/en/index.ts +154 -24
- package/src/lang/es/index.ts +236 -6
- package/src/lang/fi/index.ts +163 -0
- package/src/lang/fr/index.ts +178 -0
- package/src/lang/pt/index.ts +174 -0
- package/src/lang/zh/index.ts +97 -6
package/dist/lang/fi.cjs
CHANGED
|
@@ -224,6 +224,20 @@ var nthWeekdayNames = [
|
|
|
224
224
|
"nelj\xE4nten\xE4",
|
|
225
225
|
"viidenten\xE4"
|
|
226
226
|
];
|
|
227
|
+
var minuteStepOrdinals = {
|
|
228
|
+
3: "kolmantena",
|
|
229
|
+
4: "nelj\xE4nten\xE4",
|
|
230
|
+
5: "viidenten\xE4",
|
|
231
|
+
6: "kuudentena",
|
|
232
|
+
7: "seitsem\xE4nten\xE4",
|
|
233
|
+
8: "kahdeksantena",
|
|
234
|
+
9: "yhdeks\xE4nten\xE4",
|
|
235
|
+
10: "kymmenenten\xE4",
|
|
236
|
+
12: "kahdentenatoista",
|
|
237
|
+
15: "viidenten\xE4toista",
|
|
238
|
+
20: "kahdentenakymmenenten\xE4",
|
|
239
|
+
30: "kolmantenakymmenenten\xE4"
|
|
240
|
+
};
|
|
227
241
|
var weekdays = [
|
|
228
242
|
{
|
|
229
243
|
ela: "sunnuntaista",
|
|
@@ -364,6 +378,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
364
378
|
if (plan.singleSecond) {
|
|
365
379
|
return units.minute.mark + " " + minuteField + " " + units.minute.gen + " ja " + schedule.pattern.second + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
366
380
|
}
|
|
381
|
+
if (secondsConfinesMinute(schedule)) {
|
|
382
|
+
return secondsConfinement(schedule, opts);
|
|
383
|
+
}
|
|
367
384
|
return secondsLeadClause(schedule, opts) + ", " + atMarks(minuteField, units.minute, true) + trailingQualifier(schedule, opts);
|
|
368
385
|
}
|
|
369
386
|
function composeSecondsOverMinuteStep(schedule, freq, opts) {
|
|
@@ -391,11 +408,64 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
391
408
|
const minute = +schedule.pattern.minute;
|
|
392
409
|
return hourCadence(schedule, minute, opts) ?? hourRangeCadence(schedule, minute, opts);
|
|
393
410
|
}
|
|
411
|
+
function minuteStride(schedule) {
|
|
412
|
+
if (schedule.shapes.minute === "step") {
|
|
413
|
+
const segment = stepSegment(schedule, "minute");
|
|
414
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
415
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
416
|
+
}
|
|
417
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
418
|
+
return values && arithmeticStep(values);
|
|
419
|
+
}
|
|
420
|
+
function minuteStepConfinement(schedule, stride, opts) {
|
|
421
|
+
const ordinalForm = minuteStepOrdinals[stride.interval];
|
|
422
|
+
const minute = units.minute;
|
|
423
|
+
const head = ordinalForm ? " joka " + ordinalForm + " minuuttina" : " " + genitive(stride.interval, opts) + " " + minute.gen + " v\xE4lein";
|
|
424
|
+
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
425
|
+
bare: () => "",
|
|
426
|
+
offset: () => " " + minute.anchor + " " + minute.ela + " " + stride.start + " alkaen",
|
|
427
|
+
bounded: () => " " + minute.ela + " " + stride.start + " " + minute.ill + " " + stride.last
|
|
428
|
+
});
|
|
429
|
+
return secondsLeadClause(schedule, opts) + head + tail + trailingQualifier(schedule, opts);
|
|
430
|
+
}
|
|
431
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
432
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.pattern.second === "*" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
433
|
+
}
|
|
434
|
+
function secondsConfinesMinute(schedule) {
|
|
435
|
+
const { second, minute, hour } = schedule.shapes;
|
|
436
|
+
if (second === "list") {
|
|
437
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
438
|
+
if (values && arithmeticStep(values)) {
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
443
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
444
|
+
}
|
|
445
|
+
function composeConfinesMinute(plan, schedule) {
|
|
446
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
447
|
+
return minuteRest && secondsConfinesMinute(schedule);
|
|
448
|
+
}
|
|
449
|
+
function secondsConfinement(schedule, opts) {
|
|
450
|
+
const stride = minuteStride(schedule);
|
|
451
|
+
if (stride && schedule.pattern.minute !== "*/2") {
|
|
452
|
+
return minuteStepConfinement(schedule, stride, opts);
|
|
453
|
+
}
|
|
454
|
+
const minuteDigits = joinList(segmentWords(segmentsOf(schedule, "minute")));
|
|
455
|
+
const secondDigits = joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
456
|
+
return units.minute.mark + " " + minuteDigits + " " + units.minute.gen + " ja " + secondDigits + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
457
|
+
}
|
|
394
458
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
395
459
|
const cadence = composeHourCadence(schedule, plan, opts);
|
|
396
460
|
if (cadence !== null) {
|
|
397
461
|
return cadence;
|
|
398
462
|
}
|
|
463
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
464
|
+
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
465
|
+
}
|
|
466
|
+
if (composeConfinesMinute(plan, schedule)) {
|
|
467
|
+
return secondsConfinement(schedule, opts);
|
|
468
|
+
}
|
|
399
469
|
if (plan.rest.kind === "minuteFrequency" && schedule.pattern.second !== "*") {
|
|
400
470
|
return composeSecondsOverMinuteStep(schedule, plan.rest, opts);
|
|
401
471
|
}
|
package/dist/lang/fi.js
CHANGED
|
@@ -198,6 +198,20 @@ var nthWeekdayNames = [
|
|
|
198
198
|
"nelj\xE4nten\xE4",
|
|
199
199
|
"viidenten\xE4"
|
|
200
200
|
];
|
|
201
|
+
var minuteStepOrdinals = {
|
|
202
|
+
3: "kolmantena",
|
|
203
|
+
4: "nelj\xE4nten\xE4",
|
|
204
|
+
5: "viidenten\xE4",
|
|
205
|
+
6: "kuudentena",
|
|
206
|
+
7: "seitsem\xE4nten\xE4",
|
|
207
|
+
8: "kahdeksantena",
|
|
208
|
+
9: "yhdeks\xE4nten\xE4",
|
|
209
|
+
10: "kymmenenten\xE4",
|
|
210
|
+
12: "kahdentenatoista",
|
|
211
|
+
15: "viidenten\xE4toista",
|
|
212
|
+
20: "kahdentenakymmenenten\xE4",
|
|
213
|
+
30: "kolmantenakymmenenten\xE4"
|
|
214
|
+
};
|
|
201
215
|
var weekdays = [
|
|
202
216
|
{
|
|
203
217
|
ela: "sunnuntaista",
|
|
@@ -338,6 +352,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
338
352
|
if (plan.singleSecond) {
|
|
339
353
|
return units.minute.mark + " " + minuteField + " " + units.minute.gen + " ja " + schedule.pattern.second + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
340
354
|
}
|
|
355
|
+
if (secondsConfinesMinute(schedule)) {
|
|
356
|
+
return secondsConfinement(schedule, opts);
|
|
357
|
+
}
|
|
341
358
|
return secondsLeadClause(schedule, opts) + ", " + atMarks(minuteField, units.minute, true) + trailingQualifier(schedule, opts);
|
|
342
359
|
}
|
|
343
360
|
function composeSecondsOverMinuteStep(schedule, freq, opts) {
|
|
@@ -365,11 +382,64 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
365
382
|
const minute = +schedule.pattern.minute;
|
|
366
383
|
return hourCadence(schedule, minute, opts) ?? hourRangeCadence(schedule, minute, opts);
|
|
367
384
|
}
|
|
385
|
+
function minuteStride(schedule) {
|
|
386
|
+
if (schedule.shapes.minute === "step") {
|
|
387
|
+
const segment = stepSegment(schedule, "minute");
|
|
388
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
389
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
390
|
+
}
|
|
391
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
392
|
+
return values && arithmeticStep(values);
|
|
393
|
+
}
|
|
394
|
+
function minuteStepConfinement(schedule, stride, opts) {
|
|
395
|
+
const ordinalForm = minuteStepOrdinals[stride.interval];
|
|
396
|
+
const minute = units.minute;
|
|
397
|
+
const head = ordinalForm ? " joka " + ordinalForm + " minuuttina" : " " + genitive(stride.interval, opts) + " " + minute.gen + " v\xE4lein";
|
|
398
|
+
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
399
|
+
bare: () => "",
|
|
400
|
+
offset: () => " " + minute.anchor + " " + minute.ela + " " + stride.start + " alkaen",
|
|
401
|
+
bounded: () => " " + minute.ela + " " + stride.start + " " + minute.ill + " " + stride.last
|
|
402
|
+
});
|
|
403
|
+
return secondsLeadClause(schedule, opts) + head + tail + trailingQualifier(schedule, opts);
|
|
404
|
+
}
|
|
405
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
406
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.pattern.second === "*" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
407
|
+
}
|
|
408
|
+
function secondsConfinesMinute(schedule) {
|
|
409
|
+
const { second, minute, hour } = schedule.shapes;
|
|
410
|
+
if (second === "list") {
|
|
411
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
412
|
+
if (values && arithmeticStep(values)) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
417
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
418
|
+
}
|
|
419
|
+
function composeConfinesMinute(plan, schedule) {
|
|
420
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
421
|
+
return minuteRest && secondsConfinesMinute(schedule);
|
|
422
|
+
}
|
|
423
|
+
function secondsConfinement(schedule, opts) {
|
|
424
|
+
const stride = minuteStride(schedule);
|
|
425
|
+
if (stride && schedule.pattern.minute !== "*/2") {
|
|
426
|
+
return minuteStepConfinement(schedule, stride, opts);
|
|
427
|
+
}
|
|
428
|
+
const minuteDigits = joinList(segmentWords(segmentsOf(schedule, "minute")));
|
|
429
|
+
const secondDigits = joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
430
|
+
return units.minute.mark + " " + minuteDigits + " " + units.minute.gen + " ja " + secondDigits + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
431
|
+
}
|
|
368
432
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
369
433
|
const cadence = composeHourCadence(schedule, plan, opts);
|
|
370
434
|
if (cadence !== null) {
|
|
371
435
|
return cadence;
|
|
372
436
|
}
|
|
437
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
438
|
+
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
439
|
+
}
|
|
440
|
+
if (composeConfinesMinute(plan, schedule)) {
|
|
441
|
+
return secondsConfinement(schedule, opts);
|
|
442
|
+
}
|
|
373
443
|
if (plan.rest.kind === "minuteFrequency" && schedule.pattern.second !== "*") {
|
|
374
444
|
return composeSecondsOverMinuteStep(schedule, plan.rest, opts);
|
|
375
445
|
}
|
package/dist/lang/fr.cjs
CHANGED
|
@@ -251,6 +251,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
251
251
|
if (plan.singleSecond) {
|
|
252
252
|
return "\xE0 la minute " + minuteField + " et \xE0 la seconde " + schedule.pattern.second + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
253
253
|
}
|
|
254
|
+
if (secondsConfinesMinute(schedule)) {
|
|
255
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
256
|
+
}
|
|
254
257
|
return secondsLeadClause(schedule, opts) + ", \xE0 la minute " + minuteField + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
255
258
|
}
|
|
256
259
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -274,6 +277,76 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
274
277
|
function isPinnedMinuteSeconds(schedule, plan) {
|
|
275
278
|
return plan.rest.kind === "clockTimes" && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step");
|
|
276
279
|
}
|
|
280
|
+
function minuteStride(schedule) {
|
|
281
|
+
if (schedule.shapes.minute === "step") {
|
|
282
|
+
const segment = stepSegment(schedule, "minute");
|
|
283
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
284
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
285
|
+
}
|
|
286
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
287
|
+
return values && arithmeticStep(values);
|
|
288
|
+
}
|
|
289
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
290
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
291
|
+
}
|
|
292
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
293
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
294
|
+
}
|
|
295
|
+
function secondsBareLead(schedule) {
|
|
296
|
+
const secondField = schedule.pattern.second;
|
|
297
|
+
const shape = schedule.shapes.second;
|
|
298
|
+
if (shape === "range") {
|
|
299
|
+
const bounds = secondField.split("-");
|
|
300
|
+
return "chaque seconde de " + bounds[0] + " \xE0 " + bounds[1];
|
|
301
|
+
}
|
|
302
|
+
if (shape === "single") {
|
|
303
|
+
return "\xE0 la seconde " + secondField;
|
|
304
|
+
}
|
|
305
|
+
return "aux secondes " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
306
|
+
}
|
|
307
|
+
function confinedMinutePhrase(schedule) {
|
|
308
|
+
if (schedule.shapes.minute === "range") {
|
|
309
|
+
return "de " + minuteRangeLead(schedule.pattern.minute) + " de chaque heure";
|
|
310
|
+
}
|
|
311
|
+
if (schedule.shapes.minute === "list") {
|
|
312
|
+
return "des minutes " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de chaque heure";
|
|
313
|
+
}
|
|
314
|
+
return "de la minute " + schedule.pattern.minute + " de chaque heure";
|
|
315
|
+
}
|
|
316
|
+
function secondsConfinesMinute(schedule) {
|
|
317
|
+
const { second, minute, hour } = schedule.shapes;
|
|
318
|
+
if (second === "list") {
|
|
319
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
320
|
+
if (values && arithmeticStep(values)) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
325
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
326
|
+
}
|
|
327
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
328
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
329
|
+
return steppedMinuteConfinement(
|
|
330
|
+
schedule,
|
|
331
|
+
plan,
|
|
332
|
+
secondsLeadClause(schedule, opts),
|
|
333
|
+
opts
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
337
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
338
|
+
if (minuteStride(schedule) && schedule.pattern.minute !== "*/2") {
|
|
339
|
+
return steppedMinuteConfinement(
|
|
340
|
+
schedule,
|
|
341
|
+
plan,
|
|
342
|
+
secondsBareLead(schedule),
|
|
343
|
+
opts
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
347
|
+
}
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
277
350
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
278
351
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
279
352
|
if (hourCad !== null) {
|
|
@@ -292,6 +365,10 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
292
365
|
const cadence = "toutes les " + numero(stepSegment(schedule, "second").interval, opts) + " secondes de la minute " + schedule.pattern.minute;
|
|
293
366
|
return dayFrame + ", " + window + ", " + cadence;
|
|
294
367
|
}
|
|
368
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
369
|
+
if (confined !== null) {
|
|
370
|
+
return confined;
|
|
371
|
+
}
|
|
295
372
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
296
373
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts).replace(/^toutes les /u, "chaque ");
|
|
297
374
|
}
|
package/dist/lang/fr.js
CHANGED
|
@@ -225,6 +225,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
225
225
|
if (plan.singleSecond) {
|
|
226
226
|
return "\xE0 la minute " + minuteField + " et \xE0 la seconde " + schedule.pattern.second + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
227
227
|
}
|
|
228
|
+
if (secondsConfinesMinute(schedule)) {
|
|
229
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
230
|
+
}
|
|
228
231
|
return secondsLeadClause(schedule, opts) + ", \xE0 la minute " + minuteField + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
229
232
|
}
|
|
230
233
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -248,6 +251,76 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
248
251
|
function isPinnedMinuteSeconds(schedule, plan) {
|
|
249
252
|
return plan.rest.kind === "clockTimes" && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step");
|
|
250
253
|
}
|
|
254
|
+
function minuteStride(schedule) {
|
|
255
|
+
if (schedule.shapes.minute === "step") {
|
|
256
|
+
const segment = stepSegment(schedule, "minute");
|
|
257
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
258
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
259
|
+
}
|
|
260
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
261
|
+
return values && arithmeticStep(values);
|
|
262
|
+
}
|
|
263
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
264
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
265
|
+
}
|
|
266
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
267
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
268
|
+
}
|
|
269
|
+
function secondsBareLead(schedule) {
|
|
270
|
+
const secondField = schedule.pattern.second;
|
|
271
|
+
const shape = schedule.shapes.second;
|
|
272
|
+
if (shape === "range") {
|
|
273
|
+
const bounds = secondField.split("-");
|
|
274
|
+
return "chaque seconde de " + bounds[0] + " \xE0 " + bounds[1];
|
|
275
|
+
}
|
|
276
|
+
if (shape === "single") {
|
|
277
|
+
return "\xE0 la seconde " + secondField;
|
|
278
|
+
}
|
|
279
|
+
return "aux secondes " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
280
|
+
}
|
|
281
|
+
function confinedMinutePhrase(schedule) {
|
|
282
|
+
if (schedule.shapes.minute === "range") {
|
|
283
|
+
return "de " + minuteRangeLead(schedule.pattern.minute) + " de chaque heure";
|
|
284
|
+
}
|
|
285
|
+
if (schedule.shapes.minute === "list") {
|
|
286
|
+
return "des minutes " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de chaque heure";
|
|
287
|
+
}
|
|
288
|
+
return "de la minute " + schedule.pattern.minute + " de chaque heure";
|
|
289
|
+
}
|
|
290
|
+
function secondsConfinesMinute(schedule) {
|
|
291
|
+
const { second, minute, hour } = schedule.shapes;
|
|
292
|
+
if (second === "list") {
|
|
293
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
294
|
+
if (values && arithmeticStep(values)) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
299
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
300
|
+
}
|
|
301
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
302
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
303
|
+
return steppedMinuteConfinement(
|
|
304
|
+
schedule,
|
|
305
|
+
plan,
|
|
306
|
+
secondsLeadClause(schedule, opts),
|
|
307
|
+
opts
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
311
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
312
|
+
if (minuteStride(schedule) && schedule.pattern.minute !== "*/2") {
|
|
313
|
+
return steppedMinuteConfinement(
|
|
314
|
+
schedule,
|
|
315
|
+
plan,
|
|
316
|
+
secondsBareLead(schedule),
|
|
317
|
+
opts
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
321
|
+
}
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
251
324
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
252
325
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
253
326
|
if (hourCad !== null) {
|
|
@@ -266,6 +339,10 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
266
339
|
const cadence = "toutes les " + numero(stepSegment(schedule, "second").interval, opts) + " secondes de la minute " + schedule.pattern.minute;
|
|
267
340
|
return dayFrame + ", " + window + ", " + cadence;
|
|
268
341
|
}
|
|
342
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
343
|
+
if (confined !== null) {
|
|
344
|
+
return confined;
|
|
345
|
+
}
|
|
269
346
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
270
347
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts).replace(/^toutes les /u, "chaque ");
|
|
271
348
|
}
|
package/dist/lang/pt.cjs
CHANGED
|
@@ -337,6 +337,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
337
337
|
if (plan.singleSecond) {
|
|
338
338
|
return "no minuto " + minuteField + " e no segundo " + schedule.pattern.second + " de cada hora" + trailingQualifier(schedule, opts);
|
|
339
339
|
}
|
|
340
|
+
if (secondsConfinesMinute(schedule)) {
|
|
341
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
342
|
+
}
|
|
340
343
|
return secondsLeadClause(schedule, opts) + ", no minuto " + minuteField + " de cada hora" + trailingQualifier(schedule, opts);
|
|
341
344
|
}
|
|
342
345
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -361,6 +364,77 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
361
364
|
function isPinnedMinuteSeconds(schedule, plan) {
|
|
362
365
|
return plan.rest.kind === "clockTimes" && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step");
|
|
363
366
|
}
|
|
367
|
+
function minuteStride(schedule) {
|
|
368
|
+
if (schedule.shapes.minute === "step") {
|
|
369
|
+
const segment = stepSegment(schedule, "minute");
|
|
370
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
371
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
372
|
+
}
|
|
373
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
374
|
+
return values && arithmeticStep(values);
|
|
375
|
+
}
|
|
376
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
377
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
378
|
+
}
|
|
379
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
380
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
381
|
+
}
|
|
382
|
+
function secondsBareLead(schedule) {
|
|
383
|
+
const secondField = schedule.pattern.second;
|
|
384
|
+
const shape = schedule.shapes.second;
|
|
385
|
+
if (shape === "range") {
|
|
386
|
+
const bounds = secondField.split("-");
|
|
387
|
+
return "a cada segundo do " + bounds[0] + " ao " + bounds[1];
|
|
388
|
+
}
|
|
389
|
+
if (shape === "single") {
|
|
390
|
+
return "no segundo " + secondField;
|
|
391
|
+
}
|
|
392
|
+
return "nos segundos " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
393
|
+
}
|
|
394
|
+
function confinedMinutePhrase(schedule) {
|
|
395
|
+
if (schedule.shapes.minute === "range") {
|
|
396
|
+
const range = minuteRangeLead(schedule.pattern.minute).replace(/^a /u, "");
|
|
397
|
+
return "de " + range + " de cada hora";
|
|
398
|
+
}
|
|
399
|
+
if (schedule.shapes.minute === "list") {
|
|
400
|
+
return "dos minutos " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de cada hora";
|
|
401
|
+
}
|
|
402
|
+
return "do minuto " + schedule.pattern.minute + " de cada hora";
|
|
403
|
+
}
|
|
404
|
+
function secondsConfinesMinute(schedule) {
|
|
405
|
+
const { second, minute, hour } = schedule.shapes;
|
|
406
|
+
if (second === "list") {
|
|
407
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
408
|
+
if (values && arithmeticStep(values)) {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
413
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
414
|
+
}
|
|
415
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
416
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
417
|
+
return steppedMinuteConfinement(
|
|
418
|
+
schedule,
|
|
419
|
+
plan,
|
|
420
|
+
secondsLeadClause(schedule, opts),
|
|
421
|
+
opts
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
425
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
426
|
+
if (minuteStride(schedule) && schedule.pattern.minute !== "*/2") {
|
|
427
|
+
return steppedMinuteConfinement(
|
|
428
|
+
schedule,
|
|
429
|
+
plan,
|
|
430
|
+
secondsBareLead(schedule),
|
|
431
|
+
opts
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
435
|
+
}
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
364
438
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
365
439
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
366
440
|
if (hourCad !== null) {
|
|
@@ -379,6 +453,10 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
379
453
|
const cadence = "a cada " + numero(stepSegment(schedule, "second").interval, opts) + " segundos do minuto " + schedule.pattern.minute;
|
|
380
454
|
return dayFrame + ", " + window + ", " + cadence;
|
|
381
455
|
}
|
|
456
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
457
|
+
if (confined !== null) {
|
|
458
|
+
return confined;
|
|
459
|
+
}
|
|
382
460
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
383
461
|
const rest = render(schedule, plan.rest, opts).replace(/^a /u, "");
|
|
384
462
|
return secondsLeadClause(schedule, opts) + " de " + rest;
|
package/dist/lang/pt.js
CHANGED
|
@@ -311,6 +311,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
311
311
|
if (plan.singleSecond) {
|
|
312
312
|
return "no minuto " + minuteField + " e no segundo " + schedule.pattern.second + " de cada hora" + trailingQualifier(schedule, opts);
|
|
313
313
|
}
|
|
314
|
+
if (secondsConfinesMinute(schedule)) {
|
|
315
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
316
|
+
}
|
|
314
317
|
return secondsLeadClause(schedule, opts) + ", no minuto " + minuteField + " de cada hora" + trailingQualifier(schedule, opts);
|
|
315
318
|
}
|
|
316
319
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -335,6 +338,77 @@ function composeHourCadence(schedule, plan, opts) {
|
|
|
335
338
|
function isPinnedMinuteSeconds(schedule, plan) {
|
|
336
339
|
return plan.rest.kind === "clockTimes" && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step");
|
|
337
340
|
}
|
|
341
|
+
function minuteStride(schedule) {
|
|
342
|
+
if (schedule.shapes.minute === "step") {
|
|
343
|
+
const segment = stepSegment(schedule, "minute");
|
|
344
|
+
const start = segment.startToken === "*" ? 0 : +segment.startToken;
|
|
345
|
+
return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
|
|
346
|
+
}
|
|
347
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
348
|
+
return values && arithmeticStep(values);
|
|
349
|
+
}
|
|
350
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
351
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
352
|
+
}
|
|
353
|
+
function isSteppedMinuteSeconds(schedule, plan) {
|
|
354
|
+
return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
|
|
355
|
+
}
|
|
356
|
+
function secondsBareLead(schedule) {
|
|
357
|
+
const secondField = schedule.pattern.second;
|
|
358
|
+
const shape = schedule.shapes.second;
|
|
359
|
+
if (shape === "range") {
|
|
360
|
+
const bounds = secondField.split("-");
|
|
361
|
+
return "a cada segundo do " + bounds[0] + " ao " + bounds[1];
|
|
362
|
+
}
|
|
363
|
+
if (shape === "single") {
|
|
364
|
+
return "no segundo " + secondField;
|
|
365
|
+
}
|
|
366
|
+
return "nos segundos " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
367
|
+
}
|
|
368
|
+
function confinedMinutePhrase(schedule) {
|
|
369
|
+
if (schedule.shapes.minute === "range") {
|
|
370
|
+
const range = minuteRangeLead(schedule.pattern.minute).replace(/^a /u, "");
|
|
371
|
+
return "de " + range + " de cada hora";
|
|
372
|
+
}
|
|
373
|
+
if (schedule.shapes.minute === "list") {
|
|
374
|
+
return "dos minutos " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de cada hora";
|
|
375
|
+
}
|
|
376
|
+
return "do minuto " + schedule.pattern.minute + " de cada hora";
|
|
377
|
+
}
|
|
378
|
+
function secondsConfinesMinute(schedule) {
|
|
379
|
+
const { second, minute, hour } = schedule.shapes;
|
|
380
|
+
if (second === "list") {
|
|
381
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
382
|
+
if (values && arithmeticStep(values)) {
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
387
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
388
|
+
}
|
|
389
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
390
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
391
|
+
return steppedMinuteConfinement(
|
|
392
|
+
schedule,
|
|
393
|
+
plan,
|
|
394
|
+
secondsLeadClause(schedule, opts),
|
|
395
|
+
opts
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
399
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
400
|
+
if (minuteStride(schedule) && schedule.pattern.minute !== "*/2") {
|
|
401
|
+
return steppedMinuteConfinement(
|
|
402
|
+
schedule,
|
|
403
|
+
plan,
|
|
404
|
+
secondsBareLead(schedule),
|
|
405
|
+
opts
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
409
|
+
}
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
338
412
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
339
413
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
340
414
|
if (hourCad !== null) {
|
|
@@ -353,6 +427,10 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
353
427
|
const cadence = "a cada " + numero(stepSegment(schedule, "second").interval, opts) + " segundos do minuto " + schedule.pattern.minute;
|
|
354
428
|
return dayFrame + ", " + window + ", " + cadence;
|
|
355
429
|
}
|
|
430
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
431
|
+
if (confined !== null) {
|
|
432
|
+
return confined;
|
|
433
|
+
}
|
|
356
434
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
357
435
|
const rest = render(schedule, plan.rest, opts).replace(/^a /u, "");
|
|
358
436
|
return secondsLeadClause(schedule, opts) + " de " + rest;
|
package/dist/lang/zh.cjs
CHANGED
|
@@ -573,8 +573,8 @@ function secondClause(schedule) {
|
|
|
573
573
|
return "\u6BCF\u79D2";
|
|
574
574
|
}
|
|
575
575
|
const first = segs[0];
|
|
576
|
-
if (segs.length === 1 && first.kind === "step"
|
|
577
|
-
return
|
|
576
|
+
if (segs.length === 1 && first.kind === "step") {
|
|
577
|
+
return stepClause(first, "\u79D2", "\u79D2", "\u6BCF\u5206\u949F");
|
|
578
578
|
}
|
|
579
579
|
return strideFromSegments(segs, "\u79D2", "\u79D2", "\u6BCF\u5206\u949F") ?? "\u7B2C" + valueText(segs) + "\u79D2";
|
|
580
580
|
}
|
|
@@ -613,7 +613,7 @@ function composeSecondsOnHour(schedule, plan, opts) {
|
|
|
613
613
|
return "\u6BCF\u5929" + restText + secTail;
|
|
614
614
|
}
|
|
615
615
|
if (rest.kind === "singleMinute") {
|
|
616
|
-
return restText + "\uFF0C" + sec;
|
|
616
|
+
return secondIsCadence(schedule) ? restText + confinedSecondTail(sec) : restText + "\uFF0C" + sec;
|
|
617
617
|
}
|
|
618
618
|
return restText + secTail;
|
|
619
619
|
}
|
|
@@ -670,6 +670,9 @@ function composeSecondsCadence(schedule) {
|
|
|
670
670
|
return "\u6BCF\u5076\u6570\u5206\u949F\u7684\u6BCF\u4E00\u79D2";
|
|
671
671
|
}
|
|
672
672
|
}
|
|
673
|
+
if (!secondIsCadence(schedule) && !secondIsStride(schedule)) {
|
|
674
|
+
return minuteClause(schedule) + "\u7684" + sec;
|
|
675
|
+
}
|
|
673
676
|
return sec + "\uFF0C" + minuteClause(schedule);
|
|
674
677
|
}
|
|
675
678
|
return hourFrame(schedule) + tail;
|
|
@@ -683,7 +686,7 @@ function composeSecondsListed(schedule) {
|
|
|
683
686
|
return hourWord(hourFires(schedule)[0]) + minuteCad + "\u7684\u6BCF\u4E00\u79D2";
|
|
684
687
|
}
|
|
685
688
|
if (schedule.shapes.hour === "wildcard") {
|
|
686
|
-
return minutes + "\uFF0C" + sec;
|
|
689
|
+
return secondIsStride(schedule) ? minutes + "\uFF0C" + sec : minutes + confinedSecondTail(sec);
|
|
687
690
|
}
|
|
688
691
|
const hourCad = unevenHourCadence(schedule);
|
|
689
692
|
if (hourCad !== null) {
|
|
@@ -691,9 +694,38 @@ function composeSecondsListed(schedule) {
|
|
|
691
694
|
}
|
|
692
695
|
return hourFrame(schedule) + minutes + "\uFF0C" + sec;
|
|
693
696
|
}
|
|
697
|
+
function isMinuteStride(schedule) {
|
|
698
|
+
if (schedule.shapes.minute === "step") {
|
|
699
|
+
return true;
|
|
700
|
+
}
|
|
701
|
+
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
702
|
+
return values !== null && arithmeticStep(values) !== null;
|
|
703
|
+
}
|
|
704
|
+
function secondIsCadence(schedule) {
|
|
705
|
+
return schedule.pattern.second === "*" || schedule.shapes.second === "step";
|
|
706
|
+
}
|
|
707
|
+
function secondIsStride(schedule) {
|
|
708
|
+
if (schedule.shapes.second !== "list") {
|
|
709
|
+
return false;
|
|
710
|
+
}
|
|
711
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
712
|
+
return values !== null && arithmeticStep(values) !== null;
|
|
713
|
+
}
|
|
714
|
+
function confinedSecondTail(sec) {
|
|
715
|
+
return sec === "\u6BCF\u79D2" ? "\u7684\u6BCF\u4E00\u79D2" : "\u7684" + sec;
|
|
716
|
+
}
|
|
717
|
+
function isSteppedMinuteSeconds(schedule, composedClock) {
|
|
718
|
+
return !composedClock && schedule.shapes.hour === "wildcard" && secondIsCadence(schedule) && schedule.pattern.minute !== "*/2" && isMinuteStride(schedule);
|
|
719
|
+
}
|
|
720
|
+
function minuteStrideConfinement(schedule) {
|
|
721
|
+
return minuteHourClause(schedule) + confinedSecondTail(secondClause(schedule));
|
|
722
|
+
}
|
|
694
723
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
695
724
|
const { rest } = plan;
|
|
696
725
|
const composedClock = rest.kind === "clockTimes" || rest.kind === "compactClockTimes";
|
|
726
|
+
if (isSteppedMinuteSeconds(schedule, composedClock)) {
|
|
727
|
+
return minuteStrideConfinement(schedule);
|
|
728
|
+
}
|
|
697
729
|
if (schedule.pattern.minute === "0" || composedClock && schedule.shapes.minute === "single") {
|
|
698
730
|
return composeSecondsOnHour(schedule, plan, opts);
|
|
699
731
|
}
|