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, .csischSchDocument (0)
전자부품 심볼.imepd.epd, .csiepdEpdDocument (1)
심볼 라이브러리.imslib / .imsym.slib, .csislibSlibDocument (2)
풋프린트.imfp.fp, .pcblibFpDocument (3)
PCB 보드.impcb.pcb, .csipcbPcbDocument (4)

S-expr 구조 예시

(imsch (version 1) (generator "ImEDA") (sheet (name "Main") (wire (pts (xy 100.0 50.0) (xy 200.0 50.0)) (stroke (width 0.254) (type solid) (color 0 150 0 255)) ) (symbol (lib_id "Device:R") (at 150.0 75.0 0) (property "Reference" "R1" (at 150.0 65.0 0)) (property "Value" "10k" (at 150.0 85.0 0)) ) ) )

Lexer/Parser 시스템

S-expression 파일을 파싱하기 위한 전용 Lexer 세트입니다.

schematic.lexer

회로도 및 심볼 파일 S-expr 문법. 와이어, 심볼, 핀, 필드 토큰 처리.

SCH/EPD/SLIB

embedded_files.lexer

임베디드 데이터(이미지, 풋프린트) 파싱. Base64 바이너리 처리.

embedded

lib_table.lexer

라이브러리 테이블 파싱. 경로, 이름, 타입 메타데이터.

library

stroke_params.lexer

선 스타일 파라미터(두께, 색상, 대시 패턴) 파싱.

stroke

template_fieldnames.lexer

템플릿 필드 이름 정의 파싱. 사용자 정의 필드 구조.

template

imsexpr 어댑터

imapp의 imsexpr_dll과 imengine을 연결하는 어댑터 레이어입니다.

imsexpr 파싱 흐름
imapp
imsexpr_dll
Adapter
imengine/src/imsexpr/
imengine
파서 로직

엔진 파서 사용 금지

CSIEDA_LEXER, CSIEDA_PARSER, CSIEDA_OUTPUTFORMATTER 등 레거시 엔진 파서는 제거 예정. 신규 코드에서는 반드시 imsexpr_dll을 사용해야 합니다.

경로설명
imapp/src/imsexpr_dll/imapp 측 imsexpr 구현 (DLL)
imengine/src/imsexpr/imengine 측 어댑터

Serialization

serializable.h

직렬화 인터페이스 정의. 모든 직렬화 가능 객체가 구현합니다.

interface

Protobuf 지원

고성능 바이너리 직렬화. Lua에서는 lua-protobuf로 접근.

binary

Plotters (c_plotter)

CAD 도면을 다양한 파일 포맷으로 출력하는 시스템입니다.

Plotter포맷용도
PDF Plotter.pdf인쇄용 문서
SVG Plotter.svg웹용 벡터 이미지
DXF Plotter.dxfCAD 교환 포맷
Gerber Plotter.gbrPCB 제조용 거버
PS Plotter.psPostScript 출력
HPGL Plotter.hpgl플로터 출력

Altium I/O

Altium Designer 파일을 읽어들이는 I/O 모듈. 바이너리/OLE 포맷을 파싱하여 ImEDA 내부 구조로 변환합니다.

# Altium I/O 모듈 경로 imengine/src/io/altium/ # 지원 파일: # - .SchDoc (회로도) # - .SchLib (심볼 라이브러리) # - .PcbDoc (PCB) # - .PcbLib (풋프린트 라이브러리)

파일 포맷 선택 가이드

신규 파일은 반드시 ImEDA 확장자 사용. 레거시 확장자는 읽기 전용. Snippet은 .imsnip만 (.csipet 제거 예정).