|
1 | 1 | import { StyleSheet } from 'react-native';
|
2 | 2 | import deepMap from './deep-map';
|
3 | 3 |
|
4 |
| -const validScaleSheetRegex = /^(\-?\d+(\.\d{1,2})?)@(ms(\d+(\.\d{1,2})?)?|s|vs)$/; |
5 |
| -const scaleRegex = /^(\-?\d+(\.\d{1,2})?)@s$/; |
6 |
| -const verticalScaleRegex = /^(\-?\d+(\.\d{1,2})?)@vs$/; |
7 |
| -const moderateScaleRegex = /^(\-?\d+(\.\d{1,2})?)@ms(\d+(\.\d{1,2})?)?$/; |
| 4 | +const validScaleSheetRegex = /^(\-?\d+(\.\d{1,3})?)@(ms(\d+(\.\d{1,2})?)?|s|vs)(r?)$/; |
8 | 5 |
|
9 | 6 | const scaleByAnnotation = (scale, verticalScale, moderateScale) => (value) => {
|
10 | 7 | if (!validScaleSheetRegex.test(value)) {
|
11 | 8 | return value;
|
12 | 9 | }
|
13 |
| - const size = parseFloat(value.split('@')[0]); |
14 | 10 |
|
15 |
| - if (scaleRegex.test(value)) { |
16 |
| - return scale(size); |
17 |
| - } |
| 11 | + const regexExecResult = validScaleSheetRegex.exec(value); |
| 12 | + const size = parseFloat(regexExecResult[1]); |
| 13 | + const scaleFunc = regexExecResult[3]; |
| 14 | + const shouldRound = value.endsWith('r'); |
18 | 15 |
|
19 |
| - if (verticalScaleRegex.test(value)) { |
20 |
| - return verticalScale(size); |
21 |
| - } |
| 16 | + let result; |
22 | 17 |
|
23 |
| - if (moderateScaleRegex.test(value)) { |
24 |
| - const scaleFactor = value.split('ms')[1]; |
25 |
| - if (scaleFactor) { |
26 |
| - return moderateScale(size, parseFloat(scaleFactor)); |
27 |
| - } |
28 |
| - return moderateScale(size); |
| 18 | + switch (scaleFunc) { |
| 19 | + case 's': |
| 20 | + result = scale(size); |
| 21 | + break; |
| 22 | + case 'vs': |
| 23 | + result = verticalScale(size); |
| 24 | + break; |
| 25 | + case 'ms': |
| 26 | + result = moderateScale(size); |
| 27 | + break; |
| 28 | + default: |
| 29 | + const scaleFactor = value.split('ms')[1].replace('r', ''); |
| 30 | + result = moderateScale(size, parseFloat(scaleFactor)); |
29 | 31 | }
|
| 32 | + |
| 33 | + return shouldRound ? Math.round(result) : result; |
30 | 34 | };
|
31 | 35 |
|
32 | 36 | const scaledSheetCreator = (scale, verticalScale, moderateScale) => {
|
|
0 commit comments