md2hwpx 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- md2hwpx-0.1.0/LICENSE +22 -0
- md2hwpx-0.1.0/MANIFEST.in +6 -0
- md2hwpx-0.1.0/NOTICE +7 -0
- md2hwpx-0.1.0/PKG-INFO +232 -0
- md2hwpx-0.1.0/README.md +200 -0
- md2hwpx-0.1.0/md2hwpx/MarkdownToHtml.py +386 -0
- md2hwpx-0.1.0/md2hwpx/MarkdownToHwpx.py +2785 -0
- md2hwpx-0.1.0/md2hwpx/__init__.py +36 -0
- md2hwpx-0.1.0/md2hwpx/__main__.py +6 -0
- md2hwpx-0.1.0/md2hwpx/blank.hwpx +0 -0
- md2hwpx-0.1.0/md2hwpx/cli.py +148 -0
- md2hwpx-0.1.0/md2hwpx/config.py +79 -0
- md2hwpx-0.1.0/md2hwpx/converter_api.py +54 -0
- md2hwpx-0.1.0/md2hwpx/exceptions.py +33 -0
- md2hwpx-0.1.0/md2hwpx/frontmatter_parser.py +123 -0
- md2hwpx-0.1.0/md2hwpx/marko_adapter.py +510 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/PKG-INFO +232 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/SOURCES.txt +28 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/dependency_links.txt +1 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/entry_points.txt +2 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/requires.txt +3 -0
- md2hwpx-0.1.0/md2hwpx.egg-info/top_level.txt +1 -0
- md2hwpx-0.1.0/pyproject.toml +3 -0
- md2hwpx-0.1.0/setup.cfg +4 -0
- md2hwpx-0.1.0/setup.py +52 -0
- md2hwpx-0.1.0/tests/test_adapter.py +289 -0
- md2hwpx-0.1.0/tests/test_api.py +92 -0
- md2hwpx-0.1.0/tests/test_cli.py +408 -0
- md2hwpx-0.1.0/tests/test_converter.py +417 -0
- md2hwpx-0.1.0/tests/test_security.py +268 -0
md2hwpx-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 IDA Co-operation (Jundamin)
|
|
4
|
+
Copyright (c) 2024 pypandoc-hwpx Contributors
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
md2hwpx-0.1.0/NOTICE
ADDED
md2hwpx-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: md2hwpx
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Convert Markdown to HWPX (Korean Hancom Office format)
|
|
5
|
+
Home-page: https://github.com/msjang/md2hwpx
|
|
6
|
+
Author: md2hwpx Contributors
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Source, https://github.com/msjang/md2hwpx
|
|
9
|
+
Project-URL: Tracker, https://github.com/msjang/md2hwpx/issues
|
|
10
|
+
Project-URL: Fork of, https://github.com/msjang/pypandoc-hwpx
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
License-File: NOTICE
|
|
18
|
+
Requires-Dist: marko>=2.0.0
|
|
19
|
+
Requires-Dist: python-frontmatter>=1.0.0
|
|
20
|
+
Requires-Dist: Pillow
|
|
21
|
+
Dynamic: author
|
|
22
|
+
Dynamic: classifier
|
|
23
|
+
Dynamic: description
|
|
24
|
+
Dynamic: description-content-type
|
|
25
|
+
Dynamic: home-page
|
|
26
|
+
Dynamic: license
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
Dynamic: project-url
|
|
29
|
+
Dynamic: requires-dist
|
|
30
|
+
Dynamic: requires-python
|
|
31
|
+
Dynamic: summary
|
|
32
|
+
|
|
33
|
+
# md2hwpx
|
|
34
|
+
|
|
35
|
+
**md2hwpx**는 마크다운(`.md`)을 아래아 한글 HWPX(`.hwpx`)로 변환해주는 파이썬 도구입니다. Pandoc 없이 순수 파이썬으로 동작합니다.
|
|
36
|
+
|
|
37
|
+
[pypandoc-hwpx 포크](https://github.com/msjang/pypandoc-hwpx)이며, 새로운 기능과 개선을 계속 추가하고 있습니다.
|
|
38
|
+
|
|
39
|
+
[English README](https://github.com/msjang/md2hwpx/blob/main/README.en.md)
|
|
40
|
+
|
|
41
|
+
## 주요 기능
|
|
42
|
+
|
|
43
|
+
- **Pandoc 없이 변환**: Marko 파서 + XML 생성으로 순수 파이썬 변환
|
|
44
|
+
- **CLI 및 Python API** 제공
|
|
45
|
+
- **YAML 프론트매터** 지원: 문서 `title` 메타데이터 작성
|
|
46
|
+
- **템플릿 기반 스타일**: 제목/본문/리스트/표 셀 플레이스홀더로 WYSIWYG 스타일링
|
|
47
|
+
- **표 지원**: GFM 표, 정렬 및 컬럼 비율 반영
|
|
48
|
+
- **리스트**: 중첩 목록과 시작 번호 지원
|
|
49
|
+
- **이미지 임베딩**: 로컬 이미지 삽입, 크기 보정, 경로 검증
|
|
50
|
+
- **인용문, 수평선**
|
|
51
|
+
- **각주**
|
|
52
|
+
- **확장 헤더**: 1–9 레벨
|
|
53
|
+
- **디버그 출력**: `.json` AST, `.html` 출력
|
|
54
|
+
|
|
55
|
+
## 요구 사항
|
|
56
|
+
|
|
57
|
+
- **Python 3.9+**
|
|
58
|
+
- **라이브러리**: marko, python-frontmatter, Pillow
|
|
59
|
+
|
|
60
|
+
## 설치
|
|
61
|
+
|
|
62
|
+
### PyPI 설치 (권장)
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pip install md2hwpx
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 소스 설치
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git clone https://github.com/msjang/md2hwpx.git
|
|
72
|
+
cd md2hwpx
|
|
73
|
+
pip install -e .
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 사용 방법
|
|
77
|
+
|
|
78
|
+
### CLI
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Markdown -> HWPX
|
|
82
|
+
md2hwpx input.md -o output.hwpx
|
|
83
|
+
|
|
84
|
+
# 참조 템플릿 지정
|
|
85
|
+
md2hwpx input.md --reference-doc=custom.hwpx -o output.hwpx
|
|
86
|
+
|
|
87
|
+
# 디버그: JSON AST 출력
|
|
88
|
+
md2hwpx input.md -o debug.json
|
|
89
|
+
|
|
90
|
+
# 디버그: HTML 출력
|
|
91
|
+
md2hwpx input.md -o output.html
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### CLI 옵션
|
|
95
|
+
|
|
96
|
+
| 옵션 | 설명 |
|
|
97
|
+
|------|------|
|
|
98
|
+
| `input_file` | 입력 마크다운 파일 (.md, .markdown) |
|
|
99
|
+
| `-o`, `--output` | 출력 파일 (.hwpx, .json, .html) |
|
|
100
|
+
| `-r`, `--reference-doc` | 스타일/페이지 설정용 참조 HWPX (기본: 내장 blank.hwpx) |
|
|
101
|
+
| `--verbose` | 디버그 로그 출력 |
|
|
102
|
+
| `-q`, `--quiet` | 오류 외 출력 억제 |
|
|
103
|
+
| `-v`, `--version` | 버전 출력 |
|
|
104
|
+
|
|
105
|
+
### 프론트매터 (title)
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
---
|
|
109
|
+
title: 문서 제목
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
# 제목
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`title` 값은 HWPX 문서 메타데이터에 기록됩니다.
|
|
116
|
+
|
|
117
|
+
### Python API
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from md2hwpx import MarkdownToHwpx, MarkoToPandocAdapter
|
|
121
|
+
|
|
122
|
+
adapter = MarkoToPandocAdapter()
|
|
123
|
+
ast = adapter.parse("# Hello World\n\nThis is a paragraph.")
|
|
124
|
+
|
|
125
|
+
MarkdownToHwpx.convert_to_hwpx(
|
|
126
|
+
input_path="input.md",
|
|
127
|
+
output_path="output.hwpx",
|
|
128
|
+
reference_path="blank.hwpx",
|
|
129
|
+
json_ast=ast,
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 스타일 커스터마이징 (템플릿)
|
|
134
|
+
|
|
135
|
+
한컴오피스에서 참조 HWPX 템플릿을 편집하면 출력 스타일을 손쉽게 제어할 수 있습니다.
|
|
136
|
+
|
|
137
|
+
### 방법 1: 플레이스홀더 방식 (권장)
|
|
138
|
+
|
|
139
|
+
템플릿에 플레이스홀더 텍스트를 넣고 원하는 서식을 적용합니다.
|
|
140
|
+
|
|
141
|
+
| 플레이스홀더 | 마크다운 요소 |
|
|
142
|
+
|-------------|---------------|
|
|
143
|
+
| `{{H1}}` | `# 제목 1` |
|
|
144
|
+
| `{{H2}}` | `## 제목 2` |
|
|
145
|
+
| `{{H3}}` | `### 제목 3` |
|
|
146
|
+
| `{{H4}}`–`{{H9}}` | `####`–`#########` |
|
|
147
|
+
| `{{BODY}}` | 본문 |
|
|
148
|
+
|
|
149
|
+
#### 리스트 플레이스홀더
|
|
150
|
+
|
|
151
|
+
리스트 레벨(1–7)별 스타일을 정의할 수 있습니다.
|
|
152
|
+
|
|
153
|
+
- `{{LIST_BULLET_1}}` … `{{LIST_BULLET_7}}`
|
|
154
|
+
- `{{LIST_ORDERED_1}}` … `{{LIST_ORDERED_7}}`
|
|
155
|
+
|
|
156
|
+
플레이스홀더 앞 텍스트는 접두(prefix)로 사용됩니다(예: `1. `, `가. `).
|
|
157
|
+
템플릿 단락에 번호 매기기를 지정하면 해당 번호 스타일을 유지합니다.
|
|
158
|
+
|
|
159
|
+
#### 표 셀 플레이스홀더
|
|
160
|
+
|
|
161
|
+
표 셀 스타일을 세부적으로 지정하려면 아래 12개 플레이스홀더를 사용하세요.
|
|
162
|
+
|
|
163
|
+
- `{{CELL_HEADER_LEFT}}`, `{{CELL_HEADER_CENTER}}`, `{{CELL_HEADER_RIGHT}}`
|
|
164
|
+
- `{{CELL_TOP_LEFT}}`, `{{CELL_TOP_CENTER}}`, `{{CELL_TOP_RIGHT}}`
|
|
165
|
+
- `{{CELL_MIDDLE_LEFT}}`, `{{CELL_MIDDLE_CENTER}}`, `{{CELL_MIDDLE_RIGHT}}`
|
|
166
|
+
- `{{CELL_BOTTOM_LEFT}}`, `{{CELL_BOTTOM_CENTER}}`, `{{CELL_BOTTOM_RIGHT}}`
|
|
167
|
+
|
|
168
|
+
사용 예:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
md2hwpx input.md --reference-doc=my_template.hwpx -o output.hwpx
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 방법 2: 스타일 직접 편집
|
|
175
|
+
|
|
176
|
+
1. 기본 템플릿 복사:
|
|
177
|
+
```bash
|
|
178
|
+
python -c "import md2hwpx; import shutil; shutil.copy(md2hwpx.__path__[0] + '/blank.hwpx', 'my_template.hwpx')"
|
|
179
|
+
```
|
|
180
|
+
2. 한컴오피스에서 **서식 > 스타일(F6)** 메뉴로 편집
|
|
181
|
+
3. 참조 템플릿으로 사용
|
|
182
|
+
|
|
183
|
+
## 지원하는 마크다운 요소
|
|
184
|
+
|
|
185
|
+
| 요소 | 지원 |
|
|
186
|
+
|------|------|
|
|
187
|
+
| 제목 (1–9) | 지원 |
|
|
188
|
+
| 문단 | 지원 |
|
|
189
|
+
| 굵게 / 기울임 / 취소선 | 지원 |
|
|
190
|
+
| 링크 | 지원 (HWPX 하이퍼링크) |
|
|
191
|
+
| 이미지 | 지원 (임베딩) |
|
|
192
|
+
| 표 (GFM) | 지원 (정렬 + 컬럼 비율) |
|
|
193
|
+
| 글머리/번호 목록 | 지원 (중첩) |
|
|
194
|
+
| 코드 블록 | 지원 |
|
|
195
|
+
| 인라인 코드 | 지원 |
|
|
196
|
+
| 인용문 | 지원 (중첩) |
|
|
197
|
+
| 수평선 | 지원 |
|
|
198
|
+
| 각주 | 지원 |
|
|
199
|
+
| 위첨자 / 아래첨자 | AST에 있으면 출력 지원 |
|
|
200
|
+
|
|
201
|
+
## 보안 및 제한 사항
|
|
202
|
+
|
|
203
|
+
- 입력/템플릿 파일 크기 제한 (기본 50 MB)
|
|
204
|
+
- 이미지 개수 제한 (기본 500)
|
|
205
|
+
- 이미지 경로 검증(절대 경로/상위 경로 차단)
|
|
206
|
+
|
|
207
|
+
## 개발
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# 개발 설치
|
|
211
|
+
pip install -e .
|
|
212
|
+
|
|
213
|
+
# 테스트 실행
|
|
214
|
+
python -m pytest tests/ -v
|
|
215
|
+
|
|
216
|
+
# 자세한 로그로 실행
|
|
217
|
+
md2hwpx test.md -o output.hwpx --verbose
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## 포크 이후 변경 사항
|
|
221
|
+
|
|
222
|
+
원본 포크 이후 주요 변경 사항:
|
|
223
|
+
|
|
224
|
+
- 헤더/리스트/표 셀 플레이스홀더 기반 스타일
|
|
225
|
+
- GFM 표 정렬 및 컬럼 비율 처리
|
|
226
|
+
- 프론트매터 메타데이터(title) 반영
|
|
227
|
+
- 리스트 시작 번호 및 템플릿 번호 매기기 개선
|
|
228
|
+
- 보안 제한(파일 크기, 이미지 개수, 경로 검증)
|
|
229
|
+
|
|
230
|
+
## 라이선스
|
|
231
|
+
|
|
232
|
+
MIT License. 자세한 내용은 `LICENSE`를 참고하세요.
|
md2hwpx-0.1.0/README.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# md2hwpx
|
|
2
|
+
|
|
3
|
+
**md2hwpx**는 마크다운(`.md`)을 아래아 한글 HWPX(`.hwpx`)로 변환해주는 파이썬 도구입니다. Pandoc 없이 순수 파이썬으로 동작합니다.
|
|
4
|
+
|
|
5
|
+
[pypandoc-hwpx 포크](https://github.com/msjang/pypandoc-hwpx)이며, 새로운 기능과 개선을 계속 추가하고 있습니다.
|
|
6
|
+
|
|
7
|
+
[English README](https://github.com/msjang/md2hwpx/blob/main/README.en.md)
|
|
8
|
+
|
|
9
|
+
## 주요 기능
|
|
10
|
+
|
|
11
|
+
- **Pandoc 없이 변환**: Marko 파서 + XML 생성으로 순수 파이썬 변환
|
|
12
|
+
- **CLI 및 Python API** 제공
|
|
13
|
+
- **YAML 프론트매터** 지원: 문서 `title` 메타데이터 작성
|
|
14
|
+
- **템플릿 기반 스타일**: 제목/본문/리스트/표 셀 플레이스홀더로 WYSIWYG 스타일링
|
|
15
|
+
- **표 지원**: GFM 표, 정렬 및 컬럼 비율 반영
|
|
16
|
+
- **리스트**: 중첩 목록과 시작 번호 지원
|
|
17
|
+
- **이미지 임베딩**: 로컬 이미지 삽입, 크기 보정, 경로 검증
|
|
18
|
+
- **인용문, 수평선**
|
|
19
|
+
- **각주**
|
|
20
|
+
- **확장 헤더**: 1–9 레벨
|
|
21
|
+
- **디버그 출력**: `.json` AST, `.html` 출력
|
|
22
|
+
|
|
23
|
+
## 요구 사항
|
|
24
|
+
|
|
25
|
+
- **Python 3.9+**
|
|
26
|
+
- **라이브러리**: marko, python-frontmatter, Pillow
|
|
27
|
+
|
|
28
|
+
## 설치
|
|
29
|
+
|
|
30
|
+
### PyPI 설치 (권장)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install md2hwpx
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 소스 설치
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git clone https://github.com/msjang/md2hwpx.git
|
|
40
|
+
cd md2hwpx
|
|
41
|
+
pip install -e .
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 사용 방법
|
|
45
|
+
|
|
46
|
+
### CLI
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Markdown -> HWPX
|
|
50
|
+
md2hwpx input.md -o output.hwpx
|
|
51
|
+
|
|
52
|
+
# 참조 템플릿 지정
|
|
53
|
+
md2hwpx input.md --reference-doc=custom.hwpx -o output.hwpx
|
|
54
|
+
|
|
55
|
+
# 디버그: JSON AST 출력
|
|
56
|
+
md2hwpx input.md -o debug.json
|
|
57
|
+
|
|
58
|
+
# 디버그: HTML 출력
|
|
59
|
+
md2hwpx input.md -o output.html
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### CLI 옵션
|
|
63
|
+
|
|
64
|
+
| 옵션 | 설명 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| `input_file` | 입력 마크다운 파일 (.md, .markdown) |
|
|
67
|
+
| `-o`, `--output` | 출력 파일 (.hwpx, .json, .html) |
|
|
68
|
+
| `-r`, `--reference-doc` | 스타일/페이지 설정용 참조 HWPX (기본: 내장 blank.hwpx) |
|
|
69
|
+
| `--verbose` | 디버그 로그 출력 |
|
|
70
|
+
| `-q`, `--quiet` | 오류 외 출력 억제 |
|
|
71
|
+
| `-v`, `--version` | 버전 출력 |
|
|
72
|
+
|
|
73
|
+
### 프론트매터 (title)
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
---
|
|
77
|
+
title: 문서 제목
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
# 제목
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`title` 값은 HWPX 문서 메타데이터에 기록됩니다.
|
|
84
|
+
|
|
85
|
+
### Python API
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from md2hwpx import MarkdownToHwpx, MarkoToPandocAdapter
|
|
89
|
+
|
|
90
|
+
adapter = MarkoToPandocAdapter()
|
|
91
|
+
ast = adapter.parse("# Hello World\n\nThis is a paragraph.")
|
|
92
|
+
|
|
93
|
+
MarkdownToHwpx.convert_to_hwpx(
|
|
94
|
+
input_path="input.md",
|
|
95
|
+
output_path="output.hwpx",
|
|
96
|
+
reference_path="blank.hwpx",
|
|
97
|
+
json_ast=ast,
|
|
98
|
+
)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 스타일 커스터마이징 (템플릿)
|
|
102
|
+
|
|
103
|
+
한컴오피스에서 참조 HWPX 템플릿을 편집하면 출력 스타일을 손쉽게 제어할 수 있습니다.
|
|
104
|
+
|
|
105
|
+
### 방법 1: 플레이스홀더 방식 (권장)
|
|
106
|
+
|
|
107
|
+
템플릿에 플레이스홀더 텍스트를 넣고 원하는 서식을 적용합니다.
|
|
108
|
+
|
|
109
|
+
| 플레이스홀더 | 마크다운 요소 |
|
|
110
|
+
|-------------|---------------|
|
|
111
|
+
| `{{H1}}` | `# 제목 1` |
|
|
112
|
+
| `{{H2}}` | `## 제목 2` |
|
|
113
|
+
| `{{H3}}` | `### 제목 3` |
|
|
114
|
+
| `{{H4}}`–`{{H9}}` | `####`–`#########` |
|
|
115
|
+
| `{{BODY}}` | 본문 |
|
|
116
|
+
|
|
117
|
+
#### 리스트 플레이스홀더
|
|
118
|
+
|
|
119
|
+
리스트 레벨(1–7)별 스타일을 정의할 수 있습니다.
|
|
120
|
+
|
|
121
|
+
- `{{LIST_BULLET_1}}` … `{{LIST_BULLET_7}}`
|
|
122
|
+
- `{{LIST_ORDERED_1}}` … `{{LIST_ORDERED_7}}`
|
|
123
|
+
|
|
124
|
+
플레이스홀더 앞 텍스트는 접두(prefix)로 사용됩니다(예: `1. `, `가. `).
|
|
125
|
+
템플릿 단락에 번호 매기기를 지정하면 해당 번호 스타일을 유지합니다.
|
|
126
|
+
|
|
127
|
+
#### 표 셀 플레이스홀더
|
|
128
|
+
|
|
129
|
+
표 셀 스타일을 세부적으로 지정하려면 아래 12개 플레이스홀더를 사용하세요.
|
|
130
|
+
|
|
131
|
+
- `{{CELL_HEADER_LEFT}}`, `{{CELL_HEADER_CENTER}}`, `{{CELL_HEADER_RIGHT}}`
|
|
132
|
+
- `{{CELL_TOP_LEFT}}`, `{{CELL_TOP_CENTER}}`, `{{CELL_TOP_RIGHT}}`
|
|
133
|
+
- `{{CELL_MIDDLE_LEFT}}`, `{{CELL_MIDDLE_CENTER}}`, `{{CELL_MIDDLE_RIGHT}}`
|
|
134
|
+
- `{{CELL_BOTTOM_LEFT}}`, `{{CELL_BOTTOM_CENTER}}`, `{{CELL_BOTTOM_RIGHT}}`
|
|
135
|
+
|
|
136
|
+
사용 예:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
md2hwpx input.md --reference-doc=my_template.hwpx -o output.hwpx
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 방법 2: 스타일 직접 편집
|
|
143
|
+
|
|
144
|
+
1. 기본 템플릿 복사:
|
|
145
|
+
```bash
|
|
146
|
+
python -c "import md2hwpx; import shutil; shutil.copy(md2hwpx.__path__[0] + '/blank.hwpx', 'my_template.hwpx')"
|
|
147
|
+
```
|
|
148
|
+
2. 한컴오피스에서 **서식 > 스타일(F6)** 메뉴로 편집
|
|
149
|
+
3. 참조 템플릿으로 사용
|
|
150
|
+
|
|
151
|
+
## 지원하는 마크다운 요소
|
|
152
|
+
|
|
153
|
+
| 요소 | 지원 |
|
|
154
|
+
|------|------|
|
|
155
|
+
| 제목 (1–9) | 지원 |
|
|
156
|
+
| 문단 | 지원 |
|
|
157
|
+
| 굵게 / 기울임 / 취소선 | 지원 |
|
|
158
|
+
| 링크 | 지원 (HWPX 하이퍼링크) |
|
|
159
|
+
| 이미지 | 지원 (임베딩) |
|
|
160
|
+
| 표 (GFM) | 지원 (정렬 + 컬럼 비율) |
|
|
161
|
+
| 글머리/번호 목록 | 지원 (중첩) |
|
|
162
|
+
| 코드 블록 | 지원 |
|
|
163
|
+
| 인라인 코드 | 지원 |
|
|
164
|
+
| 인용문 | 지원 (중첩) |
|
|
165
|
+
| 수평선 | 지원 |
|
|
166
|
+
| 각주 | 지원 |
|
|
167
|
+
| 위첨자 / 아래첨자 | AST에 있으면 출력 지원 |
|
|
168
|
+
|
|
169
|
+
## 보안 및 제한 사항
|
|
170
|
+
|
|
171
|
+
- 입력/템플릿 파일 크기 제한 (기본 50 MB)
|
|
172
|
+
- 이미지 개수 제한 (기본 500)
|
|
173
|
+
- 이미지 경로 검증(절대 경로/상위 경로 차단)
|
|
174
|
+
|
|
175
|
+
## 개발
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# 개발 설치
|
|
179
|
+
pip install -e .
|
|
180
|
+
|
|
181
|
+
# 테스트 실행
|
|
182
|
+
python -m pytest tests/ -v
|
|
183
|
+
|
|
184
|
+
# 자세한 로그로 실행
|
|
185
|
+
md2hwpx test.md -o output.hwpx --verbose
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 포크 이후 변경 사항
|
|
189
|
+
|
|
190
|
+
원본 포크 이후 주요 변경 사항:
|
|
191
|
+
|
|
192
|
+
- 헤더/리스트/표 셀 플레이스홀더 기반 스타일
|
|
193
|
+
- GFM 표 정렬 및 컬럼 비율 처리
|
|
194
|
+
- 프론트매터 메타데이터(title) 반영
|
|
195
|
+
- 리스트 시작 번호 및 템플릿 번호 매기기 개선
|
|
196
|
+
- 보안 제한(파일 크기, 이미지 개수, 경로 검증)
|
|
197
|
+
|
|
198
|
+
## 라이선스
|
|
199
|
+
|
|
200
|
+
MIT License. 자세한 내용은 `LICENSE`를 참고하세요.
|