Hacker News오픈소스 · 도구

Org 모드를 Lisp로 파싱해 HTML로 변환하기

원제 Parsing Expression Grammar vs. Regexes: Building Org Parser in Lisp, Export HTML

114 포인트댓글 17
Key Point

정규식의 한계를 벗고 PEG로 복잡한 문서 형식을 우아하게 파싱하는 아키텍처 설계와 구현 방식이 파서 개발에 관심 있는 개발자들에게 실질적 교훈을 제공한다.

핵심 요약

  • Guile Scheme의 PEG(Parsing Expression Grammar) 모듈을 이용해 Org 모드 문서를 파싱하고 HTML로 렌더링하는 OrgWebAlchemy 프로젝트를 소개한다.
  • 기존 정규식 기반 파싱의 한계를 지적하며, 중첩 리스트, 인라인 마크업, 소스 블록, 테이블 등 Org 모드의 복잡한 구조를 정확히 다루려면 PEG가 필요했다고 설명한다.
  • OrgWebAlchemy는 Org 문서를 AST로 변환한 뒤 SXML을 거쳐 HTML로 출력하는 방식으로 동작하며, 느슨한 결합으로 향후 마크다운 등 다른 형식 내보내기도 가능하다.
  • 제목, 단락, 정렬/비정렬/설명 리스트, 이탤릭·굵게·인라인 코드, 링크, 표, 코드/예제/인용 블록, HTML 내보내기 블록 등 Org의 주요 구조를 지원한다.
  • 중첩 리스트 처리는 파서가 먼저 평탄한 항목 수열을 생성한 후 들여쓰기를 중첩 구조로 변환하는 AST 처리 단계를 거친다.
  • HTML 렌더링은 SXML을 사용해 마크업 트리를 구축하며, Guile 파라미터를 통해 출력 HTML을 완전히 커스터마이징할 수 있다.
  • 프로젝트는 Emacs 없이 Org를 내보낼 수 있는 작고 확장 가능한 자유 소프트웨어 파서를 목표로 했으며, GNU LGPL v3 이상으로 라이선스된다.
  • 현재 v1.0으로 기본 안정성을 갖추고 있으며, 일부 엣지 케이스(다양한 리스트 유형 혼합 중첩)는 아직 해결 중이다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗