fix(spreadsheet): 엑셀 회계 숫자 형식 끝 역슬래시 남던 것 고침
- mso-number-format 처럼 값 안에 이스케이프된 `\;`(구역 나눔 자리표시, 회계·통화 형식처럼 구역이 여럿인 형식에 흔함)를 선언 나눔 `parseStyleAttr` 가 진짜 `;` 로 착각해 값을 그 자리서 잘라 버리던 것 고침 — `\` 뒤 글자는 통째로 건너뛰고 이스케이프 안 된 `;` 에서만 나누는 `splitDecls` 로 바꿈 - 잘리면 값 끝에 역슬래시 하나만 남고 뒤 구역이 통째로 날아가던 것(사용자 저장본 material/rv.json 서식 형식 끝 '\' 로 나타남)이었음 — 고친 뒤 4구역 회계 형식 (양수·음수·0·글자)이 통째로 살아 들어옴 - resources/tester/spreadsheet/fixture_excel_accounting_fmt.html 새 견본으로 ORCA 실 엔진 확인 — 형식이 `_-* #,##0.00_-;-* #,##0.00_-;_-* "-"??_-;_-@_-` 로 온전히 들어옴(역슬래시 없음), 기존 fixture_excel_style_paste.html 회귀 없음 확인 - 수식 흔적(x:fmla) 확인 — 기존 견본엔 x:str/x:num 만 있고 x:fmla 없음(수식 칸도 x:str 이 `=...` 글 그대로 담아 기존 「=」 앞머리 잡기로 이미 됨). 사용자 실제 클립보드 견본(main_desktop_1)은 아직 안 옴 — 오면 그걸로 다시 봄 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AeeQRLknEpP4SFjVkjDWDs
This commit is contained in:
@@ -219,10 +219,17 @@ function walkTable(table: HTMLTableElement): TableWalk {
|
||||
return { rows: rows.length, cols, owner, merges };
|
||||
}
|
||||
|
||||
/** 선언 나눔 — `mso-number-format:"...\;..."` 안 이스케이프된 `\;`(구역 나눔 자리표시)는 진짜
|
||||
* 선언 끝이 아님(엑셀 회계 형식처럼 구역이 여럿인 값을 여기서 잘라 버리면 값 끝에 떨어진 `\` 만
|
||||
* 남아 형식이 깨짐) — `\` 뒤 글자는 통째로 건너뛰어 그 안 `;` 는 안 자름. */
|
||||
function splitDecls(s: string): string[] {
|
||||
return s.split(/(?<!\\);/);
|
||||
}
|
||||
|
||||
/** 엑셀 · 구글이 `td style="..."` 에 싣는 인라인 서식 → `CellStyle`(읽을 것 없으면 undefined). */
|
||||
function parseStyleAttr(styleAttr: string): Record<string, string> {
|
||||
const out: Record<string, string> = {};
|
||||
for (const decl of styleAttr.split(";")) {
|
||||
for (const decl of splitDecls(styleAttr)) {
|
||||
const i = decl.indexOf(":");
|
||||
if (i < 0) continue;
|
||||
const key = decl.slice(0, i).trim().toLowerCase();
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<!-- fixture_excel_accounting_fmt.html — 사용자 실제 저장본(material/rv.json)에서 형식 끝에 역슬래시가
|
||||
남던 흠 재현(브레인 9-28 두 번째 지시). 엑셀 회계 형식은 구역이 넷(양수·음수·0·글자)이라 CSS 로
|
||||
내보낼 때 구역 나눔 `;` 도 `\;` 로 이스케이프됨 — 선언을 단순히 `;` 로 나누면 이 `\;` 에서 잘려
|
||||
값 끝에 `\` 만 남고 뒤 구역이 통째로 날아감. `parseStyleAttr`(=`splitDecls`)가 이스케이프된
|
||||
`;` 를 진짜 선언 나눔과 구별하는지 이 견본으로 시험(실제 엑셀처럼 <style> 클래스에 담음 —
|
||||
인라인 style 속성에 겹따옴표 낀 값을 두면 prettier 가 CSS 로 다시 찍으며 따옴표 얼개를 바꿔
|
||||
이 흠 재현 자체가 깨짐). -->
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
<!--.xl_acct
|
||||
{mso-number-format:"_-* \#\,\#\#0\.00_-\;\-* \#\,\#\#0\.00_-\;_-* \"-\"??_-\;_-@_-";
|
||||
text-align:right;}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="xl_acct" x:num>1234.5</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user