feat(M01): 읽는 식 줄에 변수 이름 꼴을 더함 — 두 칸 줄 맞춤
POST /text 가 줄마다 「이름글」(석공노임 * 메쌓기인력.석공 * (1 + 증가율 %) = 석공비)과 「글」(값 꼴)을 같이 주고 짝 번호를 붙임 — 두 꼴이 한 줄 안에 있어 개수·차례가 늘 같음. 표 찾기·로직 부르기는 3-4 별칭 규칙 그대로(답에 별칭 목록 포함) · 단가 자리는 노임·손료·단가 꼬리 · 만약()은 두 꼴 모두 걸린 쪽만. 계약 3장 갱신 · 로직 1,291개 전수 점검(짝 어긋남 0 · 함수 샘 0) · 시험 20 통과. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -93,10 +93,15 @@ def _taken(row: dict) -> set[str]:
|
||||
|
||||
|
||||
# ── 별칭 짓기 ─────────────────────────────────────────────────────────
|
||||
def plain(text) -> str:
|
||||
"""이름에 쓸 수 있는 글자만 남김 — 별칭과 변수 이름이 같은 규칙을 씀."""
|
||||
return _DROP.sub("", str(text or ""))
|
||||
|
||||
|
||||
def _base(ref: str, master) -> str:
|
||||
"""별칭 밑이름 — 표·로직의 `이름` 칸에서 · 비거나 너무 길면 키를 그대로 보임."""
|
||||
try:
|
||||
name = _DROP.sub("", str(master.get(ref).get("이름") or ""))
|
||||
name = plain(master.get(ref).get("이름"))
|
||||
except mf.FormulaError:
|
||||
name = ""
|
||||
if not name or len(name) > MAX_NAME or name[0].isdigit():
|
||||
@@ -170,6 +175,16 @@ def _about(kind: str, ref: str, master) -> dict:
|
||||
|
||||
|
||||
# ── 펴기 · 되돌리기 ────────────────────────────────────────────────────
|
||||
def names(marks: list[dict]) -> dict[str, str]:
|
||||
"""별칭 목록 → {원문 서명: 별칭 이름} — 식 글을 별칭으로 갈아 끼울 때 씀."""
|
||||
return {_SPACE.sub(" ", str(one["원문"])): str(one["이름"]) for one in marks}
|
||||
|
||||
|
||||
def mask(text, name_of: dict[str, str]) -> str:
|
||||
"""부르기 한 덩이를 별칭 이름으로 — `spread` 와 같은 규칙(다른 모듈도 씀)."""
|
||||
return _mask(str(text), name_of)
|
||||
|
||||
|
||||
def _mask(text: str, name_of: dict[str, str]) -> str:
|
||||
"""부르기 한 덩이를 별칭 이름으로 — 뒤에서부터 갈아 끼움(자리가 밀리지 않게)."""
|
||||
out = text
|
||||
@@ -206,7 +221,7 @@ def _unmask(text: str, raw_of: dict[str, str]) -> str:
|
||||
def spread(master, row: dict) -> dict:
|
||||
"""로직 한 줄 → 별칭 꼴 식 묶음. `로직` = 식만 별칭으로 바뀐 줄 통째 · `별칭` 에 원문."""
|
||||
marks = aliases(row, master)
|
||||
name_of = {_SPACE.sub(" ", one["원문"]): one["이름"] for one in marks}
|
||||
name_of = names(marks)
|
||||
shown = copy.deepcopy(row)
|
||||
for _, _, _, col, box in slots(shown):
|
||||
box[col] = _mask(box[col], name_of)
|
||||
|
||||
Reference in New Issue
Block a user