| name | namuwiki-syntax |
| description | 나무위키 문법(나무마크) → 옵시디언 마크다운 변환 규칙. 파서 구현 시 참조합니다. |
| triggers | ["나무위키","나무마크","변환","파서","parser"] |
나무위키 문법 변환 스킬
개요
나무위키 문법(나무마크)을 옵시디언 마크다운으로 변환하기 위한 규칙 정의입니다.
1. 텍스트 형태
| 나무마크 | 마크다운 | 비고 |
|---|
'''굵게''' | **굵게** | |
''기울임'' | *기울임* | |
__밑줄__ | <u>밑줄</u> | HTML 사용 또는 생략 |
~~취소선~~ | ~~취소선~~ | 동일 |
--취소선-- | ~~취소선~~ | |
기준^^위첨자^^ | 기준<sup>위첨자</sup> | HTML 사용 |
기준,,아래첨자,, | 기준<sub>아래첨자</sub> | HTML 사용 |
중첩 예시
나무마크: '''__굵은 밑줄__'''
마크다운: **<u>굵은 밑줄</u>**
2. 텍스트 크기
| 나무마크 | 처리 방법 |
|---|
{{{+1 텍스트}}} ~ {{{+5 텍스트}}} | 생략 또는 <span style="font-size:1.2em"> |
{{{-1 텍스트}}} ~ {{{-5 텍스트}}} | 생략 또는 <small> |
권장: 크기 문법은 제거하고 텍스트만 추출
3. 텍스트 색상
| 나무마크 | 처리 방법 |
|---|
{{{#ff0000 텍스트}}} | 생략 또는 <span style="color:#ff0000">텍스트</span> |
{{{#red 텍스트}}} | CSS 색상명도 동일 처리 |
{{{#888,#ff0 다크텍스트}}} | 첫 번째 색상만 사용 |
권장: 색상 문법은 제거하고 텍스트만 추출 (가독성 우선)
4. 하이퍼링크
내부 링크 (나무위키 문서)
| 나무마크 | 마크다운 | 비고 |
|---|
[[문서]] | [[문서]] | 옵시디언 내부 링크 |
[[문서|출력글자]] | [[문서|출력글자]] | 동일 |
[[문서#문단]] | [[문서#문단]] | 앵커 링크 |
[[#문단]] | [[#문단]] | 같은 문서 내 앵커 |
외부 링크
| 나무마크 | 마크다운 |
|---|
[[https://example.com]] | [https://example.com](https://example.com) |
[[https://example.com|텍스트]] | [텍스트](https://example.com) |
특수 링크
| 나무마크 | 처리 방법 |
|---|
[[파일:이미지.png]] | 제거 또는 원본 URL로 변환 |
[[:분류:분류명]] | 태그로 변환 #분류명 |
[[../]] | 상위 문서 링크 - 컨텍스트에 따라 처리 |
[[/하위]] | 하위 문서 링크 - 컨텍스트에 따라 처리 |
5. 문단 (제목)
| 나무마크 | 마크다운 | 비고 |
|---|
= 제목 1 = | # 제목 1 | 1단계 (거의 사용 안함) |
== 제목 2 == | ## 제목 2 | 2단계 |
=== 제목 3 === | ### 제목 3 | 3단계 |
==== 제목 4 ==== | #### 제목 4 | 4단계 |
===== 제목 5 ===== | ##### 제목 5 | 5단계 |
====== 제목 6 ====== | ###### 제목 6 | 6단계 |
접힌 문단
| 나무마크 | 처리 방법 |
|---|
==# 접힌 제목 #== | 일반 제목으로 변환 ## 접힌 제목 |
6. 리스트
기본 리스트
| 나무마크 | 마크다운 |
|---|
* 항목 | - 항목 |
* 하위항목 | - 하위항목 |
주의: 나무마크는 * 앞에 공백 필수
번호 리스트
| 나무마크 | 마크다운 |
|---|
1. 항목 | 1. 항목 |
a. 항목 | a. 항목 또는 1. 항목 |
A. 항목 | A. 항목 또는 1. 항목 |
i. 항목 | i. 항목 또는 1. 항목 |
I. 항목 | I. 항목 또는 1. 항목 |
7. 각주
| 나무마크 | 마크다운 |
|---|
텍스트[* 각주 내용] | 텍스트[^1] + 문서 하단에 [^1]: 각주 내용 |
텍스트[*A 각주 내용] | 텍스트[^A] + 문서 하단에 [^A]: 각주 내용 |
변환 로직
[* 내용] 또는 [*이름 내용] 패턴 찾기
- 본문에는
[^번호] 또는 [^이름] 삽입
- 문서 끝에 각주 목록 생성
8. 인용문
| 나무마크 | 마크다운 | 비고 |
|---|
>인용문 | > 인용문 | 동일 |
>>중첩 인용 | >> 중첩 인용 | 동일 |
9. 수평줄
10. 테이블
기본 변환
나무마크:
|| 헤더1 || 헤더2 ||
|| 셀1 || 셀2 ||
마크다운:
| 헤더1 | 헤더2 |
|-------|-------|
| 셀1 | 셀2 |
셀 속성 처리
| 나무마크 속성 | 처리 방법 |
|---|
||<-2> | 셀 병합 - 마크다운 미지원, 내용 유지 |
||<|2> | 세로 병합 - 마크다운 미지원, 내용 유지 |
<bgcolor=#fff> | 제거 |
<width=100> | 제거 |
<:> | 제거 (가운데 정렬) |
<tablewidth=100%> | 제거 |
권장: 테이블 속성은 모두 제거하고 내용만 추출
11. 접기
| 나무마크 | 마크다운 (옵시디언 콜아웃) |
|---|
{{{#!folding [제목]
내용
}}} | > [!info]- 제목
> 내용 |
변환 예시
나무마크:
{{{#!folding [ 펼치기 · 접기 ]
숨겨진 내용입니다.
}}}
마크다운:
> [!note]- 펼치기 · 접기
> 숨겨진 내용입니다.
12. 분류
| 나무마크 | 처리 방법 |
|---|
[[분류:프로그래밍]] | YAML frontmatter 태그로 변환 |
변환 예시
---
tags:
- 프로그래밍
- 나무위키
---
13. 매크로
| 나무마크 | 처리 방법 |
|---|
[include(틀:틀이름)] | 제거 또는 틀 내용 인라인 |
[br] | 줄바꿈 \n 또는 <br> |
[목차] | 제거 (옵시디언 자동 생성) |
[각주] | 제거 |
[date] | 현재 날짜로 치환 또는 제거 |
[age(YYYY-MM-DD)] | 계산된 나이로 치환 또는 제거 |
[dday(YYYY-MM-DD)] | 계산된 일수로 치환 또는 제거 |
[youtube(id)] |  또는 제거 |
[clearfix] | 제거 |
14. 리터럴 (문법 무효화)
| 나무마크 | 처리 방법 |
|---|
{{{리터럴}}} | `리터럴` (인라인 코드) |
\[[링크 아님]] | [[링크 아님]] (백슬래시 제거) |
15. 주석
| 나무마크 | 처리 방법 |
|---|
## 주석 내용 | 제거 (출력하지 않음) |
##@ 편집창 노출 | 제거 |
16. 코드 블록
| 나무마크 | 마크다운 |
|---|
{{{#!syntax javascript
코드
}}} | ```javascript
코드
``` |
{{{코드}}} | `코드` |
17. wiki 문법
| 나무마크 | 처리 방법 |
|---|
{{{#!wiki style="..."
내용
}}} | 내용만 추출, 스타일 제거 |
{{{#!html
<div>...</div>
}}} | HTML 유지 또는 제거 |
변환 우선순위
파서 구현 시 다음 순서로 처리를 권장합니다:
- 주석 제거 (
##)
- 매크로 처리 (
[매크로])
- 코드 블록/리터럴 (
{{{...}}})
- 문단 (
= 제목 =)
- 테이블 (
|| ||)
- 리스트 (
*, 1.)
- 인용문 (
>)
- 하이퍼링크 (
[[...]])
- 텍스트 서식 (
''', '', __, ~~, --)
- 각주 (
[* ])
- 분류 (
[[분류:]])
- 수평줄 (
----)
정규표현식 예시
굵은 글씨
text.replace(/'''(.+?)'''/g, '**$1**')
기울임
text.replace(/''(.+?)''/g, '*$1*')
취소선
text.replace(/--(.+?)--/g, '~~$1~~')
내부 링크
text.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g, '[[$1|$2]]')
text.replace(/\[\[([^\]|]+)\]\]/g, '[[$1]]')
외부 링크
text.replace(/\[\[(https?:\/\/[^\]|]+)\|([^\]]+)\]\]/g, '[$2]($1)')
text.replace(/\[\[(https?:\/\/[^\]]+)\]\]/g, '[$1]($1)')
문단
text.replace(/^={2}\s*(.+?)\s*={2}$/gm, '## $1')
text.replace(/^={3}\s*(.+?)\s*={3}$/gm, '### $1')
각주
const footnotes: string[] = [];
text = text.replace(/\[\*\s+([^\]]+)\]/g, (_, content) => {
footnotes.push(content);
return `[^${footnotes.length}]`;
});
footnotes.forEach((fn, i) => {
text += `\n[^${i + 1}]: ${fn}`;
});
생성될 문서 템플릿
---
source: https://namu.wiki/w/{문서명}
retrieved: {날짜}
license: CC BY-NC-SA 2.0 KR
tags:
- 나무위키
- {분류1}
- {분류2}
---
# {문서명}
> [!warning] 라이센스
> 이 문서는 [나무위키](https://namu.wiki/w/{문서명})에서 가져온 내용입니다.
> **CC BY-NC-SA 2.0 KR** 라이센스가 적용됩니다.
{변환된 본문}
---
## 각주
{각주 목록}
참고 자료