반응형
바이트 수 기준으로 줄바꿈을 적용하는 코드
- 한 줄의 맨 앞에서 trim을 적용한다.
- 한 줄의 바이트 수가 threshold를 넘어가면 줄바꿈한다.
/**
*
* @param {string} str
* @param {number} threshold
* @returns {string}
*/
const changeLine = (str="",threshold=80) => {
/**
*
* @param {number} charCodeAt
* @returns {number}
*/
const encode = (charCodeAt) => (charCodeAt > 127 ? 2 : 1);
let [len, /**@type{string[]} */ buffer] = [0, []];
for (let i = 0; i < str.length; i++) {
const byte = encode(str.charCodeAt(i));
const shoundChangeLine = byte + len > threshold;
const isSpace = str.charAt(i) === " ";
const shouldChangeLineAtSpace = shoundChangeLine && isSpace;
const shouldTrimAtHead = len === 0 && isSpace;
if (shouldChangeLineAtSpace) {
len = 0;
buffer.push("\n");
continue;
}
if (!shouldChangeLineAtSpace && shoundChangeLine) {
buffer.push("\n");
buffer.push(str.charAt(i));
len = byte;
continue;
}
if (shouldTrimAtHead) {
len = 0;
continue;
}
len += byte;
buffer.push(str.charAt(i));
}
return buffer.join("");
};
테스트 케이스 (threshold = 80)
위하여 청춘의 없으면 있으며, 풍부하게 황금시대의 가슴이 그들의 뼈 아니다. 굳세게 설레는 그들의 같은 이것은 천지는 용기가 곧 아니다. 희망의 예수는 자신과 풀밭에 이상을 부패뿐이다. 용감하고 것은 청춘의 그것은 얼마나 이 보라. 피부가 물방아 가는 든 풍부하게 그들을 그림자는 사라지지 끓는다. 가치를 대중을 귀는 크고 천자만홍이 품에 목숨이 인생을 온갖 보라. 피부가 그림자는 품었기 인생을 그것을 예수는 피다. 수 힘차게 새 주는 싸인 있으랴? 미묘한 내려온 뼈 이상 이상, 석가는 이는 따뜻한 풀밭에 듣는다. 이상의 끓는 뛰노는 수 것이다. 그림자는 옷을 많이 봄바람이다.
위하여 청춘의 없으면 있으며, 풍부하게 황금시대의 가슴이 그들의 뼈 아니다. 굳세게
설레는 그들의 같은 이것은 천지는 용기가 곧 아니다. 희망의 예수는 자신과 풀밭에
이상을 부패뿐이다. 용감하고 것은 청춘의 그것은 얼마나 이 보라. 피부가 물방아 가
는 든 풍부하게 그들을 그림자는 사라지지 끓는다. 가치를 대중을 귀는 크고 천자만홍
이 품에 목숨이 인생을 온갖 보라. 피부가 그림자는 품었기 인생을 그것을 예수는 피
다. 수 힘차게 새 주는 싸인 있으랴? 미묘한 내려온 뼈 이상 이상, 석가는 이는 따뜻
한 풀밭에 듣는다. 이상의 끓는 뛰노는 수 것이다. 그림자는 옷을 많이 봄바람이다.
반응형
'FrontEnd' 카테고리의 다른 글
[번역] Mobile First Design vs Desktop First Design (0) | 2023.03.29 |
---|---|
[번역] min(), max(), clamp() CSS 함수 (0) | 2023.03.28 |
[Vite, Vitest, Javascript] Vanilla JS로 TDD with Vitest (0) | 2023.03.23 |
[번역] React TDD 기초 (0) | 2023.03.21 |
[React] Context API를 활용한 전략 패턴 (0) | 2023.03.19 |