mirror of
https://github.com/musix-org/musix-oss
synced 2024-12-23 16:13:18 +00:00
90 lines
2.1 KiB
Markdown
90 lines
2.1 KiB
Markdown
# Extension
|
|
|
|
By using `extend()`, you could add your own tokens or modify behavior of existing tokens. This is equivalent to define a new plugin without name.
|
|
|
|
## Token
|
|
|
|
Tokens in this library have the following rules:
|
|
|
|
- All of the characters must be the same alphabet (`A-Z, a-z`).
|
|
|
|
```javascript
|
|
'E' // Good
|
|
'EE' // Good
|
|
'EEEEEEEEEE' // Good, but why so long!?
|
|
'EES' // Not good
|
|
'???' // Not good
|
|
```
|
|
|
|
- It is case sensitive.
|
|
|
|
```javascript
|
|
'eee' // Good
|
|
'Eee' // Not good
|
|
```
|
|
|
|
- To the parser, it is not able to add token of new alphabet.
|
|
|
|
```javascript
|
|
'EEE' // This is not able to add because `E` is not an existing token in the parser.
|
|
'YYY' // This is OK because `Y` token is existing in the parser.
|
|
'SSS' // This is modifying, not adding. Because exactly the same token is existing.
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Example 1
|
|
|
|
Add `E` token to the formatter. This new token will output "decade" like this:
|
|
|
|
```javascript
|
|
const d1 = new Date(2020, 0, 1);
|
|
const d2 = new Date(2019, 0, 1);
|
|
|
|
date.format(d1, '[The year] YYYY [is] E[s].'); // => "The year 2020 is 2020s."
|
|
date.format(d2, '[The year] YYYY [is] E[s].'); // => "The year 2019 is 2010s."
|
|
```
|
|
|
|
Source code example is here:
|
|
|
|
```javascript
|
|
const date = require('date-and-time');
|
|
|
|
date.extend({
|
|
formatter: {
|
|
E: function (d) {
|
|
return (d.getFullYear() / 10 | 0) * 10;
|
|
}
|
|
}
|
|
});
|
|
```
|
|
|
|
### Example 2
|
|
|
|
In the parser, modify `MMM` token to ignore case:
|
|
|
|
```javascript
|
|
date.parse('Dec 25 2019', 'MMM DD YYYY'); // => December 25, 2019
|
|
date.parse('dec 25 2019', 'MMM DD YYYY'); // => December 25, 2019
|
|
date.parse('DEC 25 2019', 'MMM DD YYYY'); // => December 25, 2019
|
|
```
|
|
|
|
Source code example is here:
|
|
|
|
```javascript
|
|
const date = require('date-and-time');
|
|
|
|
date.extend({
|
|
parser: {
|
|
MMM: function (str) {
|
|
const mmm = this.res.MMM.map(m => m.toLowerCase());
|
|
const result = this.find(mmm, str.toLowerCase());
|
|
result.value++;
|
|
return result;
|
|
}
|
|
}
|
|
});
|
|
```
|
|
|
|
Modifying the parser may be a bit difficult. Refer to the library source code to grasp the default behavior.
|