HanMark 2.7.0 — New engine, honest conversion, and institution styles
HanMark 2.7.0 moves from Kordoc 4.2.5 to Kordoc 4.15.7 and adds official-document styles, note assembly, an old–new comparison table, form filling, a Hangul document viewer, and an English interface. Everything still runs offline and uses no AI tokens. Requires Obsidian 1.8.9 or later on desktop.
What is new
- Import: nested tables, captions, and footnotes are kept; HWP 5 and HWPX give the same Markdown; PDF two-column text, tables, headings, and footnotes are restored with real page numbers. 24 Korean Adobe CMaps are built in, so KSC/UniKS PDFs keep their text. New entry points: a ribbon icon, right-click on one or many files, drag-and-drop of files and folders, and
.hml. Four presets (standard, text only, forms, exam paper or notice PDF), a page range, advanced options, a destination folder, password prompts for HWPX (kept in memory only), and one report with page-numbered warnings, note links, and retry buttons. - Hangul document viewer:
.hwpand.hwpxfiles in the vault open read-only in Obsidian, with convert, compare, form-note, and open-in-default-app buttons. - HWPX: real footnotes numbered by Hancom Office, clickable hyperlinks, and long tables that split across pages with the header row repeated. The same note produces the same bytes on every run.
- Official documents: eight types (ministry briefing added), institution styles with a live preview, cover/approval/heading/closing/notice/press blocks from note properties (Korean keys such as
공문_수신, English aliases such asgongmun-to), an insert-properties button, a notation check, and a preview. - One list of official-document forms: the Hallym University forms (Ilsong College of Liberal Arts minutes and meeting materials, AI Convergence Research Institute interim report), the eight standard types, and your own forms appear in one 양식 (Form) list. A form decides both the type and the look.
- HWPX preview toolbar: switch between quick HWPX and any form, refresh, and HWPX로 저장 (Save as HWPX) right in the preview. The toolbar button opens the preview the way it was last used.
- The same note looks right in every form: links, bold, and code no longer appear as raw Markdown in titles drawn in frames, comments are left out, and long titles no longer run out of their frames.
- Note assembly:
![[note]],![[note#heading]], and![[note#^block]]embeds are exported as content in HWPX, DOCX, HTML, PDF, and the preview. - Old–new comparison table: compare two documents in any importable format; identical blocks are aligned first, changed words are bold, and the note exports to HWPX or DOCX.
- Form filling: form notes from HWPX click-here fields, label cells, and header-row tables, or from two built-in standard draft letters; filled copies are saved as new files.
- Footnotes in HTML and Editorial PDF.
- English interface: follows Obsidian's language; can be fixed to Korean or English in settings.
- Font guide: missing fonts, preview substitutes, and where to get them; optional per-template substitutions.
- A calmer toolbar: fold it into a slim strip and unfold it with one click, keep every row on one line (groups that do not fit move into ⋯), see the current heading level and text styles, reuse the last colors, and insert tables from a grid. Reading view folds the formatting row; a minimal look uses your theme's colors.
- Previews that stay put: the HWPX preview no longer flashes or jumps while you type, has page buttons and zoom, and follows the heading you are editing. The DOCX preview keeps its place and zooms too.
- Status bar: Korean-aware character counts (with and without spaces, 200-character manuscript sheets) and the note's official-document form.
- Official-document exports named after their form, 여러 양식으로 내보내기 (Export to several forms) for comparing forms, and a remembered form per note.
- Empty tabs offer importing a document, a new note, and your recent exports.
Behavior changes
- Imported Markdown looks different in places. The new engine writes a literal dollar sign as
\$so it is not read as math, and collects footnotes as “(주: …)” at the end of their paragraph; underlined text can appear as<u>…</u>. For example가격은 $5 입니다imports as가격은 \$5 입니다. Notes you already imported are not changed; import again to get the new result. - Embedded notes are exported as their content. 2.6.1 wrote only the note name (
[임베드: 노트]). To keep that, turn off 노트 임베드를 본문으로 합치기 (English: Insert embedded notes into the document) in the export section of HanMark settings. Cycles, missing notes, and missing headings or blocks are marked in the document and reported after export. - Notes imported by 2.6.1 or earlier are never patched. Their original was read by Kordoc 4.2.5, and the new engine reads it differently, so patching would write engine differences into the original as if they were your edits. The original-format command now creates a new HWPX from the note, explains why, and leaves the original untouched.
- HWPX keeps the template's font names. 2.6.1 replaced fonts missing on the current computer while saving, so the same note produced different files on different computers. 2.7.0 always writes the template's names and shows a font guide instead. To keep a substitution, use 없는 글꼴 대체 저장 (Save substitutes for missing fonts) in the template manager; the rule is stored in the template and applied the same way on every computer.
- Official documents use the Kordoc v5 layout and no longer take the table style of the quick HWPX template; set a table style in an institution style instead. The generator removes some notation (law-number brackets, internal codes, and tool notes); the notation check lists the lines that will change, and the export report shows the generator's notes.
- Output language follows the document. A note without any Hangul now gets English callout titles and placeholders and
lang="en"in HTML. Korean notes produce the same documents as before. This can be fixed to Korean or English in settings. - Quick HWPX repeats header rows of long tables on every page.
- Official documents follow the note's headings. A note without a
#title gets itstitleproperty or file name as the title. Heading levels are made consecutive, so in draft letters, notices, and minutes##becomes 1.,###becomes 가., and####becomes 1). Before,##and###were numbered as one run. Body paragraphs in these three types now start under their heading instead of at the left edge. For example, a note with## 배경,### 현황, and a paragraph below it now gives "1. 배경", "가. 현황", and the paragraph indented under 가. - Report covers without a date show the export month ("2026. 9."); set
공문_날짜to fix a date. - Each official-document type has its own frame. Draft letters now include the head table (organization, recipient, subject) and the foot table (sender, approval line, enforcement), with empty cells where the note gives no value. Notices use 15 pt text and end with the date and sender on the right (
공고_날짜,공고_발신). Minutes use 14 pt text at 130 % line spacing. Plans get the policy cover by default; set공문_표지: falseto leave it out. - A form fixes the document type. With a Hallym University form or one of your own forms chosen, the export uses the form's type even when the note's
공문_종류says otherwise, and the export window and report say so. To use another type, choose it from the same list. - Long titles fit their frames. When a title in a frame (a ministry briefing band, box, or contents entry, a report or plan chapter band, a cover title, or the draft letter's subject) runs slightly past one line, it is condensed to 95–85 % width; when it runs further, it wraps and the frame grows. Titles drawn in frames show plain words:
### [기사 제목](https://…)appears as “기사 제목” in a band instead of the raw link. A quote's lines each become a ※ note instead of one joined line. Documents whose frames already fit are unchanged. - Imports run more gently: PDFs one at a time and other files two at a time (2.6.1 ran up to six), with a confirmation for files over 50 MB and for 25 or more files.
- Official-document files are named after their form. A note saved as a ministry briefing becomes
무제 - 업무보고.hwpx(then무제 - 업무보고 (1).hwpx) instead of무제 공문서.hwpx; a note imported from a Hangul file becomes원본_업무보고_20260930_142233.hwpx. The form's name follows the note's output language (Ministry briefingfor notes without Hangul). Quick HWPX keeps its name. - Each note remembers its official-document form. The export window, the preview, and the status bar start with the form last used for the note; other notes keep theirs. The preview now always draws the form shown in its list.
- The toolbar stays on one line and belongs to each pane. Groups that do not fit move into ⋯, every visible Markdown pane has its own toolbar (the others rest dimmed), and the formatting row folds in reading view (읽기 모드에서 서식 줄 접기, Fold the formatting row in reading view). The heading box shows the current paragraph's level instead of always resetting to body text.
- Previews follow the cursor, and HanMark adds a status bar and an empty-tab section. All are on by default and can be turned off in settings (미리보기가 편집 위치 따라가기 / Previews follow where you edit, the status bar items, and 빈 탭에 HanMark 시작 화면 보이기 / Show HanMark on empty tabs).
Settings migrate to v12 with new keys only; existing settings, templates, themes, and command IDs are unchanged.
Validation
Run npm run check: official Obsidian lint rules, the interface-language check (1,528 message keys, no untranslated interface text), 461 automated tests, TypeScript, the production build, bundle and native-module guards (4,261,151 bytes against a ceiling of 4,305,000), Community review guards, and release consistency. The browser tests are npm run test:pdf-render, npm run test:pdf-ui, npm run test:toolbar-ui, and npm run test:preview-ui (install Chromium with npx playwright install chromium, or point HANMARK_BROWSER_EXECUTABLE at an installed Chrome). On the release candidate all four passed on Windows with an installed Chrome: the renderer produced all 12 layout combinations (two-column A/B × three table widths × section breaks) with text, figures, and geometry verified; the toolbar, status bar, and empty-tab tests and the preview test (a real six-page ministry briefing) checked folding, one-line rows, redraws without blanking at the same place, zoom, following, and reduced motion. The ten official-document forms of the fourth hands-on test were regenerated through the new per-form path and are byte-identical to the files exported before; only their names changed.
Before publishing, the maintainer runs the manual end-to-end checklist on Windows with Hancom Office 2024 and on macOS: imports of every format including a password-protected HWPX and a Korean-CMap PDF, footnotes, hyperlinks, and long tables in Hancom Office, all eight official-document types, note assembly in every format, a comparison table exported back to HWPX, filled forms printed from Hancom Office, the viewer, HTML/PDF footnotes, the font guide on a second computer, the English interface, the toolbar in split panes and pop-out windows (fold, peek, keyboard, ⋯, reading view), the previews while typing (pages, zoom, following on a report with a cover and a ministry briefing with contents), character counts compared with Hancom Office, several forms at once (missing images, stopping, an imported note), remembered forms after renaming a note or folder, the empty-tab section, reduced motion and high contrast, all of the above with the network blocked, large files, an older imported note, and the Community review preflight on the release commit.
Research: R-018 (engine migration and hardening), R-019 (interface and output language), R-020 (import and viewer), R-021 (note assembly and footnotes), R-022 (official documents), R-023 (comparison and form filling), R-024 (official-document outline and Hallym University styles), R-025 (distinct official-document types), R-026 (official-document forms and the HWPX preview toolbar), R-027 (Markdown consistency across official-document forms and frame fitting), R-028 (toolbar, previews, status bar, exports, and motion).