Conversation
apply_table_ops could insert rows (insert_row_by_clone) but no columns. insert_column_by_clone inserts count columns right of grid column ref_col (left of it with side "left"), cloning it: - each new column is as wide as ref_col, and the table grows by it; - each new cell takes the format of the cell of the same row in ref_col, and its text unless blank is set, which leaves one empty paragraph as Hangul does; - a cell merged across the new columns grows its colSpan and width, next to a merged cell ending (on the left, starting) at ref_col each new column gets an empty cell of its format and rows, and a cell merged down ref_col is cloned with its rows; - cell zones move with their columns. Eighteen Hangul-saved files: 3x3 tables made by Hangul and the same tables after Hangul inserted columns (right, left, three, right of a wider column, merged cells across, ending at and down the column, formats per row, a table as wide as the text). With blank the inserted tables match Hangul's cell for cell, but for the stored width of a cell merged across the new column, which Hangul leaves as it was and draws by the grid. The row insertion shares its paragraph id helper (_fresh_ids). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tables written by other programs can hold hp:tc elements with their paragraphs straight inside, without hp:subList, hp:cellAddr, hp:cellSpan or hp:cellSz. Deleting a row or a column, inserting rows or columns, setting or fitting column widths and splitting the table stopped on an AssertionError there, and inserting a row or reordering rows refused it for an unrelated reason. _guard_flat, which every one of these edits calls first, now refuses such a table as it refuses one holding a table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
delete_column on the only column of a one-column table, or on every column, stopped on a ZeroDivisionError sharing out the freed width among no columns left. delete_row on every row left a table without rows and refused it only for the grid it left. Hangul does not delete the last row or column either; both now refuse and point to delete_table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
바뀐 점
열 삽입
insert_column_by_clone표 구조 편집(
hwpx.table_patch.apply_table_ops)은 행 삽입(insert_row_by_clone)만 있고 열 삽입이 없었다. 이제 격자 열 하나를 복제해 그 오른쪽(또는 왼쪽)에 열을 넣는다.ref_col: 기준 격자 열.side는"right"(기본) 또는"left".count는 넣을 열 수.blank: true면 빈 문단 하나만 둔다(한/글과 같음).한/글의 동작
한/글로 3×3 표를 만들고, 1열 칸에 커서를 둔 채 칸을 추가해 저장했다.
insert_column_by_clone은 이 규칙을 따른다. 다른 점은 둘이다.칸 영역(
hp:cellzone)의 열 주소도 함께 옮긴다. 영역 뒤의 열이면 밀고, 새 열을 가로지르면 넓힌다.비표준 칸의 표에서 멈추던 것
다른 프로그램이 쓴 표 가운데
hp:tc안에 문단만 있고hp:subList·hp:cellAddr·hp:cellSpan·hp:cellSz가 없는 표가 있다.AssertionError로 멈췄다._guard_flat이 그런 표를 표 안의 표처럼 거부한다.표의 행·열을 모두 지우던 것
delete_column이 1열 표의 열이나 모든 열을 지우면ZeroDivisionError로 멈췄다(나머지 열에 나눠 줄 폭을 0개 열에 나눔).delete_row가 모든 행을 지우면 남는 격자 탓으로만 거부했다.delete_table을 쓰라고 알린다.코드
table_patch.py_insert_column_by_clone,_shift_zone_columns를 더함._fresh_ids를 뺌._CLONE_OPS를 둠._guard_flat에 칸 주소·크기 검사를 더함._delete_columns·_delete_rows가 모든 열·행 삭제를 거부.docs/editor-menu-reverse-map.md: "줄/칸 추가하기" 행에 새 op를 적음.테스트
tests/test_insert_column_by_clone.py한/글 저장본 열여덟 개를 함께 넣는다. 기준 표 8개와, 한/글이 열을 넣은 표 10개다.
blank: true로 같은 열을 넣는다.sz와colCnt도 맞춘다.side의 거부.tests/test_table_ops_cells_without_geometry.py주소·크기가 없는 칸의 표에서 구조 편집 9가지가 거부로 끝나는지 본다. 고치기 전에는 9가지 모두 틀렸다.
tests/test_table_ops_delete_every_line.py1열 표의 열, 모든 열, 1행 표의 행, 모든 행을 지우면 거부되고 문서가 그대로인지 본다. 하나만 남기는 삭제는 그대로 된다. 고치기 전에는 거부 4판이 모두 틀렸다.
🤖 Generated with Claude Code