cronli5 0.8.3 → 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 +47 -0
- package/cronli5.min.js +2 -2
- package/dist/cronli5.cjs +19 -1
- package/dist/cronli5.js +19 -1
- package/dist/lang/de.cjs +49 -3
- package/dist/lang/de.js +49 -3
- package/dist/lang/en.cjs +19 -1
- package/dist/lang/en.js +19 -1
- package/dist/lang/es.cjs +68 -5
- package/dist/lang/es.js +68 -5
- package/dist/lang/fi.cjs +30 -0
- package/dist/lang/fi.js +30 -0
- package/dist/lang/fr.cjs +63 -25
- package/dist/lang/fr.js +63 -25
- package/dist/lang/pt.cjs +64 -25
- package/dist/lang/pt.js +64 -25
- package/dist/lang/zh.cjs +13 -3
- package/dist/lang/zh.js +13 -3
- package/package.json +1 -1
- package/src/lang/de/index.ts +119 -7
- package/src/lang/en/index.ts +57 -3
- package/src/lang/es/index.ts +158 -12
- package/src/lang/fi/index.ts +77 -0
- package/src/lang/fr/index.ts +132 -33
- package/src/lang/pt/index.ts +131 -36
- package/src/lang/zh/index.ts +35 -9
package/dist/lang/es.cjs
CHANGED
|
@@ -277,7 +277,10 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
277
277
|
if (plan.singleSecond) {
|
|
278
278
|
return "en el minuto " + minuteField + " y el segundo " + schedule.pattern.second + " de cada hora" + trailingQualifier(schedule, opts);
|
|
279
279
|
}
|
|
280
|
-
|
|
280
|
+
if (secondsConfinesMinute(schedule)) {
|
|
281
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule, opts) + trailingQualifier(schedule, opts);
|
|
282
|
+
}
|
|
283
|
+
return secondsLeadClause(schedule, opts) + " en el minuto " + minuteField + " de cada hora" + trailingQualifier(schedule, opts);
|
|
281
284
|
}
|
|
282
285
|
function secondsListAtClock(schedule, rest, opts) {
|
|
283
286
|
const clockPhrases = rest.times.map(function clock(time) {
|
|
@@ -323,6 +326,66 @@ function minuteStepConfinement(schedule, stride, opts) {
|
|
|
323
326
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
324
327
|
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;
|
|
325
328
|
}
|
|
329
|
+
function secondsBareLead(schedule) {
|
|
330
|
+
const secondField = schedule.pattern.second;
|
|
331
|
+
const shape = schedule.shapes.second;
|
|
332
|
+
if (shape === "range") {
|
|
333
|
+
const bounds = secondField.split("-");
|
|
334
|
+
return "cada segundo del " + bounds[0] + " al " + bounds[1];
|
|
335
|
+
}
|
|
336
|
+
if (shape === "single") {
|
|
337
|
+
return "en el segundo " + secondField;
|
|
338
|
+
}
|
|
339
|
+
return "en los segundos " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
340
|
+
}
|
|
341
|
+
function confinedMinutePhrase(schedule, opts) {
|
|
342
|
+
const stride = minuteStride(schedule);
|
|
343
|
+
if (stride && schedule.pattern.minute !== "*/2") {
|
|
344
|
+
const ordinal = stepOrdinals[stride.interval];
|
|
345
|
+
const head = ordinal ? "cada " + ordinal + " minuto" : "cada " + numero(stride.interval, opts) + " minutos";
|
|
346
|
+
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
347
|
+
bare: () => "",
|
|
348
|
+
offset: () => " a partir del minuto " + stride.start,
|
|
349
|
+
bounded: () => " del minuto " + stride.start + " al " + stride.last
|
|
350
|
+
});
|
|
351
|
+
return "de " + head + tail + " de cada hora";
|
|
352
|
+
}
|
|
353
|
+
if (schedule.shapes.minute === "range") {
|
|
354
|
+
return "de " + minuteRangeLead(schedule.pattern.minute) + " de cada hora";
|
|
355
|
+
}
|
|
356
|
+
if (schedule.shapes.minute === "list") {
|
|
357
|
+
return "de los minutos " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de cada hora";
|
|
358
|
+
}
|
|
359
|
+
return "del minuto " + schedule.pattern.minute + " de cada hora";
|
|
360
|
+
}
|
|
361
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
362
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
363
|
+
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
364
|
+
}
|
|
365
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
366
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
367
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule, opts) + trailingQualifier(schedule, opts);
|
|
368
|
+
}
|
|
369
|
+
return null;
|
|
370
|
+
}
|
|
371
|
+
function secondsConfinesMinute(schedule) {
|
|
372
|
+
const { second, minute, hour } = schedule.shapes;
|
|
373
|
+
if (second === "list") {
|
|
374
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
375
|
+
if (values && arithmeticStep(values)) {
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
380
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
381
|
+
}
|
|
382
|
+
function composeConnector(schedule, plan, opts) {
|
|
383
|
+
if (plan.rest.kind === "compactClockTimes" && schedule.analyses.clockSecond) {
|
|
384
|
+
return "";
|
|
385
|
+
}
|
|
386
|
+
const locative = (plan.rest.kind === "multipleMinutes" || plan.rest.kind === "singleMinute") && schedule.shapes.hour === "wildcard";
|
|
387
|
+
return secondsLeadClause(schedule, opts) + (locative ? " " : ", ");
|
|
388
|
+
}
|
|
326
389
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
327
390
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
328
391
|
if (hourCad !== null) {
|
|
@@ -341,14 +404,14 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
341
404
|
const cadence = "cada " + numero(stepSegment(schedule, "second").interval, opts) + " segundos del minuto " + schedule.pattern.minute;
|
|
342
405
|
return dayFrame + ", " + window + ", " + cadence;
|
|
343
406
|
}
|
|
344
|
-
|
|
345
|
-
|
|
407
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
408
|
+
if (confined !== null) {
|
|
409
|
+
return confined;
|
|
346
410
|
}
|
|
347
411
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
348
412
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts);
|
|
349
413
|
}
|
|
350
|
-
const
|
|
351
|
-
const lead = restOwnsLead ? "" : secondsLeadClause(schedule, opts) + ", ";
|
|
414
|
+
const lead = composeConnector(schedule, plan, opts);
|
|
352
415
|
return lead + render(schedule, plan.rest, opts);
|
|
353
416
|
}
|
|
354
417
|
function isEveryOtherMinuteSeconds(schedule, plan) {
|
package/dist/lang/es.js
CHANGED
|
@@ -251,7 +251,10 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
251
251
|
if (plan.singleSecond) {
|
|
252
252
|
return "en el minuto " + minuteField + " y el segundo " + schedule.pattern.second + " de cada hora" + trailingQualifier(schedule, opts);
|
|
253
253
|
}
|
|
254
|
-
|
|
254
|
+
if (secondsConfinesMinute(schedule)) {
|
|
255
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule, opts) + trailingQualifier(schedule, opts);
|
|
256
|
+
}
|
|
257
|
+
return secondsLeadClause(schedule, opts) + " en el minuto " + minuteField + " de cada hora" + trailingQualifier(schedule, opts);
|
|
255
258
|
}
|
|
256
259
|
function secondsListAtClock(schedule, rest, opts) {
|
|
257
260
|
const clockPhrases = rest.times.map(function clock(time) {
|
|
@@ -297,6 +300,66 @@ function minuteStepConfinement(schedule, stride, opts) {
|
|
|
297
300
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
298
301
|
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;
|
|
299
302
|
}
|
|
303
|
+
function secondsBareLead(schedule) {
|
|
304
|
+
const secondField = schedule.pattern.second;
|
|
305
|
+
const shape = schedule.shapes.second;
|
|
306
|
+
if (shape === "range") {
|
|
307
|
+
const bounds = secondField.split("-");
|
|
308
|
+
return "cada segundo del " + bounds[0] + " al " + bounds[1];
|
|
309
|
+
}
|
|
310
|
+
if (shape === "single") {
|
|
311
|
+
return "en el segundo " + secondField;
|
|
312
|
+
}
|
|
313
|
+
return "en los segundos " + joinList(segmentWords(segmentsOf(schedule, "second")));
|
|
314
|
+
}
|
|
315
|
+
function confinedMinutePhrase(schedule, opts) {
|
|
316
|
+
const stride = minuteStride(schedule);
|
|
317
|
+
if (stride && schedule.pattern.minute !== "*/2") {
|
|
318
|
+
const ordinal = stepOrdinals[stride.interval];
|
|
319
|
+
const head = ordinal ? "cada " + ordinal + " minuto" : "cada " + numero(stride.interval, opts) + " minutos";
|
|
320
|
+
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
321
|
+
bare: () => "",
|
|
322
|
+
offset: () => " a partir del minuto " + stride.start,
|
|
323
|
+
bounded: () => " del minuto " + stride.start + " al " + stride.last
|
|
324
|
+
});
|
|
325
|
+
return "de " + head + tail + " de cada hora";
|
|
326
|
+
}
|
|
327
|
+
if (schedule.shapes.minute === "range") {
|
|
328
|
+
return "de " + minuteRangeLead(schedule.pattern.minute) + " de cada hora";
|
|
329
|
+
}
|
|
330
|
+
if (schedule.shapes.minute === "list") {
|
|
331
|
+
return "de los minutos " + joinList(segmentWords(segmentsOf(schedule, "minute"))) + " de cada hora";
|
|
332
|
+
}
|
|
333
|
+
return "del minuto " + schedule.pattern.minute + " de cada hora";
|
|
334
|
+
}
|
|
335
|
+
function minuteConfinementRender(plan, schedule, opts) {
|
|
336
|
+
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
337
|
+
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
338
|
+
}
|
|
339
|
+
const minuteRest = plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes" || plan.rest.kind === "rangeOfMinutes";
|
|
340
|
+
if (minuteRest && secondsConfinesMinute(schedule)) {
|
|
341
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule, opts) + trailingQualifier(schedule, opts);
|
|
342
|
+
}
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
function secondsConfinesMinute(schedule) {
|
|
346
|
+
const { second, minute, hour } = schedule.shapes;
|
|
347
|
+
if (second === "list") {
|
|
348
|
+
const values = singleValues(segmentsOf(schedule, "second"));
|
|
349
|
+
if (values && arithmeticStep(values)) {
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
const clockPoint = second === "single" || second === "range" || second === "list";
|
|
354
|
+
return clockPoint && minute !== "wildcard" && hour === "wildcard" && !(second === "single" && minute === "single");
|
|
355
|
+
}
|
|
356
|
+
function composeConnector(schedule, plan, opts) {
|
|
357
|
+
if (plan.rest.kind === "compactClockTimes" && schedule.analyses.clockSecond) {
|
|
358
|
+
return "";
|
|
359
|
+
}
|
|
360
|
+
const locative = (plan.rest.kind === "multipleMinutes" || plan.rest.kind === "singleMinute") && schedule.shapes.hour === "wildcard";
|
|
361
|
+
return secondsLeadClause(schedule, opts) + (locative ? " " : ", ");
|
|
362
|
+
}
|
|
300
363
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
301
364
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
302
365
|
if (hourCad !== null) {
|
|
@@ -315,14 +378,14 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
315
378
|
const cadence = "cada " + numero(stepSegment(schedule, "second").interval, opts) + " segundos del minuto " + schedule.pattern.minute;
|
|
316
379
|
return dayFrame + ", " + window + ", " + cadence;
|
|
317
380
|
}
|
|
318
|
-
|
|
319
|
-
|
|
381
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
382
|
+
if (confined !== null) {
|
|
383
|
+
return confined;
|
|
320
384
|
}
|
|
321
385
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
322
386
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts);
|
|
323
387
|
}
|
|
324
|
-
const
|
|
325
|
-
const lead = restOwnsLead ? "" : secondsLeadClause(schedule, opts) + ", ";
|
|
388
|
+
const lead = composeConnector(schedule, plan, opts);
|
|
326
389
|
return lead + render(schedule, plan.rest, opts);
|
|
327
390
|
}
|
|
328
391
|
function isEveryOtherMinuteSeconds(schedule, plan) {
|
package/dist/lang/fi.cjs
CHANGED
|
@@ -378,6 +378,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
378
378
|
if (plan.singleSecond) {
|
|
379
379
|
return units.minute.mark + " " + minuteField + " " + units.minute.gen + " ja " + schedule.pattern.second + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
380
380
|
}
|
|
381
|
+
if (secondsConfinesMinute(schedule)) {
|
|
382
|
+
return secondsConfinement(schedule, opts);
|
|
383
|
+
}
|
|
381
384
|
return secondsLeadClause(schedule, opts) + ", " + atMarks(minuteField, units.minute, true) + trailingQualifier(schedule, opts);
|
|
382
385
|
}
|
|
383
386
|
function composeSecondsOverMinuteStep(schedule, freq, opts) {
|
|
@@ -428,6 +431,30 @@ function minuteStepConfinement(schedule, stride, opts) {
|
|
|
428
431
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
429
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;
|
|
430
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
|
+
}
|
|
431
458
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
432
459
|
const cadence = composeHourCadence(schedule, plan, opts);
|
|
433
460
|
if (cadence !== null) {
|
|
@@ -436,6 +463,9 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
436
463
|
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
437
464
|
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
438
465
|
}
|
|
466
|
+
if (composeConfinesMinute(plan, schedule)) {
|
|
467
|
+
return secondsConfinement(schedule, opts);
|
|
468
|
+
}
|
|
439
469
|
if (plan.rest.kind === "minuteFrequency" && schedule.pattern.second !== "*") {
|
|
440
470
|
return composeSecondsOverMinuteStep(schedule, plan.rest, opts);
|
|
441
471
|
}
|
package/dist/lang/fi.js
CHANGED
|
@@ -352,6 +352,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
352
352
|
if (plan.singleSecond) {
|
|
353
353
|
return units.minute.mark + " " + minuteField + " " + units.minute.gen + " ja " + schedule.pattern.second + " " + units.second.gen + " kohdalla" + trailingQualifier(schedule, opts);
|
|
354
354
|
}
|
|
355
|
+
if (secondsConfinesMinute(schedule)) {
|
|
356
|
+
return secondsConfinement(schedule, opts);
|
|
357
|
+
}
|
|
355
358
|
return secondsLeadClause(schedule, opts) + ", " + atMarks(minuteField, units.minute, true) + trailingQualifier(schedule, opts);
|
|
356
359
|
}
|
|
357
360
|
function composeSecondsOverMinuteStep(schedule, freq, opts) {
|
|
@@ -402,6 +405,30 @@ function minuteStepConfinement(schedule, stride, opts) {
|
|
|
402
405
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
403
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;
|
|
404
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
|
+
}
|
|
405
432
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
406
433
|
const cadence = composeHourCadence(schedule, plan, opts);
|
|
407
434
|
if (cadence !== null) {
|
|
@@ -410,6 +437,9 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
410
437
|
if (isSteppedMinuteSeconds(schedule, plan)) {
|
|
411
438
|
return minuteStepConfinement(schedule, minuteStride(schedule), opts);
|
|
412
439
|
}
|
|
440
|
+
if (composeConfinesMinute(plan, schedule)) {
|
|
441
|
+
return secondsConfinement(schedule, opts);
|
|
442
|
+
}
|
|
413
443
|
if (plan.rest.kind === "minuteFrequency" && schedule.pattern.second !== "*") {
|
|
414
444
|
return composeSecondsOverMinuteStep(schedule, plan.rest, opts);
|
|
415
445
|
}
|
package/dist/lang/fr.cjs
CHANGED
|
@@ -210,20 +210,6 @@ var weekdayNames = [
|
|
|
210
210
|
"samedi"
|
|
211
211
|
];
|
|
212
212
|
var nthWeekdayMasculine = [null, "premier", "deuxi\xE8me", "troisi\xE8me", "quatri\xE8me", "cinqui\xE8me"];
|
|
213
|
-
var stepOrdinals = {
|
|
214
|
-
3: "troisi\xE8me",
|
|
215
|
-
4: "quatri\xE8me",
|
|
216
|
-
5: "cinqui\xE8me",
|
|
217
|
-
6: "sixi\xE8me",
|
|
218
|
-
7: "septi\xE8me",
|
|
219
|
-
8: "huiti\xE8me",
|
|
220
|
-
9: "neuvi\xE8me",
|
|
221
|
-
10: "dixi\xE8me",
|
|
222
|
-
12: "douzi\xE8me",
|
|
223
|
-
15: "quinzi\xE8me",
|
|
224
|
-
20: "vingti\xE8me",
|
|
225
|
-
30: "trenti\xE8me"
|
|
226
|
-
};
|
|
227
213
|
function normalizeOptions(options) {
|
|
228
214
|
options = options || {};
|
|
229
215
|
const style = resolveDialect(options.dialect);
|
|
@@ -265,6 +251,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
265
251
|
if (plan.singleSecond) {
|
|
266
252
|
return "\xE0 la minute " + minuteField + " et \xE0 la seconde " + schedule.pattern.second + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
267
253
|
}
|
|
254
|
+
if (secondsConfinesMinute(schedule)) {
|
|
255
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
256
|
+
}
|
|
268
257
|
return secondsLeadClause(schedule, opts) + ", \xE0 la minute " + minuteField + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
269
258
|
}
|
|
270
259
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -297,19 +286,67 @@ function minuteStride(schedule) {
|
|
|
297
286
|
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
298
287
|
return values && arithmeticStep(values);
|
|
299
288
|
}
|
|
300
|
-
function
|
|
301
|
-
|
|
302
|
-
const head = ordinal ? "\xE0 la " + ordinal + " minute" : "\xE0 la minute toutes les " + numero(stride.interval, opts);
|
|
303
|
-
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
304
|
-
bare: () => "",
|
|
305
|
-
offset: () => " \xE0 partir de la minute " + stride.start,
|
|
306
|
-
bounded: () => " de la minute " + stride.start + " \xE0 " + stride.last
|
|
307
|
-
});
|
|
308
|
-
return secondsLeadClause(schedule, opts) + " " + head + tail + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
289
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
290
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
309
291
|
}
|
|
310
292
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
311
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;
|
|
312
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
|
+
}
|
|
313
350
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
314
351
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
315
352
|
if (hourCad !== null) {
|
|
@@ -328,8 +365,9 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
328
365
|
const cadence = "toutes les " + numero(stepSegment(schedule, "second").interval, opts) + " secondes de la minute " + schedule.pattern.minute;
|
|
329
366
|
return dayFrame + ", " + window + ", " + cadence;
|
|
330
367
|
}
|
|
331
|
-
|
|
332
|
-
|
|
368
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
369
|
+
if (confined !== null) {
|
|
370
|
+
return confined;
|
|
333
371
|
}
|
|
334
372
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
335
373
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts).replace(/^toutes les /u, "chaque ");
|
package/dist/lang/fr.js
CHANGED
|
@@ -184,20 +184,6 @@ var weekdayNames = [
|
|
|
184
184
|
"samedi"
|
|
185
185
|
];
|
|
186
186
|
var nthWeekdayMasculine = [null, "premier", "deuxi\xE8me", "troisi\xE8me", "quatri\xE8me", "cinqui\xE8me"];
|
|
187
|
-
var stepOrdinals = {
|
|
188
|
-
3: "troisi\xE8me",
|
|
189
|
-
4: "quatri\xE8me",
|
|
190
|
-
5: "cinqui\xE8me",
|
|
191
|
-
6: "sixi\xE8me",
|
|
192
|
-
7: "septi\xE8me",
|
|
193
|
-
8: "huiti\xE8me",
|
|
194
|
-
9: "neuvi\xE8me",
|
|
195
|
-
10: "dixi\xE8me",
|
|
196
|
-
12: "douzi\xE8me",
|
|
197
|
-
15: "quinzi\xE8me",
|
|
198
|
-
20: "vingti\xE8me",
|
|
199
|
-
30: "trenti\xE8me"
|
|
200
|
-
};
|
|
201
187
|
function normalizeOptions(options) {
|
|
202
188
|
options = options || {};
|
|
203
189
|
const style = resolveDialect(options.dialect);
|
|
@@ -239,6 +225,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
239
225
|
if (plan.singleSecond) {
|
|
240
226
|
return "\xE0 la minute " + minuteField + " et \xE0 la seconde " + schedule.pattern.second + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
241
227
|
}
|
|
228
|
+
if (secondsConfinesMinute(schedule)) {
|
|
229
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
230
|
+
}
|
|
242
231
|
return secondsLeadClause(schedule, opts) + ", \xE0 la minute " + minuteField + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
243
232
|
}
|
|
244
233
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -271,19 +260,67 @@ function minuteStride(schedule) {
|
|
|
271
260
|
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
272
261
|
return values && arithmeticStep(values);
|
|
273
262
|
}
|
|
274
|
-
function
|
|
275
|
-
|
|
276
|
-
const head = ordinal ? "\xE0 la " + ordinal + " minute" : "\xE0 la minute toutes les " + numero(stride.interval, opts);
|
|
277
|
-
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
278
|
-
bare: () => "",
|
|
279
|
-
offset: () => " \xE0 partir de la minute " + stride.start,
|
|
280
|
-
bounded: () => " de la minute " + stride.start + " \xE0 " + stride.last
|
|
281
|
-
});
|
|
282
|
-
return secondsLeadClause(schedule, opts) + " " + head + tail + " de chaque heure" + trailingQualifier(schedule, opts);
|
|
263
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
264
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
283
265
|
}
|
|
284
266
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
285
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;
|
|
286
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
|
+
}
|
|
287
324
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
288
325
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
289
326
|
if (hourCad !== null) {
|
|
@@ -302,8 +339,9 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
302
339
|
const cadence = "toutes les " + numero(stepSegment(schedule, "second").interval, opts) + " secondes de la minute " + schedule.pattern.minute;
|
|
303
340
|
return dayFrame + ", " + window + ", " + cadence;
|
|
304
341
|
}
|
|
305
|
-
|
|
306
|
-
|
|
342
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
343
|
+
if (confined !== null) {
|
|
344
|
+
return confined;
|
|
307
345
|
}
|
|
308
346
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
309
347
|
return secondsLeadClause(schedule, opts) + " de " + render(schedule, plan.rest, opts).replace(/^toutes les /u, "chaque ");
|
package/dist/lang/pt.cjs
CHANGED
|
@@ -232,20 +232,6 @@ function weekdayFeminine(number) {
|
|
|
232
232
|
}
|
|
233
233
|
var nthWeekdayMasculine = [null, "primeiro", "segundo", "terceiro", "quarto", "quinto"];
|
|
234
234
|
var nthWeekdayFeminine = [null, "primeira", "segunda", "terceira", "quarta", "quinta"];
|
|
235
|
-
var stepOrdinals = {
|
|
236
|
-
3: "terceiro",
|
|
237
|
-
4: "quarto",
|
|
238
|
-
5: "quinto",
|
|
239
|
-
6: "sexto",
|
|
240
|
-
7: "s\xE9timo",
|
|
241
|
-
8: "oitavo",
|
|
242
|
-
9: "nono",
|
|
243
|
-
10: "d\xE9cimo",
|
|
244
|
-
12: "d\xE9cimo segundo",
|
|
245
|
-
15: "d\xE9cimo quinto",
|
|
246
|
-
20: "vig\xE9simo",
|
|
247
|
-
30: "trig\xE9simo"
|
|
248
|
-
};
|
|
249
235
|
function noonMidnightArticle(phrase) {
|
|
250
236
|
if (phrase === "meio-dia") {
|
|
251
237
|
return "o";
|
|
@@ -351,6 +337,9 @@ function renderSecondsWithinMinute(schedule, plan, opts) {
|
|
|
351
337
|
if (plan.singleSecond) {
|
|
352
338
|
return "no minuto " + minuteField + " e no segundo " + schedule.pattern.second + " de cada hora" + trailingQualifier(schedule, opts);
|
|
353
339
|
}
|
|
340
|
+
if (secondsConfinesMinute(schedule)) {
|
|
341
|
+
return secondsBareLead(schedule) + " " + confinedMinutePhrase(schedule) + trailingQualifier(schedule, opts);
|
|
342
|
+
}
|
|
354
343
|
return secondsLeadClause(schedule, opts) + ", no minuto " + minuteField + " de cada hora" + trailingQualifier(schedule, opts);
|
|
355
344
|
}
|
|
356
345
|
function secondsListAtClock(schedule, rest, opts) {
|
|
@@ -384,19 +373,68 @@ function minuteStride(schedule) {
|
|
|
384
373
|
const values = singleValues(segmentsOf(schedule, "minute"));
|
|
385
374
|
return values && arithmeticStep(values);
|
|
386
375
|
}
|
|
387
|
-
function
|
|
388
|
-
|
|
389
|
-
const head = ordinal ? "no " + ordinal + " minuto" : "a cada " + numero(stride.interval, opts) + " minutos";
|
|
390
|
-
const tail = renderStride({ ...stride, cycle: 60 }, {
|
|
391
|
-
bare: () => "",
|
|
392
|
-
offset: () => " a partir do minuto " + stride.start,
|
|
393
|
-
bounded: () => " do minuto " + stride.start + " ao " + stride.last
|
|
394
|
-
});
|
|
395
|
-
return secondsLeadClause(schedule, opts) + " " + head + tail + " de cada hora" + trailingQualifier(schedule, opts);
|
|
376
|
+
function steppedMinuteConfinement(schedule, plan, lead, opts) {
|
|
377
|
+
return lead + ", " + render(schedule, plan.rest, opts) + trailingQualifier(schedule, opts);
|
|
396
378
|
}
|
|
397
379
|
function isSteppedMinuteSeconds(schedule, plan) {
|
|
398
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;
|
|
399
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
|
+
}
|
|
400
438
|
function renderComposeSeconds(schedule, plan, opts) {
|
|
401
439
|
const hourCad = composeHourCadence(schedule, plan, opts);
|
|
402
440
|
if (hourCad !== null) {
|
|
@@ -415,8 +453,9 @@ function renderComposeSeconds(schedule, plan, opts) {
|
|
|
415
453
|
const cadence = "a cada " + numero(stepSegment(schedule, "second").interval, opts) + " segundos do minuto " + schedule.pattern.minute;
|
|
416
454
|
return dayFrame + ", " + window + ", " + cadence;
|
|
417
455
|
}
|
|
418
|
-
|
|
419
|
-
|
|
456
|
+
const confined = minuteConfinementRender(plan, schedule, opts);
|
|
457
|
+
if (confined !== null) {
|
|
458
|
+
return confined;
|
|
420
459
|
}
|
|
421
460
|
if (isEveryOtherMinuteSeconds(schedule, plan)) {
|
|
422
461
|
const rest = render(schedule, plan.rest, opts).replace(/^a /u, "");
|