- spreadsheet_types.ts · spreadsheet_view_types.ts — 문서 · 칸 · 서식 · 수식 나무 · 값 · 명령 · 계산 엔진 · 화면 문맥 계약 - 머리 주석에 파일 · 주인(A~F) · 예산 줄 수 · 크기 예산(gzip 54 KB) · 규칙(외부 라이브러리 0 · M02 만 늦게 불러옴) - A · B 엔진 · C 격자 · D 진입 · E 도구 공개 함수 머리(빈 몸) - spreadsheet_sample.json — basis/<열 id>.json 한 벌 견본(병합 · 서식 · 다른 시트 참조 · 숨김 · 계산값) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp
34 lines
1.6 KiB
TypeScript
34 lines
1.6 KiB
TypeScript
/* =============================================================================
|
|
* spreadsheet_clipboard.ts (주인 E)
|
|
* 복사 · 잘라내기 · 붙여넣기 — `copy` · `cut` · `paste` 사건만(허락 창 없음 · navigator.clipboard 안 씀).
|
|
* 형 · 수식 살리기 규칙은 `spreadsheet_types.ts` `ClipBlock` 머리. 잘라 붙이기(안쪽) = `옮기기` 명령 ·
|
|
* 나머지 = `칸` 명령(식은 A `moveFormula` · 구글 R1C1 은 `r1c1ToA1`) + 병합 명령 묶음.
|
|
* 편집 중(`ctx.editor.editing()`)이면 사건을 편집기에 맡김. 0 계약 머리 — 몸은 E 가 채움.
|
|
* ========================================================================== */
|
|
|
|
import type { CellAddress, CellRange, ClipBlock, Workbook } from "./spreadsheet_types";
|
|
import type { PartHandle, SpreadsheetContext } from "./spreadsheet_view_types";
|
|
|
|
const todo = (): never => {
|
|
throw new Error("spreadsheet_clipboard: 아직 없음(E)");
|
|
};
|
|
|
|
/** `ctx.root` 의 copy · cut · paste 를 받음(root null) */
|
|
export function attachClipboard(_ctx: SpreadsheetContext): PartHandle {
|
|
return todo();
|
|
}
|
|
|
|
/** 클립보드 글 → 뭉치(HTML 먼저 · 없으면 TSV) · 읽을 것 없으면 null · `at` = 붙일 왼위(구글 R1C1 풀이) */
|
|
export function parseClipboard(_html: string, _text: string, _at: CellAddress): ClipBlock | null {
|
|
return todo();
|
|
}
|
|
|
|
/** 범위 → 클립보드 글 둘(TSV = 보이는 값 · HTML = 인라인 서식 표 + 안쪽 뭉치 JSON) */
|
|
export function blockToClipboard(
|
|
_book: Workbook,
|
|
_sheet: string,
|
|
_range: CellRange,
|
|
): { html: string; text: string } {
|
|
return todo();
|
|
}
|