#!/usr/bin/env python3 """app/src/*/svc/*.pgc 에서 화면 매니페스트(app/ui/screens.js)를 재생성한다. 각 tpservice 의 입력(getl/gets_)·출력(setl/sets) 필드와 한글 설명을 추출.""" import re, os, json, glob MOD_NAMES = {'ac':'매입','au':'승인/한도','rc':'대사','st':'정산/수수료','py':'지급', 'lg':'원장','cl':'마감','mm':'마스터','vl':'정합성검증','mg':'전문게이트웨이','cm':'공통'} screens=[] for path in sorted(glob.glob('app/src/*/svc/*.pgc')): mod = path.split('/')[2] svc = os.path.basename(path)[:-4] src = open(path, encoding='utf-8', errors='ignore').read() desc='' for line in src.splitlines()[:12]: line=line.strip().lstrip('/*').strip(' *') if re.search(r'[가-힣]', line) and svc not in line[:len(svc)+8]: desc=line.strip(); break if re.search(r'[가-힣]', line) and ':' in line: desc=line.split('-',1)[-1].strip(); break if not desc: m=re.search(r'\*\s*([^\n]*[가-힣][^\n]*)', src[:600]) desc=m.group(1).strip() if m else '' dedup=lambda xs: list(dict.fromkeys(xs)) screens.append({'mod':mod,'modnm':MOD_NAMES.get(mod,mod),'svc':svc,'desc':desc[:80], 'in':dedup(re.findall(r'(?:getl|gets_)\(b,\s*([A-Z_0-9]+)',src)), 'out':dedup(re.findall(r'(?:setl|sets|sets_)\(b,\s*([A-Z_0-9]+)',src))}) with open('app/ui/screens.js','w',encoding='utf-8') as f: f.write("/* 자동생성: app/src/*/svc/*.pgc 에서 추출한 화면 매니페스트 (재생성: tools/gen_screens.py) */\n") f.write("const SVC_SCREENS = "); json.dump(screens,f,ensure_ascii=False,indent=1); f.write(";\n") print(f"screens: {len(screens)}")