text-aligner
Version:
Align text by adding spaces to each string so that all strings have the same number of English and Chinese characters.
57 lines • 1.4 kB
JavaScript
// src/index.ts
var DefaultPaddingMap = {
cjk: {
test: isCJK,
width: 2
}
};
function isCJK(char) {
const cjkRanges = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
];
const charCode = char.codePointAt(0);
return cjkRanges.some(([start, end]) => charCode >= start && charCode <= end);
}
function getCharWidth(char, rules) {
for (const rule of Object.values(rules)) {
const matched = typeof rule.test === "function" ? rule.test(char) : rule.test.test(char);
if (matched) {
return rule.width;
}
}
return 1;
}
function getStringWidth(str, rules) {
let width = 0;
for (const char of str) {
width += getCharWidth(char, rules);
}
return width;
}
function alignText(strings, paddingMap = {}, placeholder = " ") {
const mergedPaddingMap = { ...DefaultPaddingMap, ...paddingMap };
const widths = strings.map((str) => getStringWidth(str, mergedPaddingMap));
const maxWidth = Math.max(...widths);
return strings.map((str, index) => {
const diff = maxWidth - widths[index];
return str + placeholder.repeat(diff);
});
}
export {
alignText
};
//# sourceMappingURL=index.js.map