File I/O
파일 입출력 및 파서 - S-expression, Lexer/Parser, Serialization, Plotters
모듈 개요
ImEDA의 파일 I/O 시스템은 S-expression 기반 네이티브 포맷과 다양한 외부 포맷(Altium 등)을 지원합니다. Lexer/Parser로 파일을 파싱하고, Plotter로 출력합니다.
S-expression 5 Lexers Protobuf PDF/SVG/DXF
S-expression 기반 파일 포맷
ImEDA는 S-expression(S-expr)을 네이티브 파일 포맷으로 사용합니다. 사람이 읽을 수 있는 텍스트 형식으로 디버깅과 버전 관리에 유리합니다.
지원 확장자
| 구분 | ImEDA (신) | 레거시 | ContentType |
|---|---|---|---|
| 회로도 | .imsch | .sch, .csisch | SchDocument (0) |
| 전자부품 심볼 | .imepd | .epd, .csiepd | EpdDocument (1) |
| 심볼 라이브러리 | .imslib / .imsym | .slib, .csislib | SlibDocument (2) |
| 풋프린트 | .imfp | .fp, .pcblib | FpDocument (3) |
| PCB 보드 | .impcb | .pcb, .csipcb | PcbDocument (4) |
S-expr 구조 예시
Lexer/Parser 시스템
S-expression 파일을 파싱하기 위한 전용 Lexer 세트입니다.
schematic.lexer
회로도 및 심볼 파일 S-expr 문법. 와이어, 심볼, 핀, 필드 토큰 처리.
SCH/EPD/SLIBembedded_files.lexer
임베디드 데이터(이미지, 풋프린트) 파싱. Base64 바이너리 처리.
embeddedlib_table.lexer
라이브러리 테이블 파싱. 경로, 이름, 타입 메타데이터.
librarystroke_params.lexer
선 스타일 파라미터(두께, 색상, 대시 패턴) 파싱.
stroketemplate_fieldnames.lexer
템플릿 필드 이름 정의 파싱. 사용자 정의 필드 구조.
templateimsexpr 어댑터
imapp의 imsexpr_dll과 imengine을 연결하는 어댑터 레이어입니다.
imsexpr_dll
imengine/src/imsexpr/
파서 로직
엔진 파서 사용 금지
CSIEDA_LEXER, CSIEDA_PARSER, CSIEDA_OUTPUTFORMATTER 등 레거시 엔진 파서는 제거 예정. 신규 코드에서는 반드시 imsexpr_dll을 사용해야 합니다.
| 경로 | 설명 |
|---|---|
imapp/src/imsexpr_dll/ | imapp 측 imsexpr 구현 (DLL) |
imengine/src/imsexpr/ | imengine 측 어댑터 |
Serialization
serializable.h
직렬화 인터페이스 정의. 모든 직렬화 가능 객체가 구현합니다.
interfaceProtobuf 지원
고성능 바이너리 직렬화. Lua에서는 lua-protobuf로 접근.
binaryPlotters (c_plotter)
CAD 도면을 다양한 파일 포맷으로 출력하는 시스템입니다.
| Plotter | 포맷 | 용도 |
|---|---|---|
| PDF Plotter | .pdf | 인쇄용 문서 |
| SVG Plotter | .svg | 웹용 벡터 이미지 |
| DXF Plotter | .dxf | CAD 교환 포맷 |
| Gerber Plotter | .gbr | PCB 제조용 거버 |
| PS Plotter | .ps | PostScript 출력 |
| HPGL Plotter | .hpgl | 플로터 출력 |
Altium I/O
Altium Designer 파일을 읽어들이는 I/O 모듈. 바이너리/OLE 포맷을 파싱하여 ImEDA 내부 구조로 변환합니다.
파일 포맷 선택 가이드
신규 파일은 반드시 ImEDA 확장자 사용. 레거시 확장자는 읽기 전용. Snippet은 .imsnip만 (.csipet 제거 예정).