1 |
|
2 | import { re } from './swuquery-re';
|
3 | import { swu2key, key2swu } from '../convert';
|
4 | import { range } from './swuquery-range';
|
5 |
|
6 | //needs rewritten, but it works
|
7 | /**
|
8 | * Function to transform an SWU symbol with fill and rotation flags to a regular expression
|
9 | * @function swuquery.symbolRanges
|
10 | * @param {string} symbolFR - an SWU character with optional flags of 'f' for any fill and 'r' for any rotation
|
11 | * @returns {string} a regular expression that matches one or more ranges of SWU symbols
|
12 | * @example <caption>Match an exact symbol</caption>
|
13 | * swuquery.symbolRanges('')
|
14 | *
|
15 | * return '\uD8C0\uDC01');
|
16 | * @example <caption>Match a symbol with any fill</caption>
|
17 | * swuquery.symbolRanges('f')
|
18 | *
|
19 | * return '(\uD8C0\uDC01|\uD8C0\uDC11|\uD8C0\uDC21|\uD8C0\uDC31|\uD8C0\uDC41|\uD8C0\uDC51)'
|
20 | * @example <caption>Match a symbol with any rotation</caption>
|
21 | * swuquery.symbolRanges('r')
|
22 | *
|
23 | * return '\uD8C0[\uDC01-\uDC10]'
|
24 | * @example <caption>Match a symbol with any fill or rotation</caption>
|
25 | * swuquery.symbolRanges('fr')
|
26 | *
|
27 | * return '\uD8C0[\uDC01-\uDC60]'
|
28 | */
|
29 | const symbolRanges = (symbolFR) => {
|
30 | let match = symbolFR.match(new RegExp(re.symbol));
|
31 | if (match) {
|
32 | let sym = match[0].slice(0, 2);
|
33 | let key = swu2key(sym);
|
34 | let base = key.slice(0, 4);
|
35 | let start, end;
|
36 | if (match[0].slice(-2) == 'fr') {
|
37 | start = key2swu(base + "00");
|
38 | end = key2swu(base + "5f");
|
39 | return range(start, end);
|
40 | } else if (match[0].slice(-1) == 'r') {
|
41 | start = key2swu(key.slice(0, 5) + '0');
|
42 | end = key2swu(key.slice(0, 5) + 'f');
|
43 | return range(start, end);
|
44 | } else if (match[0].slice(-1) == 'f') {
|
45 | let list = [0, 1, 2, 3, 4, 5].map(function (f) {
|
46 | return key2swu(base + f + key.slice(-1));
|
47 | })
|
48 | return "(" + list.join("|") + ")";
|
49 | } else {
|
50 | return sym;
|
51 | }
|
52 | } else {
|
53 | return '';
|
54 | }
|
55 | }
|
56 |
|
57 | export { symbolRanges } |
\ | No newline at end of file |