text-aligner
v1.2.0
Published
Align text by adding spaces to each string so that all strings have the same number of English and Chinese characters.
Maintainers
Readme
text-align
A utility for aligning mixed English and CJK (Chinese, Japanese, Korean) text by adding appropriate padding spaces based on character display width.
Features
- Supports mixed English and CJK text alignment
- Handles various CJK character ranges including:
- Chinese (Hanzi)
- Japanese (Hiragana, Katakana)
- Korean (Hangul)
- Full-width characters
- Customizable character width rules
- Customizable placeholder character
- Zero dependencies
- TypeScript support
Installation
npm install text-alignerUsage
import {alignText} from 'text-aligner'
const strings = ['Hello 你好', 'Hi 早上好', 'Good morning 晚安']
const aligned = alignText(strings)
console.log(aligned)
// [
// 'Hello 你好 ',
// 'Hi 早上好 ',
// 'Good morning 晚安',
// ]API
alignText
function alignText(
strings: string[],
paddingMap?: PaddingMap,
placeholder?: string
): string[]
type CharWidthRule = {
test: RegExp | ((char: string) => boolean)
width: number
}
type PaddingMap = Record<string, CharWidthRule>Aligns an array of strings by adding padding spaces to make all strings have the same display width.
Parameters
strings: Array of strings to be alignedpaddingMap(optional): Custom character width rules. Will be merged with the default CJK rule (width: 2)placeholder(optional): Character used for padding. Default:' '(U+0020 space)
Returns
An array of aligned strings with appropriate padding added.
Examples
Basic usage
alignText(['Hello', 'Hi', 'Hey'])
// ['Hello', 'Hi ', 'Hey ']Mixed CJK and English
alignText(['名前: 田中', 'Name: John', '이름: 김철수'])
// [
// '名前: 田中 ',
// 'Name: John ',
// '이름: 김철수',
// ]Custom paddingMap
// Add custom rule while keeping default CJK rule
alignText(['ABC', 'AB', 'A'], {
uppercase: {
test: /^[A-Z]$/,
width: 2,
},
})
// ['ABC ', 'AB ', 'A ']Custom placeholder
alignText(['Hello', 'Hi'], {}, '-')
// ['Hello', 'Hi---']Override default CJK rule
alignText(['你好', '世界'], {
cjk: {
test: (char) => /\p{Script=Han}/u.test(char),
width: 3,
},
})License
MIT
