Skip to content

Commit 2563c95

Browse files
committed
Adding dayPeriodPatterns
1 parent 2d9ddc0 commit 2563c95

3 files changed

Lines changed: 84 additions & 0 deletions

File tree

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,28 @@ cldr.extractDayPeriods('en_GB', 'gregorian');
453453
wide: { am: 'AM', pm: 'PM' } } }
454454
```
455455

456+
### cldr.extractDayPeriodRules(localeId='root')
457+
458+
Extract a ruleset for locale-aware day periods,
459+
to be used with extractDayPeriods().
460+
461+
```javascript
462+
cldr.extractDayPeriodRules('nl');
463+
{ format: [
464+
{ type: 'morning1', at: '', from: '06:00', before: '12:00' },
465+
{ type: 'afternoon1', at: '', from: '12:00', before: '18:00' },
466+
{ type: 'evening1', at: '', from: '18:00', before: '24:00' },
467+
{ type: 'night1', at: '', from: '00:00', before: '06:00' },
468+
],
469+
standAlone: [
470+
{ type: 'midnight', at: '00:00', from: '', before: '' },
471+
{ type: 'morning1', at: '', from: '06:00', before: '12:00' },
472+
{ type: 'afternoon1', at: '', from: '12:00', before: '18:00' },
473+
{ type: 'evening1', at: '', from: '18:00', before: '24:00' },
474+
{ type: 'night1', at: '', from: '00:00', before: '06:00' }
475+
] }
476+
```
477+
456478
### cldr.extractCyclicNames(localeId='root', calendarId='gregorian')
457479

458480
Extract a nested hash with cyclic names for a calendar and locale

lib/cldr.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,46 @@ Cldr.prototype = {
838838
return dayPeriods;
839839
},
840840

841+
extractDayPeriodRules(localeId) {
842+
const document = this.getDocument(
843+
Path.resolve(this.cldrPath, 'common', 'supplemental', 'dayPeriods.xml'),
844+
);
845+
const dayPeriodRulesNode = xpath.select(
846+
'/supplementalData/dayPeriodRuleSet[not(@type)]' +
847+
`/dayPeriodRules[@locales='${localeId}']`,
848+
document,
849+
)[0];
850+
const dayPeriodRules = xpath.select('dayPeriodRule', dayPeriodRulesNode);
851+
852+
const dayPeriodRulesSelectNode = xpath.select(
853+
"/supplementalData/dayPeriodRuleSet[@type='selection']" +
854+
`/dayPeriodRules[@locales='${localeId}']`,
855+
document,
856+
)[0];
857+
const dayPeriodSelectsRules = xpath.select(
858+
'dayPeriodRule',
859+
dayPeriodRulesSelectNode,
860+
);
861+
return {
862+
standAlone: dayPeriodRules.map((dayPeriodRuleNode) => {
863+
return {
864+
type: dayPeriodRuleNode.getAttribute('type'),
865+
at: dayPeriodRuleNode.getAttribute('at'),
866+
from: dayPeriodRuleNode.getAttribute('from'),
867+
before: dayPeriodRuleNode.getAttribute('before'),
868+
};
869+
}),
870+
format: dayPeriodSelectsRules.map((dayPeriodRuleNode) => {
871+
return {
872+
type: dayPeriodRuleNode.getAttribute('type'),
873+
at: dayPeriodRuleNode.getAttribute('at'),
874+
from: dayPeriodRuleNode.getAttribute('from'),
875+
before: dayPeriodRuleNode.getAttribute('before'),
876+
};
877+
}),
878+
};
879+
},
880+
841881
extractCyclicNames(localeId, calendarId) {
842882
this.checkValidLocaleId(localeId);
843883
calendarId = calendarId || 'gregorian';

test/extractDayPeriodPatterns.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const expect = require('unexpected');
2+
3+
const cldr = require('../lib/cldr');
4+
5+
describe('extractDayPeriodRules', () => {
6+
const dutchDayPeriodRules = cldr.extractDayPeriodRules('nl');
7+
it('should have the correct rules', () => {
8+
expect(dutchDayPeriodRules.standAlone, 'to equal', [
9+
{ type: 'midnight', at: '00:00', from: '', before: '' },
10+
{ type: 'morning1', at: '', from: '06:00', before: '12:00' },
11+
{ type: 'afternoon1', at: '', from: '12:00', before: '18:00' },
12+
{ type: 'evening1', at: '', from: '18:00', before: '24:00' },
13+
{ type: 'night1', at: '', from: '00:00', before: '06:00' },
14+
]);
15+
expect(dutchDayPeriodRules.format, 'to equal', [
16+
{ type: 'morning1', at: '', from: '06:00', before: '12:00' },
17+
{ type: 'afternoon1', at: '', from: '12:00', before: '18:00' },
18+
{ type: 'evening1', at: '', from: '18:00', before: '24:00' },
19+
{ type: 'night1', at: '', from: '00:00', before: '06:00' },
20+
]);
21+
});
22+
});

0 commit comments

Comments
 (0)