Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 1x 1x 1x 1x 1x 312x 60x 52x 78x 59x 63x 112x 112x 112x 158x 158x 112x 137x 1781x 1781x 1781x 1781x 137x | import { getObjectKeys } from '../../domUtils/getObjectKeys';
import { NumberingListType } from '../../constants/NumberingListType';
const CharCodeOfA = 65;
const RomanValues: Record<string, number> = {
M: 1000,
CM: 900,
D: 500,
CD: 400,
C: 100,
XC: 90,
L: 50,
XL: 40,
X: 10,
IX: 9,
V: 5,
IV: 4,
I: 1,
};
/**
* Get the list number for a list item according to list style type and its index number
* @param styleType The list style number, should be a value of NumberingListType type
* @param listNumber List number, start from 1
* @returns A string for this list item. For example, when pass in NumberingListType.LowerAlpha and 2, it returns "b"
*/
export function getOrderedListNumberStr(styleType: number, listNumber: number): string {
switch (styleType) {
case NumberingListType.LowerAlpha:
case NumberingListType.LowerAlphaDash:
case NumberingListType.LowerAlphaDoubleParenthesis:
case NumberingListType.LowerAlphaParenthesis:
return convertDecimalsToAlpha(listNumber, true /*isLowerCase*/);
case NumberingListType.UpperAlpha:
case NumberingListType.UpperAlphaDash:
case NumberingListType.UpperAlphaDoubleParenthesis:
case NumberingListType.UpperAlphaParenthesis:
return convertDecimalsToAlpha(listNumber, false /*isLowerCase*/);
case NumberingListType.LowerRoman:
case NumberingListType.LowerRomanDash:
case NumberingListType.LowerRomanDoubleParenthesis:
case NumberingListType.LowerRomanParenthesis:
return convertDecimalsToRoman(listNumber, true /*isLowerCase*/);
case NumberingListType.UpperRoman:
case NumberingListType.UpperRomanDash:
case NumberingListType.UpperRomanDoubleParenthesis:
case NumberingListType.UpperRomanParenthesis:
return convertDecimalsToRoman(listNumber, false /*isLowerCase*/);
default:
return listNumber + '';
}
}
function convertDecimalsToAlpha(decimal: number, isLowerCase?: boolean): string {
let alpha = '';
decimal--;
while (decimal >= 0) {
alpha = String.fromCharCode((decimal % 26) + CharCodeOfA) + alpha;
decimal = Math.floor(decimal / 26) - 1;
}
return isLowerCase ? alpha.toLowerCase() : alpha;
}
function convertDecimalsToRoman(decimal: number, isLowerCase?: boolean) {
let romanValue = '';
for (const i of getObjectKeys(RomanValues)) {
const timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
decimal = decimal - timesRomanCharAppear * RomanValues[i];
romanValue = romanValue + i.repeat(timesRomanCharAppear);
}
return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;
}
|