Raku의 allowed-markup — 블록에서 허용된 마크업 확인하기

Raku의 allowed-markup — 블록에서 허용된 마크업 확인하기

RakuDoc 문서를 렌더링하다 보면, 어떤 블록 안에서 특정 마크업(B, C, I 같은)이 허용되는지 알아야 할 때가 있어요. allowed-markup은 현재 블록에서 어떤 마크업 타입을 쓸 수 있는지 확인할 수 있게 해 주는 특수한 Map을 돌려주는 메서드예요.

출처: Raku 공식 문서 — routine allowed-markup

어떻게 쓰는지

my %*OK := $block.allowed-markup;
say "B markup is allowed" if %*OK<B>;

돌려받는 Map에서 키로 마크업 이름을 조회해서, 그 마크업이 이 블록에서 허용되는지 확인해요. 보통은 동적 변수에 묶어 두고, 블록 안의 모든 RakuAST::Doc::Markup 객체를 렌더링할 때 함께 접근할 수 있게 만드는 식으로 써요.

어느 Map인지가 달라져요

allowed-markup이 돌려주는 Map은 상황에 따라 세 가지 중 하나예요.

  • :allow 설정에서 온 진짜 Map
  • 모든 대문자True를 돌려주는 Map의 서브클래스
  • 항상 False 를 돌려주는 Map의 서브클래스

이 메서드는 RakuAST(RakuAST::Doc::Block) 계열의 메서드라, RakuAST 기반의 문서 처리 코드를 다룰 때 마주치게 돼요.