# -*- coding: utf-8 -*- """M01 로직 단위 글 → 건설품셈 원문 꼴(PLAN 801-5 · 요구 663-2) — 글만 바꿈 · 셈 · 환산 안 바꿈. `canon(단위 글)` = 아래 `RULES` 를 차례로 적용(이미 원문 꼴이면 그대로 · 두 번 돌려도 같음). `RULES` 한 줄 = (이름, 지금 글 정규식, 바꿀 글, 원문 글, 근거 절들) — 근거 절 = `EVIDENCE_ROOT` 아래 파일 · 그 파일 안에 원문 글이 실제로 있어야 함(시험 `test_801_5_units`). 원문이 두 꼴을 다 쓰는 단위(㎞ · km · 분 · min)는 안 건드림. 단위 칸 중 원문 표를 그대로 옮긴 계수 · 소요량 표 값칸 · 호표 줄 단위(요소 단위)는 대상 아님. """ from __future__ import annotations import re from pathlib import Path EVIDENCE_ROOT = Path("resources/knowledge/original/원가계산/건설공사_표준품셈/본문") _A = r"(? str: """원문 꼴 단위 글 — 규칙에 안 걸리면 그대로.""" text = str(unit or "") for _, pat, to, _, _ in _COMPILED: text = pat.sub(to, text) return text def rule_of(before: str) -> str: """바뀐 단위가 걸린 규칙 이름들(검토 목록 · 대응표용).""" out, text = [], str(before or "") for name, pat, to, _, _ in _COMPILED: if pat.search(text): out.append(name) text = pat.sub(to, text) return " · ".join(out)