From bd047261c45818d362d9abfbb79d0abea2fd67db Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Thu, 15 Oct 2026 14:36:51 +0900 Subject: [PATCH 1/2] feat(form_fit): lay glyphs out at the advances of Hancom Office 2024 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FormFit and the page estimate now follow Hancom Office 2024's layout of these glyphs: - ! is half an em in every face, rounded and scaled as any other glyph. - 함초롬돋움's spacing modifier letters, general punctuation (but the quotation marks) and currency symbols take 함초롬바탕's advances, and so do the faces that fall back on 함초롬돋움. - HY헤드라인M takes the design advances of the version Hancom Office 2024 ships; 휴먼명조 and 휴먼고딕 the advances Hancom lays them out at, in 1024 units per em. The three carry Hancom's advances for their Greek and Cyrillic letters and the glyphs they lack. - The grave accent in HY견고딕, HY울릉도M, HY견명조 and HY동녘M is 0.584 em, and HY울릉도M falls back on 함초롬바탕. The glyph-width, symbol-row and HY헤드라인M fixtures are re-saved by Hancom Office 2024, and a new one holds 함초롬돋움's punctuation and ! in three faces. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 14 +- src/hwpx/form_fit/_glyph_table.py | 591 +++++++++++++----- src/hwpx/form_fit/measure.py | 92 +-- .../formfit_dodum_punctuation_cells.hwpx | Bin 0 -> 36839 bytes .../hancom_saved/formfit_glyph_widths.hwpx | Bin 10699 -> 30473 bytes .../formfit_hy_headline_cells.hwpx | Bin 9867 -> 32326 bytes .../hancom_saved/formfit_script_symbols.hwpx | Bin 14925 -> 34346 bytes tests/test_form_fit_hancom_rules.py | 31 +- 8 files changed, 538 insertions(+), 190 deletions(-) create mode 100644 tests/fixtures/hancom_saved/formfit_dodum_punctuation_cells.hwpx diff --git a/CHANGELOG.md b/CHANGELOG.md index e92eab04..c4ea0d79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ 아래에 반사를 그린다(크기: 그림 높이의 0 초과 1 이하, 거리, 시작·끝 투명도 0~1, 흐림). 부드러운 가장자리는 자리를 차지하지 않고, 반사는 대략 크기만큼의 그림 높이와 거리만큼 아래로 자리를 차지한다. - FormFit과 쪽 수 추정이 한컴 글꼴 8종의 글자 폭을 안다: HCI Poppy·HCI Hollyhock·한양중고딕·한양신명조·한양견고딕· - 휴먼옛체(한/글이 배치하는 폭)와 HY견명조·HY동녘M(글꼴의 설계 폭, 글꼴에 없는 글자와 `` ` ``는 함초롬바탕의 폭). + 휴먼옛체(한/글이 배치하는 폭)와 HY견명조·HY동녘M(글꼴의 설계 폭, 글꼴에 없는 글자는 함초롬바탕의 폭). 전에는 한글 아닌 글자에 글자 종류의 평균 폭을 썼다. 한글 음절은 모두 한 em이다. 이 글꼴로 쓴 칸의 채우기 결과와, 줄 배치 정보가 없는 문서의 쪽 수가 달라질 수 있다. - FormFit과 쪽 수 추정이 KoPub 글꼴 12종도 글꼴의 설계 폭으로 잰다: KoPub돋움체·KoPub바탕체·KoPubWorld돋움체· @@ -77,6 +77,18 @@ - `doc.tables`를 번호로 꺼낼 수 있다: `doc.tables[0]`, `doc.tables[-1]`, `doc.tables[1:3]`(문서 순서, `doc.tables.all[...]`와 같다). 범위 밖이면 `IndexError`. +### 바꿈 + +- FormFit과 쪽 수 추정의 글자 폭을 한컴오피스 2024의 한/글에 맞췄다. 칸 채우기 결과와 줄 배치 정보가 없는 문서의 쪽 수가 + 달라질 수 있다. + - `!`는 어느 글꼴에서든 반 em이다(공백처럼, 다만 장평·자간은 다른 글자처럼 받는다). + - 함초롬돋움의 간격 수정 문자·일반 문장 부호(따옴표 빼고)·통화 기호는 함초롬바탕의 폭이다(…·※·‰·—·–·₩ 등). + 함초롬돋움으로 대신 그리는 글꼴(한컴산뜻돋움·한컴 고딕 등)의 이 글자들도 그렇다. + - HY헤드라인M은 한컴오피스 2024에 든 글꼴 판의 설계 폭을 쓴다(라틴 글자 폭이 옛 판과 다르다). + - 휴먼명조·휴먼고딕은 한/글이 배치하는 폭이다(1024 단위). HY헤드라인M과 이 둘의 그리스·키릴 문자와 글꼴에 없는 + 글자도 한/글이 배치하는 폭이다. + - HY견고딕·HY울릉도M·HY견명조·HY동녘M의 `` ` ``는 0.584 em이고, HY울릉도M에 없는 글자는 함초롬바탕의 폭이다. + ### 고침 - `.hwp`를 열 때 그림의 투명도와 반전을 한/글이 읽는 자리에서 읽는다. 한/글은 그림 레코드의 투명도를 그림 원래 크기 diff --git a/src/hwpx/form_fit/_glyph_table.py b/src/hwpx/form_fit/_glyph_table.py index 54eba8f4..e32cb37a 100644 --- a/src/hwpx/form_fit/_glyph_table.py +++ b/src/hwpx/form_fit/_glyph_table.py @@ -5,8 +5,11 @@ Halfwidth and Fullwidth Forms blocks (Hangul, Hanja and kana left out); for the symbol faces Wingdings and Symbol, the private-use code points U+F020-F0FF their glyphs are stored at. A face lacking a glyph lays it out at its fallback face's advance. The table is read from the font files, not written by hand, but for a few glyphs Hancom lays out -at an advance of its own (я in 한컴 고딕 and HY헤드라인M, for one), which they carry instead. Each text face's -ascent and descent are here too, for the line height of a paragraph that takes it from the font. +at an advance of its own (я in 한컴 고딕, for one), which they carry instead: 함초롬돋움's spacing modifier letters, +general punctuation but the quotation marks and currency symbols take 함초롬바탕's, and 휴먼명조, 휴먼고딕 and +HY헤드라인M carry the advances Hancom Office 2024 lays their glyphs out at where they differ from the font's (the +Greek and Cyrillic letters, and the glyphs they lack). Each text face's ascent and descent are here too, for the +line height of a paragraph that takes it from the font. """ from __future__ import annotations @@ -40,7 +43,7 @@ "KoPubWorld바탕체 Bold": 1000, "한컴 말랑말랑 Bold": 1000, "한컴산뜻돋움": 1000, - "휴먼고딕": 512, + "휴먼고딕": 1024, "한컴돋움": 1024, "HY울릉도M": 1024, "HY울릉도B": 1024, @@ -64,7 +67,7 @@ "새굴림": 1024, "한컴 말랑말랑 Regular": 1000, "MD개성체": 1024, - "휴먼명조": 512, + "휴먼명조": 1024, "HY헤드라인M": 1024, "Wingdings": 2048, "Symbol": 2048, @@ -102,6 +105,7 @@ "한컴 말랑말랑 Regular": "함초롬바탕", "HY견명조": "함초롬바탕", "HY동녘M": "함초롬바탕", + "HY울릉도M": "함초롬바탕", } #: Each text face's ascent and descent (OS/2 usWinAscent, usWinDescent) in its units per em: a paragraph @@ -120,7 +124,7 @@ "함초롬돋움": (1070, 230), "맑은 고딕": (2229, 495), "한컴산뜻돋움": (1000, 300), - "휴먼고딕": (440, 100), + "휴먼고딕": (880, 200), "한컴돋움": (879, 145), "HY울릉도M": (879, 145), "HY울릉도B": (879, 145), @@ -145,7 +149,7 @@ "한컴 말랑말랑 Regular": (1040, 250), "한컴 말랑말랑 Bold": (1040, 250), "MD개성체": (879, 145), - "휴먼명조": (440, 100), + "휴먼명조": (880, 200), "HY헤드라인M": (879, 145), "HY견명조": (879, 145), "HY동녘M": (879, 145), @@ -1042,70 +1046,70 @@ }, "함초롬돋움": { 0: "\u302a\u302b", - 134: "˙", - 203: "˛", - 207: "ː", - 226: "˚", - 237: "‐", + 157: "˙", + 168: "ː", 240: "´", + 257: "˛", 258: "ĺļ", + 264: "˚", 268: "ĵ", 271: "ìíîïĩīĭįı", 287: "Ι", - 288: "‚‛․‧", + 288: "‚‛", + 289: "․‧", 290: "⁚", - 291: "⁝⁞", - 297: "⁏", - 300: "\u00a0‑", - 304: "′‵", + 291: "⁏⁝⁞", + 300: "\u00a0", 309: "ſ", 317: "ÌÍÎÏĨĪĬĮİ", 320: "²³¹⁴ⁿ₁₂₃₄", 330: "ι", 333: "¡", 334: "ł", - 338: "˘", - 343: "⁅⁆", - 348: "‾", + 335: "‖′‵", 349: "ţŧ", - 359: "⁄", 361: "ľ", - 368: "‖", - 373: "¸ˇ", + 369: "‣", + 373: "¸", + 377: "˘", 378: "ªť", 382: "ŀ", 385: "º", - 398: "‒", - 408: "˝", - 419: "‗", + 386: "ˇ", + 396: "‹›", + 399: "•", 427: "ŕŗř", - 436: "⁑", - 447: "τ", - 448: "‡‹›", + 435: "˝", + 438: "‡", + 447: "τ‼", 451: "„", + 456: "⁃", 464: "¦", 466: "ýÿŷ", + 472: "⁅⁆", + 474: "″‶", 478: "\u00ad¯", 479: "źżž", + 480: "‽", 485: ( "〿。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロ" "ワン゙゚ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑→↓" "■○" ), - 486: "§", - 488: "‟″‶", + 486: "§⁎⁑", + 488: "‟", 489: "ij", - 494: "‸", 500: "ð【】〔〕〖〗〘〙〚〛", - 502: "‼", - 507: "₰", + 511: "₫", 513: "çćĉċčśŝşš", 514: "¢¨", 515: "Ĵ", - 517: "⁁", - 518: "её†", + 517: "₰", + 518: "её", 524: "δ", - 531: "¬", + 525: "‸", + 528: "‐‑", + 531: "¬⁊", 533: "ζξ", 534: "Þсэ", 535: "«", @@ -1115,82 +1119,78 @@ 540: "х", 541: "þу", 542: "μ", - 543: "¶⁋", - 544: "‥‷", - 546: "₮", - 549: "ь⁊", - 550: "‴", - 551: "⁎", + 543: "¶", + 549: "ь", 552: "ρ", - 555: "¥µε", - 556: "£‽", - 558: "⁕", + 555: "¥µε⁒", + 556: "£", + 558: "†⁕", 559: "ķĸ", 560: "а", 563: "àáâãäåāăąĝğġģ", 566: "κ", 567: "èéêëēĕėęě", - 570: "¤¿οо", + 570: "¤¿οо₤", 571: "б", 572: "Ŧгт", - 573: "ŢŤγ⁌⁍", - 576: "Ρ₤", + 573: "ŢŤγ⁗", + 576: "Ρ", + 579: "‗", 581: "ÝŶŸ", 582: "òóôõöøōŏő", 583: "ß", 584: "ĹĻĽĿŁŹŻŽ", - 586: "•", 587: "Β", - 590: "η‣", + 590: "η", 591: "υ", 592: "В", 593: "θ", - 594: "ĥħ", - 595: "ñùúûüńņňŋũūŭůűų", - 598: "к₫", + 594: "ĥħ‾", + 595: "ñùúûüńņňŋũūŭůűų₦", + 598: "к", 599: "в", 600: "φ", + 601: "₠₪", 602: "З", - 603: "⁙₡₢₵", + 603: "⁙", 604: "đ", - 606: "Р", - 607: "₴", - 608: "Ζря", + 606: "Р₲", + 608: "Ζря‴‷₵", 609: "ΕЁБЕ", - 610: "⁒", 612: "Γ", + 613: "₴", 617: "ŚŜŞŠχий", 622: "Г", - 624: "⁘", - 625: "ÈÉÊËĒĔĖĘĚ⁗", - 626: "€", - 630: "ч₣", - 631: "₳", + 624: "⁈⁘", + 625: "ÈÉÊËĒĔĖĘĚ‒", + 630: "ч", + 632: "₣", 633: "ÇĆĈĊČ", - 634: "ц", + 634: "ц⁉", + 635: "⁄", + 637: "₱", + 640: "‥", 642: "ΚЯ", 645: "ĜĞĠĢ", - 646: "ΤТ", - 647: "₪", + 646: "ΤТ⁋⁌⁍", 649: "Ь", - 650: "₲", - 654: "ÀÁÂÃÄÅĀĂĄ", + 650: "₭", + 654: "ÀÁÂÃÄÅĀĂĄ₮", 655: "н", + 656: "€", 657: "σ", 658: "С", 660: "α", 661: "ΞЭ", 662: "ď", - 663: "₭", 664: "Ķ", - 665: "лп₠", - 666: "ψ", - 672: "К―", + 665: "лп₥", + 666: "ψ⁁₡₢", + 672: "К", 676: "ÒÓÔÕÖØŌŎŐ", - 681: "⁃", 683: "ŔŖŘ", 684: "⁛", - 688: "⁈⁓", + 688: "⁓", 693: "ʼn", 694: "ĤĦ", 695: "Δм", @@ -1203,69 +1203,68 @@ 704: "ΑА", 707: "λ", 709: "ъ", - 710: "д₱", - 712: "⁉", + 710: "д", 714: "πω", 716: "ΗΝН", 719: "ИЙ", 721: "Ω", 728: "ÑŃŅŇŊ", - 734: "ПЦ₥", + 734: "ПЦ", 735: "ΛЛ", - 740: "₩", 744: "Д", 746: "Ψ", 747: "ΦФ", 750: "У", 755: "Σ", 760: "ŵ", - 764: "⁂", - 769: "⁜", - 770: "⁔", - 780: "₦", + 769: "⁜₳", + 770: "‿⁀⁔", 781: "ж", 782: "IJ", 789: "Ъ", + 794: "₩", 795: "ю", + 799: "⁐", 806: "ы", + 810: "₨", 821: "ΜМ", 825: "шщ", 847: "æ", 858: "©®", 865: "ШЩ", 874: "Ы", + 875: "―", + 878: "⁇", 897: "Ŵ", 898: "ф", + 909: "⁂", 929: "Ж", - 930: "⁇₯", - 931: "₨", 934: "Œ", - 937: "₧", - 941: "‿⁀⁐", 948: "Ю", 950: "œ", 956: "‱", + 957: "₧", 967: "Æ", 970: ( - "¼½¾\u205f℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢" - "∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞" - "≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚" - "⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖" - "⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭" - "⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡" - "┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▴" - "▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◈◉◊◌◍◎◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴" - "◵◶◷◸◹◺◻◼◽◾◿☀☁☂☃☄☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴" - "☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰" - "♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯" - "⚰⚱⚲✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽" - "✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁" - "➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾\u3000、。" - "〃〄々〆〇〒〓〜〝〞〟〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗" - "㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜" - "㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&" - "'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab" - "cdefghijklmnopqrstuvwxyz{|}~⦅⦆ᅠ¢£¬ ̄¦¥₩" + "¼½¾\u205f₯℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡" + "∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝" + "≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙" + "⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕" + "⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬" + "⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠" + "┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱" + "▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◈◉◊◌◍◎◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳" + "◴◵◶◷◸◹◺◻◼◽◾◿☀☁☂☃☄☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳" + "☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯" + "♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮" + "⚯⚰⚱⚲✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼" + "✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀" + "➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾\u3000、" + "。〃〄々〆〇〒〓〜〝〞〟〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖" + "㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛" + "㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%" + "&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a" + "bcdefghijklmnopqrstuvwxyz{|}~⦅⦆ᅠ¢£¬ ̄¦¥₩" ), 1012: "☜☞", }, @@ -1638,40 +1637,217 @@ 2134: "\uf0ab\uf0db", }, "HY헤드라인M": { + 1: "\u302a\u302b", + 228: "ι", + 256: "¦", + 276: "‚‛", + 285: "Ι", + 298: "ìíîïįĵĺļ", + 360: "ĩīĭ", + 374: "г", + 379: "„‟", + 384: "¯ÌÍÎÏĨĪĬĮİţſ", + 393: "ľ", + 406: "τ", + 426: "ŕŗř", + 448: "к", + 452: "ζ", + 457: "ε", + 459: "ξ", + 469: "Ĵт", + 470: "з", + 481: "źżž", + 496: "ť", 512: ( - "\u00a0¢£¥¦©«¬®¯µ»ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöù" - "úûüýÿ" + "«»àáâãäåāăąćĉċčśŝşšγκλνсух・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニ" + "ヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᅠ" ), - 553: "я", - 993: "✀", + 523: "э", + 532: "ç", + 534: "чь", + 538: "χ", + 544: "в", + 554: "µèéêëñòóôõöùúûüēĕėęěĝğġģĥķńņňōŏőũūŭůűų", + 555: "Гпя", + 560: "υ", + 564: "Γ", + 566: "н", + 570: "δηθοаеорё", + 572: "ий", + 583: "ρ", + 587: "бц", + 589: "β", + 590: "μ", + 592: "α", + 597: "ýÿŷК", + 598: "дл", + 619: "З", + 626: "ΖΤТ", + 632: "σ", + 633: "Σ", + 640: "ĹĻĽŚŜŞŠъ", + 651: "У", + 664: "φ", + 666: "Ξ", + 672: "БЛЬ", + 682: "ÈÉÊËÝĆĈĊČĒĔĖĘĚŔŖŘŶŸ", + 683: "ΑΒΕΚΡΥΧАВЕРХЧ", + 684: "ΔΛЁ", + 685: "ж", + 690: "Ç", + 693: "ď", + 694: "Д", + 705: "м", + 707: "π", + 725: "ÒÓÔÕÖĎĐĜĞĠĢŌŎŐ", + 730: "ψ", + 736: "ИЙПЭы", + 740: "ΗΝΠНСЯ", + 758: "Ц", + 766: "Ω", + 768: "ÀÁÂÃÄÅÑÙÚÛÜĀĂĄĤĶŃŅŇŢŤŨŪŬŮŰŲю", + 779: "Ф", + 797: "ΘΟО", + 800: "ω", + 802: "©", + 810: "ŵ", + 811: "Ъ", + 817: "Φ", + 822: "ш", + 843: "фщ", + 853: "ΜМ", + 856: "Ψ", + 907: "Ы", + 939: "Ш", + 946: "Ж", + 960: "Щ", + 981: "Ŵ", 1024: ( - "¡¤§¨ª\u00ad²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝ΑΒΓΔΕΖΗΘΙ" - "ΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωЁАБВГДЕЖЗИЙКЛМНОПРСТУ" - "ФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюё―†‡‥′″⁴ⁿ₁₂₃₄℉ℓ№℡" - "™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙⊥⌒⒜⒝⒞⒟⒠" - "⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└" - "┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▣▤▥▦" - "▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃【】〓〔〕㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔" - "㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙" - "㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#" - "$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" - "`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" + "¡¢£¤¥§¨ª¬\u00ad®²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝―‖†‡" + "‥′″‾⁴ⁿ₁₂₃₄₩€℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡" + "≤≥≪≫⊂⊃⊆⊇⊙⊥⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦ" + "ⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀" + "╁╂╃╄╅╆╇╈╉╊╋▒▣▤▥▦▧▨▩▶▷▼▽◀◁◈◉◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃々〆【】〒〓〔〕〜" + "〞〟㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿" + "㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾" + "㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH" + "IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" ), + 1035: "Ю", }, "휴먼명조": { + 1: "\u302a\u302b", + 228: "ι", + 256: "¦", + 276: "‚‛", + 284: "Ι", + 296: "⁚", + 298: "ìíîïįĵĺļ", + 360: "ĩīĭ", + 374: "г", + 380: "„‟", + 384: "¯ÌÍÎÏĨĪĬĮİţſ", + 394: "ľ", + 404: "τ", + 426: "ŕŗř", + 448: "к", + 452: "ζ", + 456: "ε", + 458: "ξ", + 470: "Ĵзт", + 482: "źżž", + 486: "‶", + 496: "ť", 512: ( - "¡¤§¨ª\u00ad²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝ΑΒΓΔΕΖΗΘΙ" - "ΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωЁАБВГДЕЖЗИЙКЛМНОПРСТУ" - "ФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё―†‡‥′″⁴ⁿ₁₂₃₄₩℉ℓ" - "№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙⊥⌒⒜⒝⒞" - "⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒" - "┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▣▤" - "▥▦▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃【】〓〔〕㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒" - "㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗" - "㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!" - ""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]" - "^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" + "¢£«»àáâãäåāăąćĉċčśŝşšγκλνсух・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテト" + "ナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᅠ" ), + 522: "э", + 532: "ç", + 534: "чь", + 538: "χ", + 544: "в", + 550: "⁖", + 554: "µèéêëñòóôõöùúûüēĕėęěĝğġģĥķńņňōŏőũūŭůűųГпя", + 560: "υ", + 564: "Γ", + 566: "н", + 570: "δηθοаеорё", + 572: "ий⁕", + 582: "ρ", + 586: "бц", + 590: "βμ", + 592: "α", + 596: "К", + 598: "ýÿŷдл", + 619: "З", + 620: "₲", + 626: "ΖΤТ", + 632: "σ", + 634: "Σ", + 640: "ĹĻĽŚŜŞŠъ", + 650: "У⁉", + 664: "φ", + 666: "Ξ", + 672: "БЛЬ", + 682: "¥ÈÉÊËÝĆĈĊČĒĔĖĘĚŔŖŘŶŸЧ", + 684: "ΑΒΔΕΚΛΡΥΧЁАВЕРХ", + 686: "ж", + 690: "Ç", + 694: "ďД", + 705: "м", + 706: "π", + 726: "ÒÓÔÕÖĎĐĜĞĠĢŌŎŐ", + 730: "ψ", + 736: "ИЙПЭы", + 740: "ΗΝΠНСЯ", + 758: "Ц", + 766: "Ω", + 768: "ÀÁÂÃÄÅÑÙÚÛÜĀĂĄĤĶŃŅŇŢŤŨŪŬŮŰŲю", + 778: "Ф", + 796: "ΘΟО", + 800: "ω", + 802: "©®", + 804: "¬", + 810: "ŵЪ", + 814: "₩", + 818: "Φ", + 822: "ш", + 830: "₨", + 842: "фщ", + 854: "ΜМ", + 856: "Ψ", + 900: "⁇", + 906: "Ы", + 938: "Ш", + 946: "Ж", + 960: "Щ", + 982: "Ŵ", + 994: ( + "₯∁∄∅∆∉∊∌∍∎∐−∓∔∕∖∗∘∙∛∜∟∡∢∣∤∦∭∯∰∱∲∳∶∷∸∹∺∻∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≓" + "≔≕≖≗≘≙≚≛≜≝≞≟≢≣≦≧≨≩≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊄⊅⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊚" + "⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗" + "⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿▢▪▫▬▭▮▯▰▱▴▵▸▹►▻▾▿◂◃◄" + "◅◉◊◌◍◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿☀☁☂☃☄☇☈☉☊" + "☋☌☍☐☑☒☓☔☕☖☗☘☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♁♃♄♅♆♇♈♉♊♋♌" + "♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♢♦♫♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓" + "⚔⚕⚖⚗⚘⚙⚚⚛⚜⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣" + "✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨" + "❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧" + "➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾〄〇〜〝〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾⦅⦆¦" + ), + 1024: ( + "¡¤§¨ª\u00ad²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝―†‡‥′″⁴ⁿ₁" + "₂₃₄℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙" + "⊥⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍" + "┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉" + "╊╋▒▣▤▥▦▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃々〆【】〒〓〔〕〞〟㈀㈁㈂㈃㈄㈅㈆㈇㈈" + "㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍" + "㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉" + "㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS" + "TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" + ), + 1034: "Ю", }, "한컴산뜻돋움": { 254: "ι", @@ -1786,19 +1962,150 @@ 970: "◉◯☐☑❍", }, "휴먼고딕": { + 1: "\u302a\u302b", + 228: "ι", + 256: "¦", + 276: "‚‛", + 284: "Ι", + 296: "․‧⁚", + 298: "ìíîïįĵĺļ⁏⁝⁞", + 344: "‖‵", + 360: "ĩīĭ", + 374: "г", + 378: "‣", + 380: "„‟", + 384: "¯ÌÍÎÏĨĪĬĮİţſ", + 394: "ľ", + 404: "τ", + 406: "‹›", + 408: "•", + 426: "ŕŗř", + 448: "к", + 452: "ζ", + 456: "ε", + 458: "ξ‼", + 466: "⁃", + 470: "Ĵзт", + 482: "źżž", + 484: "⁅⁆", + 486: "‶", + 492: "‽", + 496: ( + "ť〿。「」、ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑" + "→↓■○" + ), + 498: "⁎⁑", 512: ( - "¡¤§¨ª\u00ad²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝ΑΒΓΔΕΖΗΘΙ" - "ΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωЁАБВГДЕЖЗИЙКЛМНОПРСТУ" - "ФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё―†‡‥′″⁴ⁿ₁₂₃₄℉ℓ№" - "℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙⊥⌒⒜⒝⒞⒟" - "⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓" - "└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▣▤▥" - "▦▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃【】〓〔〕㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓" - "㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘" - "㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"" - "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^" - "_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" + "¢£«»àáâãäåāăąćĉċčśŝşšγκλνсух〖〗〘〙〚〛・ヲァィゥェォャュョッーアイウエオカキクケコサシスセ" + "ソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᅠ" + ), + 522: "э", + 524: "₫", + 530: "₰", + 532: "ç", + 534: "чь", + 538: "χ‸", + 540: "‐‑", + 544: "в⁊", + 550: "⁖", + 554: "µèéêëñòóôõöùúûüēĕėęěĝğġģĥķńņňōŏőũūŭůűųГпя", + 560: "υ", + 564: "Γ", + 566: "н", + 568: "⁒", + 570: "δηθοаеорё", + 572: "ий⁕", + 582: "ρ", + 584: "₤", + 586: "бц⁗", + 590: "βμ", + 592: "α‗", + 596: "К", + 598: "ýÿŷдл", + 608: "‾", + 610: "₦", + 616: "₠₪", + 619: "З⁙", + 620: "₲", + 622: "‴‷₵", + 626: "ΖΤТ", + 628: "₴", + 632: "σ", + 634: "Σ", + 638: "⁈⁘", + 640: "ĹĻĽŚŜŞŠŹŻŽъ‒", + 648: "₣", + 650: "У⁄⁉", + 652: "₱", + 662: "⁋⁌⁍", + 664: "φ", + 666: "Ξ₭", + 670: "₮", + 672: "БЛЬ€", + 680: "₥", + 682: "¥ÈÉÊËÝĆĈĊČĒĔĖĘĚŔŖŘŶŸЧ⁁₡₢", + 684: "ΑΒΔΕΚΛΡΥΧЁАВЕРХ", + 686: "ж", + 690: "Ç", + 694: "ďД", + 700: "⁛", + 705: "м⁓", + 706: "π", + 726: "ÒÓÔÕÖĎĐĜĞĠĢŌŎŐ", + 730: "ψ", + 736: "ИЙПЭы", + 740: "ΗΝΠНСЯ", + 758: "Ц", + 766: "Ω", + 768: "ÀÁÂÃÄÅÑÙÚÛÜĀĂĄĤĶŃŅŇŢŤŨŪŬŮŰŲю", + 778: "Ф", + 788: "‿⁀⁔⁜₳", + 796: "ΘΟО", + 800: "ω", + 802: "©®", + 804: "¬", + 810: "ŵЪ", + 814: "₩", + 818: "Φ⁐", + 822: "ш", + 830: "₨", + 842: "фщ", + 854: "ΜМ", + 856: "Ψ", + 900: "⁇", + 906: "Ы", + 930: "⁂", + 938: "Ш", + 946: "Ж", + 960: "Щ", + 978: "‱", + 980: "₧", + 982: "Ŵ", + 994: ( + "₯∁∄∅∆∉∊∌∍∎∐−∓∔∕∖∗∘∙∛∜∟∡∢∣∤∦∭∯∰∱∲∳∶∷∸∹∺∻∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≓" + "≔≕≖≗≘≙≚≛≜≝≞≟≢≣≦≧≨≩≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊄⊅⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊚" + "⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗" + "⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿▢▪▫▬▭▮▯▰▱▴▵▸▹►▻▾▿◂◃◄" + "◅◉◊◌◍◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿☀☁☂☃☄☇☈☉☊" + "☋☌☍☐☑☒☓☔☕☖☗☘☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♁♃♄♅♆♇♈♉♊♋♌" + "♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♢♦♫♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓" + "⚔⚕⚖⚗⚘⚙⚚⚛⚜⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣" + "✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨" + "❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧" + "➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾〄〇〜〝〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾⦅⦆¦" + ), + 1024: ( + "¡¤§¨ª\u00ad²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝―†‡‥′″⁴ⁿ₁" + "₂₃₄℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙" + "⊥⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍" + "┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉" + "╊╋▒▣▤▥▦▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭\u3000、。〃【】〓〔〕㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍" + "㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒" + "㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖" + "㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX" + "YZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" ), + 1034: "Ю", }, "한컴돋움": { 165: "˙", diff --git a/src/hwpx/form_fit/measure.py b/src/hwpx/form_fit/measure.py index b5e5d558..491b4b37 100644 --- a/src/hwpx/form_fit/measure.py +++ b/src/hwpx/form_fit/measure.py @@ -118,6 +118,9 @@ _GLYPH_SPACE = "\ufdd0" #: The spaces Hancom makes half an em wide (unless the font's own space is used). _HALF_EM_SPACES = frozenset(" \u00a0") +#: The glyphs Hancom lays out at half an em in every face, whatever the font's own advance (a glyph all the +#: same: rounded, \uc7a5\ud3c9 and \uc790\uac04 applied as any other is). +_HALF_EM_GLYPHS = frozenset("!") #: Closing punctuation that never starts a line; it moves down with the #: character before it. _NO_LINE_START = frozenset("!%),.:;?]}¢°’”‰′″℃〉》」』】〕…·、。") @@ -151,7 +154,8 @@ #: space, and each glyph of ``_GLYPHS`` (0: not in the face, or one Hancom lays #: out from the fallback face all the same). The faces Hancom ships in its own #: font format (HCI Poppy, HCI Hollyhock, 한양중고딕, 한양신명조, 한양견고딕, -#: 휴먼옛체) are given at the advances Hancom lays them out at. +#: 휴먼옛체) are given at the advances Hancom lays them out at. 함초롬돋움's … is +#: 함초롬바탕's (960), as Hancom lays it out. _DESIGN: dict[str, tuple[int, int, int, tuple[int, ...]]] = { "함초롬바탕": (1000, 970, 300, ( 320, 320, 610, 610, 830, 724, 320, 320, 320, 550, 550, 320, 550, 320, 550, 550, @@ -174,10 +178,10 @@ 654, 664, 633, 701, 625, 609, 645, 694, 317, 515, 664, 584, 826, 728, 676, 660, 681, 683, 617, 573, 702, 594, 897, 607, 581, 584, 338, 373, 329, 562, 532, 373, 563, 581, 513, 578, 567, 336, 563, 594, 271, 268, 559, 258, 919, 595, 582, 552, - 552, 427, 513, 349, 595, 469, 760, 483, 466, 479, 372, 342, 372, 546, 294, 702, - 451, 453, 288, 288, 500, 500, 500, 500, 500, 500, 500, 500, 690, 970, 970, 970, + 552, 427, 513, 349, 595, 469, 760, 483, 466, 479, 372, 342, 372, 546, 294, 960, + 451, 453, 288, 288, 500, 500, 500, 500, 500, 500, 500, 500, 770, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 587, 670, 782, 306, - 970, 892, 522, 348, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, + 970, 988, 875, 625, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, @@ -334,34 +338,34 @@ 0, 0, 0, 0, )), "HY헤드라인M": (1024, 1024, 341, ( - 256, 384, 853, 597, 810, 640, 213, 298, 298, 341, 597, 213, 597, 213, 384, 597, - 597, 597, 597, 597, 597, 597, 597, 597, 597, 256, 256, 469, 597, 469, 597, 853, - 597, 640, 640, 640, 469, 469, 640, 640, 256, 341, 597, 426, 810, 597, 597, 554, - 597, 597, 597, 512, 640, 640, 938, 597, 554, 469, 341, 384, 341, 554, 512, 0, - 597, 597, 597, 597, 640, 384, 597, 597, 256, 298, 554, 256, 853, 597, 640, 597, - 597, 426, 554, 384, 597, 554, 810, 512, 512, 426, 426, 298, 426, 725, 1024, 1024, + 256, 384, 853, 598, 817, 597, 213, 298, 301, 492, 601, 244, 515, 248, 393, 597, + 597, 597, 597, 597, 597, 597, 597, 597, 597, 271, 271, 596, 601, 602, 597, 873, + 597, 644, 644, 644, 518, 498, 651, 650, 297, 521, 620, 472, 825, 629, 636, 580, + 636, 610, 606, 532, 640, 640, 939, 597, 565, 497, 331, 393, 330, 555, 512, 332, + 597, 597, 593, 597, 632, 433, 606, 615, 290, 346, 555, 288, 867, 603, 640, 608, + 608, 415, 555, 428, 613, 555, 811, 512, 593, 458, 427, 299, 427, 725, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, - 1024, 1024, 0, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, )), - "휴먼명조": (512, 512, 256, ( - 104, 256, 336, 258, 384, 394, 148, 160, 160, 256, 256, 138, 256, 138, 160, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 138, 138, 256, 256, 256, 220, 398, - 338, 308, 328, 348, 320, 298, 360, 348, 132, 202, 330, 296, 400, 354, 366, 294, - 352, 334, 254, 320, 346, 340, 478, 364, 344, 306, 164, 160, 164, 186, 256, 166, - 260, 278, 248, 260, 268, 200, 264, 284, 128, 136, 268, 128, 408, 282, 262, 276, - 276, 206, 210, 174, 276, 276, 370, 250, 262, 232, 150, 104, 150, 256, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, 0, 0, 0, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, - 0, 0, 0, 0, + "휴먼명조": (1024, 1024, 512, ( + 512, 512, 672, 516, 768, 788, 296, 321, 321, 512, 512, 276, 512, 276, 321, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 276, 276, 512, 512, 512, 440, 796, + 676, 616, 656, 696, 640, 596, 720, 696, 264, 404, 660, 592, 800, 708, 732, 588, + 705, 668, 508, 640, 692, 680, 956, 728, 688, 612, 328, 321, 328, 372, 512, 332, + 520, 556, 496, 520, 536, 400, 528, 568, 256, 272, 536, 256, 816, 564, 524, 552, + 552, 412, 420, 348, 552, 552, 740, 500, 524, 464, 300, 208, 300, 512, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 896, 640, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, 994, 994, 994, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, + 994, 994, 994, 994, )), "한컴산뜻돋움": (1000, 932, 264, ( 446, 297, 583, 583, 892, 892, 297, 446, 446, 446, 583, 297, 583, 297, 446, 583, @@ -378,20 +382,20 @@ 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 0, 0, 0, 0, 0, )), - "휴먼고딕": (512, 512, 256, ( - 134, 200, 360, 296, 432, 352, 144, 160, 160, 256, 256, 148, 256, 122, 160, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 132, 126, 256, 256, 256, 264, 398, - 306, 288, 304, 294, 276, 256, 332, 296, 100, 236, 306, 252, 366, 300, 346, 274, - 346, 282, 284, 276, 296, 314, 428, 302, 296, 274, 164, 160, 164, 198, 256, 152, - 256, 262, 256, 270, 272, 146, 276, 256, 100, 124, 254, 100, 392, 256, 270, 266, - 270, 184, 238, 160, 258, 260, 348, 240, 244, 228, 150, 136, 150, 256, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 0, 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, 0, 0, 0, 0, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 0, - 0, 0, 0, 0, + "휴먼고딕": (1024, 1024, 512, ( + 512, 400, 720, 592, 864, 705, 288, 321, 321, 512, 512, 296, 512, 244, 321, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 264, 252, 512, 512, 512, 528, 796, + 612, 577, 608, 588, 552, 512, 664, 592, 200, 472, 612, 504, 732, 600, 692, 548, + 692, 564, 568, 552, 592, 628, 856, 604, 592, 548, 328, 321, 328, 396, 512, 304, + 512, 524, 512, 540, 544, 292, 552, 512, 200, 248, 508, 200, 784, 512, 540, 532, + 540, 368, 476, 321, 516, 520, 696, 480, 488, 456, 300, 272, 300, 512, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 896, 640, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, 994, 994, 994, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, + 994, 994, 994, 994, )), "한컴돋움": (1024, 1024, 341, ( 342, 425, 640, 512, 937, 726, 297, 384, 384, 597, 594, 384, 604, 384, 425, 597, @@ -412,7 +416,7 @@ 375, 371, 854, 627, 971, 830, 226, 371, 371, 596, 883, 329, 883, 329, 358, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 329, 329, 883, 883, 883, 611, 1056, 730, 591, 838, 760, 525, 500, 881, 689, 279, 502, 632, 483, 917, 746, 884, 599, - 888, 601, 529, 493, 646, 658, 939, 655, 608, 566, 371, 351, 371, 798, 511, 256, + 888, 601, 529, 493, 646, 658, 939, 655, 608, 566, 371, 351, 371, 798, 511, 598, 732, 736, 692, 735, 713, 342, 713, 650, 271, 275, 563, 271, 970, 651, 711, 731, 734, 351, 446, 347, 650, 544, 759, 518, 593, 473, 512, 542, 512, 798, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, @@ -457,7 +461,7 @@ 426, 597, 725, 640, 981, 810, 341, 469, 469, 554, 682, 384, 682, 384, 426, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 384, 384, 597, 682, 597, 725, 1024, 810, 810, 810, 810, 725, 682, 853, 810, 384, 597, 853, 682, 896, 810, 853, 725, - 853, 810, 768, 725, 810, 725, 1024, 768, 768, 725, 469, 426, 469, 554, 512, 256, + 853, 810, 768, 725, 810, 725, 1024, 768, 768, 725, 469, 426, 469, 554, 512, 598, 640, 682, 640, 682, 640, 384, 682, 682, 384, 341, 682, 384, 981, 682, 682, 682, 682, 469, 640, 426, 682, 640, 853, 640, 640, 597, 512, 384, 512, 682, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, @@ -937,7 +941,7 @@ 682, 597, 768, 768, 981, 981, 426, 469, 469, 682, 725, 384, 725, 384, 512, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 426, 426, 640, 725, 640, 682, 981, 853, 810, 810, 853, 768, 725, 853, 938, 469, 554, 938, 768, 981, 896, 896, 768, - 896, 810, 725, 896, 853, 810, 1024, 853, 810, 725, 469, 512, 469, 597, 512, 0, + 896, 810, 725, 896, 853, 810, 1024, 853, 810, 725, 469, 512, 469, 597, 512, 598, 597, 640, 597, 640, 640, 469, 640, 725, 426, 384, 725, 426, 981, 682, 640, 682, 682, 512, 554, 469, 640, 640, 896, 682, 640, 554, 426, 341, 426, 768, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, @@ -952,7 +956,7 @@ 363, 331, 823, 648, 917, 782, 191, 332, 332, 519, 846, 311, 846, 311, 356, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 311, 311, 703, 846, 703, 585, 1023, 654, 676, 686, 739, 623, 573, 705, 721, 309, 440, 688, 558, 901, 729, 732, 670, - 728, 703, 677, 532, 687, 656, 945, 654, 633, 618, 351, 356, 351, 591, 512, 0, + 728, 703, 677, 532, 687, 656, 945, 654, 633, 618, 351, 356, 351, 591, 512, 598, 614, 606, 565, 608, 611, 409, 604, 610, 282, 285, 580, 282, 911, 608, 608, 590, 590, 383, 564, 388, 601, 601, 759, 537, 537, 477, 505, 505, 505, 846, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, @@ -1340,6 +1344,8 @@ def char_advance(ch: str, font_pt: float, style: TextStyle | None = None) -> flo return _laid_out_space(height, ratio, spacing) if cls == "hangul": design, base = _hangul_units(style.hangul_face, ch), style.hangul_advance + elif ch in _HALF_EM_GLYPHS: + design, base = (1, 2), _ADVANCE_EM[cls] else: design, base = _design_units(style.glyph_face, ch), _ADVANCE_EM[cls] if design is not None: diff --git a/tests/fixtures/hancom_saved/formfit_dodum_punctuation_cells.hwpx b/tests/fixtures/hancom_saved/formfit_dodum_punctuation_cells.hwpx new file mode 100644 index 0000000000000000000000000000000000000000..5b061f038e28898b35ab5d1a134956320f0f2b44 GIT binary patch literal 36839 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 BM-u=5 literal 0 HcmV?d00001 diff --git a/tests/fixtures/hancom_saved/formfit_glyph_widths.hwpx b/tests/fixtures/hancom_saved/formfit_glyph_widths.hwpx index ba96c8e2b1728d96ae715d48515aa10b9af0d045..f58af39bfa6e1ef929990223100144cf05e975f3 100644 GIT binary patch delta 25320 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 delta 5371 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 ZP)h{{000003IGZKdjbFeIwt@C004S~D^36a diff --git a/tests/fixtures/hancom_saved/formfit_hy_headline_cells.hwpx b/tests/fixtures/hancom_saved/formfit_hy_headline_cells.hwpx index cafe1805192de8dc7f02c3810866030797253b13..43908a83bc30e357dfedd0e6785cb143e6c26b2b 100644 GIT binary patch literal 32326 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 FRz zc;pj+Ug_*CP-7t;0X4u0fWfXqfI}Ic^B*3noe0HKW9cOmY5hy8z_i`r|Fwx4+mSW@ z#(yiEB^N#-0G~=OysWAt0H3=!7#`KaaqQii6-W4wCN`(b&;7zY=c_-zs`D+}VbFK> zD@07=SGb)&NsG8adY$7fBw~bBMl?53bk%iSwWx-sInEvb7sdIl}Rh@6*#S`8hdOxM1cGGDtSfs1n z2!=+a$=wmrZR_o#hCNZYWiHSKIdCB_uZSn&J)=us0mmb|Ge2j##?8H8w6`|9fDMTS zE~#A@7c=d)wlz6*4Rk&5>y8me#XCa+V2p-z0GTUj}9&8=(j($ z*I93+J6mn{>{rWn&wpyt@K_xm*bf>lMkJxl_Wel-vPYs8Lt*kZ`1qpU@_BIMi!_+y z_{C_tM?e4fK*HeD4szVS4zI&RW|Hr4y8lxg?D*;2*A_Oy^1I$!u~MV4D^(UJ{QZt+ zdu<;CRHU2QYYrf#avM}vb_n%}AN3=a6V?bVn_uT$X#g`rNycf!Pi~&$6*b~$iw`Tc zyX%j9RCa#kGh)FG#l2ilmOFg<>MpG?ooHY54)VD8`1X&u%OB8x3wC5#N?jln@b*?_i?fOw6L62KiOrbiTzV%! zQ7vB~TLC)qq37I}auRGPSc80iOMj0-;Ied7`CGI=Rr`K@>P3rO6U^K2D9+s0M>wqw zcG=7GNsGtlY&b64jj6$!MU#ybk5sE;L$nHq{O1p+(?7;&%5`lX;F>H zlqdD2kxg+7@H2NG#t0GOS*4fxL^zD%w%6&)9DGg<4o4>!=;Uy;X~=(EXR~++1DrrY zOhGf;BOL7htX?tFAu$K0Zu!uT)%uaQ-lF3#yrYJ2!3`$x_X7IcA%cA6>m%ja5|^Ao zPVz-CK63p|4Mt4qsBM3t8M@n-J8dbh3l+;yb8;a+Zi0%nl3;>a!;A-UPvemtu2D;f zoz{(#TfdQhce7mM-f5iqq5_Bep2BNDcw1nw0U|gf^m8|j5H-7LNA>qe$NLn^<4-(J zj0rWKj03N*9r*$2t-|{Vz**7nrWSGjpaTyD02KT`beK*pe#;V;`d191c(|tw5V9(! zYpOP8wHHm0GACcUyk#X6Ha3((7EZH;{L+ zypsC-z9yZ)yqujGHLygt2&BPnk&A)gYobpn?R;55k}0+(NS zT^)i`*9~>spp3eMK-j>T5eFDi4;WFA(YHi<-^ascJCD{%pB(UK++!h35eGq<-0f^wsEtujwXQ)STz|x zCLmS8ULP{lExo3B;pXt#4MO}!4nObwxo`V5qOgtC-$B6#+;miLer3#bQfqn6w61Hh z)6VbLQYfBFP4F=%Z!a+01Dqugu&YgYx+Uz^9KDrqxcpyi!grYO;YA>-R;jDy6)LH> zw@Ti(z=S*UF3-fFi*m5QpHYkMz8cvsL&pY%kDE&VLBKlak3*`Xk{?8Y!(fNvn-AHD z{|ZU`6tDaaO4MsWy!-PDV+(n6-^jtl^zzT{sD^gQsET851Cz!DEDJnF-<#fN?9kxN zTMmT?b#j8F?{T^)>th^zoz75T@lXN2?i+r&pPq4WMhkUWP`&C|y`)@T)hY8cWDs~j zcAFkr)OG4ywTn(na+|(1<~t!^@B`Gk_x4t_{ybS(dqT6^W#(489D)5&r<`jZlo{Gx zy=h?Hg*?1*$fb{2^ei7{JLZS~x9X@)4e1%28Dg=?i;qqZny%%8fryU4$+`jwMh>Tu5j#zVztr>_y{{{D)KJ|8rfI+@JrG3B(s{DET`B#~*_t)cew*M!p`%4B35E z%w7eobYMY5v+p!vhRJ{1BfnRwMKl`60Mo_}Sf-N*2-HuASx|5W6V%iFZXk)Qq110W>kF&EU#;Lg;b3ru7T;|1B=!l4UH1w*wHSahU-W15Bk zU;<_e|Lc^HL?XA{U`cH_b3sM-{u&l~gSr$8488kH5&ik*jTd*3vy_9tWH11e@s6?H zrg=nD3#iom6)-DmPJRnau@)hj3Eo!n-v%b{tP-#?$;nPH8WR6MJp2#-9o{LzGt1lb z>Z+qc{`LPz1sDws>z#gv2|hJ_4-*K-|DO#LnCxbZSVQWzyl^R_#JWFlZG31u$_F9k zu)rbJ7K6Dp%R^%mr;CMsux*Yrs&PIaZ~N`oL(2WHJE(L=e#;kB+3;9Nf{<-HE@ zP~l~wKpblIN1Gs4SGc#Ij{T5*u{p^mni_gpy97#yJrJBdjil2Gvw;& z+Iwrr&20D}*AoXnQt{nF=w!KgwK4>Wn<8rT(4@{(DMM*x@8| zNby0hbI-nA#*g@bK0pdg^Doq48-yZZ5>V-p7E<2Y6jQI3KGi}f=&bpBCXpN@8$QS9 zG54uGc@0^(KK{|#{@wO?WC(1|Pk--wE|Rod@QM%*4TPFM$y!Vh1(5(uL4Fvlk8=_O zzU5Ri1>PRfv70qM0{eOuEKOU&MupH!=$GM#cg{!^FL4^urAcs4BljkN{2{9U5*8Tc z98>8QzHHz4D*086dEralmDau42qB|=lYWoku_vb~p--{|Ql&$WQwjY2;t)?VxS$(^ zn_H5GhL`0$Af(vbf(LLpQDk%7!BCJ0v_b!$b1l{B&h~KypF5UaNrnBxrhhLESqMY` z&iN}L^^R^kl$tb#?++;|*G>Cs{^#%lC3vRgo&qVbD+#B~|S* zQKW^UKhux?j`p`md=hTVa4CYbddtV}4}LtX?3nwNca%B1b^}N|Isp2cXY~DSlXlx| z(kHNfr^<#@@#EKAhYyK3h3(S9qrU)(^uvpV=K||(4n5y6{DldP{g5d(xB)Kl9ZW~B zQ+3TPM2wkg{szj4VX(lJBet%NIK8dqIB7umF<`LQjJ}G?9} z*&lcBAHKum|JtFr2=qbke}ib?fj^YVsr;1^^e=(@!}&YSat9mHLw_X%4Oe@{7qQc8 zJ5{A<69K5kGV41NszsN$KK=uuq%;NzZ06*^ek~QA&YRMn z@FL3BYyYJ>8>>}#D^K;4(M55SEVAI(4FWKjGCulAH5x)6i5MHS_O<4 zuW)8kw0eqIomMs6YBQ9c;oTgBSi56+8L<~u(R;V=ENmyT>d2b_CvF%3^Rrv} zO52@Gb-%L91U9$ir4=phcY!8W2wg5HF{ty{uie zxt-m!;A7pd=$~Nj5~rXM<0D|wjDZuKQsGSM5UGpAn$VoqoBJ!J=qG!?1I~Rx0HT}` zU9LeS*N-KUt8M8dyDnWRRsg-fnqt?>?4^Rf&iPOlX^?QV;`BXGAZx}rkq+xoy>|hq z^#VXhH7%SLFwQX8#oZ|gjAn8x7WP%;SOuBrI#Ks2erHpYgv0crV5_1!W&^Mm12A9q z;fB35v7|x-;Jvwsaf?IF1H133MDLXCJKZV$=6IUQ#@;!S8~O?JXvNe3BrWGbTnF1u z7R?Q8;#mCSN?ORLYteIEO&As2?)yz{b>oZiAu|OPa>qQ?+qX^ncurQbmKAmZ3p4^2 z&;>TD{sl35B|L|e()QJR+noJV8xeD+1YKCR2J*vz4#|KHc`Zd2u&^;mgahNqZJNE8 zqF+s&V^8tE*Xaf7q~6z@?~6nBC~pa{(-(U(`q^7v@r(V3!vB4N|9@aSCOIwc6UyM3 zNe9y-Hzxsh-LWJf0{0ChBmc}H()|TMb?5&Lk{16fMgW!h-Qe#@MDhQC!VQqKT)*)* znYf_R?;ifmkpHfkAEEfXp#)~YZ@S?J1W;R;gYtft{2Kyt#@W=qxkmE}H|;m`xjaYA zRp@uT{9mU;5MpO$ljhEIvL;N!=)ZoK zJ-<19!46&2Kduz$Id{h2tivv{=?>8lHTX>4YvbbW4Htloc+qL|id$AAfJ_>60Oji@ zVi}gM8dA$we3?XWS4mx?@;Ho9@oPR41J9M8mw<)ljuE+Q7VWQ+l%M!vJ|7S}_r7c5 z08Y{)`Ib%N=Z{dgTKd!uZEYft-;2c=zDM9STKCnuYvzEz*HibUa#zKvf6CNSviZk?$lbiBwri&o_CDL$CQSlBM; zgy?ma094PSFifjYxoYVb}gemqSVb+UUDz}t6fw3>wTcw zZJ^rg)i66V-P%T5JF{rrCPwK{(IuE(sdec475;1Dq>P6*8)KKhyuGJIb$M-g1AUH-9eMwX1EB?wEt zvkM6FdBX3zb*t{Jx_?lVIPbjEJv}|oJNHugBEAx!} zj#l>;A1E0hX`>;`^g#kcXAncd$^w5VKj@msHoe$WG~_Xd42>CKyKsB%(>=x2qy0n2 z(bH?;DPJ^hLw#kVeu_vL66C2H54Pvl?(hZ7 zRPesjD{bt@El$zmvz_^ukN8oqr`!q>I?ePC?E_~dLB2$Z!uvp1^|V^Lr%zgv_;<9I z!XBG5ZaEQ5S`SmVjtU>LtrHFZu*6h84s*_4ikBZhsL$M75K<;K@$g|yRIjIHkv<0Fr@EL^LXNMZJPVE$SCHwl3vp7?NAxC zOzKE%s0md!4^gRy^^8A0p^{Gt1;S=-4=eNf!sup?c^CSeXB*$FOfD;y!bBOwj5AcM z_SdRnr!}`st;-jWW6RWNXKIKDKb-vHfeTb<)<|yDvPB!z{@E(O>?_&}W{Pd*R$c}< zpj*$LrQlg{%w)E>uB49a{#>_Z2Ghh`4cO6y#sCFpVZag<2U3@e;c^sCABITyYR4cH zIU07%{>-N3D^c}dtfeI$BKRb6;|e%rN~keq^3U8_oXPSW!;op)8U>Z`5*sbxW@6%i zo4L7wpa#6A%h`fUr^-UM7CtcDr-*_!22R}KYjGj6bPdq(H)`3uf{9>5e(@dJ_9IWe zybPHmw=aUTVU3Tg2uP)hlM2U|%JV{IaIhsY5JPg;p5Xk>zV`3H^l!DtYT@%{ksYI$ zxudwTBnN4?!KYC-6@ow|dK0^xCJtlp!J-Mh<&ZLE7>4-Mu|`2TAC+#(wcSCc+JYzh z@u^d{v+1Bk!gKgj`D^L5y{&bX?+P`(Ykq^>9I!-%WPA%pf`r>m-Ve#|ueOj!PoRlk z@gS8b?B1Mm&iQEi9z--UQbW8=`Z!!tI$IYN7^aIkK%l117@T#$lxELnYA&2VUy{+_ zbD@OW)^VG%cphNKHXj*71augs(I^NKuSN+vwHMS z(7=t$Eu&8&1KkyfMbo=7w zvnz}l+5*nfW=;_3!g$}iX-9-W$D~g<$ePRVE;U}=OnUd-Zr#ap^-n)f+v^=CS)616Kw+zkr;fPmrJ;?co;Xjt zk5fOY7LXE`BZSv$O5V^k=iU~Lj7QY+t`5e;Es1Ri($6|hj%q?~xiHbr56O-tCWOnC6c~4yQPs>;t?Gz>@&Hj(0rY{({$`>~I^-9WyW+|H)D( zp}Tvv)Uo8NKoK2(k%?{9{8>4N6}+|k|B2U%{w-dMF=`jAT1Sl^M7IOZwtAX#qb!*Q zhmQYq7ad+rBFK#Ctl;<{_GmX-2NHqJ7frvqn=cBu-w&t1r`s>&9}0&uY7Ng{L%c_+ zX13wuxael&kgDY4GcXq!)2VkAfz&wq$4LVBZP>O{LWE^<|3qzZP=;*#FKP6&Zm_@4 z7fn98l`kqkXcLrBMn6|H$5$jsxn|ca*9XL~CxZL}-5R+Gy(n)#SjX6;ph9yHQ&9HoA_PVe5$|Q9YKQ~Z6`6Hr{Q9u|bCBkf2 zdkwd@5k)QJv>SHr$1Y*OIn`ltW57m^x0I7w^F99PMmd@2dYZYXFzdP`+N>zs)}*Rb zMefs^nsvrHzwC^_rN2@>-FJ!qfWp;(`3TrdwF;R{)Gq%+d#Z1~c(1@-{eK$c0l8li zf6#6=r!_kZ-&PeC21Fmp=PrD{2KG!xdF)QySqb)dQQ(g+x5VW=X*`s5EMURnTfx4S-!Gx#_jAo+WT{T)%~;>d>7O$O3w~Li7{t$2EyLm9@gDAV@;cdy*ViDL$BZi zkN%WbUnG)cW0w9M2+INR1As7KY65*oiX#E%-xA;skux6q{syh=Kx<~5h55VEeXk=@ z81vt3IO>1KINA$f_Q0| z(J96C1n~JUi|o8i37_BjD8OOUEi^a=ECmMKOwQOQw{xSbw}J7rgzImiU_AJ6SOXh> zOZ;X6nop52nY?b>k1+in2I?%l5;uB-FeQfQsVXRmQbPY+X8Ij$bOzJ^3{3yF7B=rs zi8=JlJ!th&q00Lh(}W*OLKP|UbMZXTJp;&^qjZW_Pdd4Hx_d3?gO3k`L#50YQ z+)UZKXp0i)v=QiZJicrL*{?n4A=A!2-Kf^Fi|Tfqb4vWTT(fQ^1nPxxS7&~YtF9gg z=hb=5P;z^B_`NAfP!*s=A*OhY+AfP(2zg`Kl3L_zA^47B{*dey-$dKtTP_X!=5d!# z<@&yG)oa?Vq|UzZ}gSdChTTKCeYZ@Qq}2| zHOzEn(~H|}OTCLwe|(8_M%XFqO~dIXiQINjaEe`MKjp5)9{tp&PViHl`L%^uMw**IBJW4fv8|k=U5NJ zp?3?^&yEyzG*KEPLTpU_}SYmJ%)kaZF;D+!3)AIm>S*tWdPjKgV4=PhBSBD~J zALziuzgo{^W9h&Zej7KdCmufYo!MLf@N7jqtUup#<$MA6C?(zo|8FAltXUP4_rgCr zsZ=LB5d@4@P_s0SeRy6+@Dw$i(4?){XR#d7L&weIU~H@xi>+)@<6eo*ltFIh4z2^bL^^lDd%W@sAQJsg<&T~c!Nd=`p6ao~LwFz1VD6$})aBf?Lbz5C zANQZ;b1Rc@=cF(r3nD)r>oPX>7Mrb?O=PRR`nI3|Tg@X{bx^dSW5rhN5d_h}pM>Pm zl(9wPuN@}2 z6<(gKdZ}eb0_j~yrLw8W4V62_Ic_6>tzjUEk%B&JK#%*;m9>HRx#qgIV}UX`t1}+! zX-l@&M|xcXHgw8q57~d#;&5WlA1%MD=D3Q%!*Cui zpd7D0q zH1awzdy~7BU3TXTGAFC7Id2dl9t0x7x-ZH@<<1{M4W1Ned?p8|qv>i`u_SZR6cg3+ zQ0mRJ?3c@|C_kZjT9U9J(=jdA%!gbiD7XvlxcDJUW845Rw=uP2)p~KOevfpHs${Lx zSJFa-xmX5mHP-IZ;+U+Cds@Gyg5JFrzEBux8QkICifbwfgp0-rht5U^wLMf^=}{7? zTeKm;s&eWT{8OJkVVmcdh_M?b0M zU|FgSTr8zEc-+c3d0`|FEf7?`VTZwym=~qEW3B4F!-M+Zc;QJ{1^9gPLSj#OI7QcR z31&{r)T$Rym3v>NS}AKz$hAGaRX#R4cBnnmgd#+-I5!Q>y<~GS$CaFjh`XPd2D548 zZ*?N;Z`~5^2RaBMUcYTdys#OC+lY~fy`2=J5=vE1w%2?8>_t2%w`il0Z|^{;ap7gV zcfru}xY`?y&uV|z#1*6Wz9|t+VV6=;SSfo?OdnS}19;~oYZ?onlNrEI&fUh;QO+3B*pvSUz#!}jS}_ne(h+-o3; zYhAYv+oRN0bc=8{;*A9oy}w1ROEuE=+m}{A3~o83o!l>(aRLpno|N3fHC;Oy3{1ZZNLB}&7Mh?AI1Dr3F!X`P z!gvfZ9xMg$u`@winB=~^FKn+%1?Oa`&cv1V@@;Z|B4)oocJl(kRKyl%+{KWVFyv?+Pk- zCEFqP>U(%VooAA++j-I9b`V)s;hp}kIj3?&yPQ*wYYWIo@pzY-=h(RNg|Vn55bplS zLi6K|(S=z&^wJItMjl$5&dgq1D_HJ~h5vOn8nFhI7;$M!MHMPRl*69D_%IHEVxcgs z^q-)x(>uF4NB*wWbr*T~87HNt3o%q~WdKMEk{&}TQmrSmj6aJy31!zH@Hp6{(>iVu zQ8vmFlLuR5;ShuL;c8V>_@NS`YyLnEmd=cSJ4xxZT01J`>0fDxhXdsQfrIn0d>pvcEsDc=C8f|KKC?I)8{5M#*?G>EA?SbWiejW-a$qjNyoNmEk z*WO_}r;@sOt$oZ?4~q5NhwZfDNozV z$x097w;ntt1?tXbgIn~6--$fh*RV$RapO-+B2iG&&wV~|bj=c7`^@+?jQ9NwD z3|xIXBYX0dmA$EJ|C7oU|6Kd-*E9RSs*v~pTm4P>!2h?Dvq5eRA>_>R+vErJYVqWy zRix4`-|_ghIxt6AWiK(P3=9X=kEuW_W$Eh@=j2snc;MjrQ9WaGaPg?MzCmtCgSjW~ zQE9{n>#q)O3O6L&xdPO}Z$KdZQD>gJJrYauDoa0>C4c;eLNxb!gbgx%=!ZeO{UqtR zTp2?#N+!eCp>J;9He6dzC1Vs};keHxn!q2pW}C; z*!g;i;U<2;tnR!%B1hI9xfx6iaX04-kUqb3HIE^t$zU~ijW?m80QTj0(xaD##=U%% zGci(vttN|?X)|-1l_bAO(90|}Cxq~tPMm<9Iu}fvIyZup5&iu5xrEk>6O0W^x>b?2 zNP}>i2DfNJG13y5#qn~^?jz}TE2DWtU!Z(z+PWN1qXid>jv}->50jB3RQCbOx)?n| zZsYK;$`hNKR}lpTgTEZwDm47_Vj`^az}>CfMwSM#p_%60yhnX>rTfjVkOZ(EH8qsG zqF?uwjG<|$?k-mlm%Q|>jqO;gsf*tcmxP>|=8zNeK2u*WQxh|nZI%rN$$qqWmdyX) z@@QxaX;?LJpc*Mls18p@RSkKz3Dq**&CAAu+#OWnf#zX0@cBlMj&eGdtY#?Zor-{? zrqzyZf>!wY*FIFfKUou4tPkl|B3JYj&!d|3_rS;1q**8<_;bTXq%Lydk}cwRzyxJ3zRD{GgtiuL-dek zdk5iwh5yXC=C8?!qzR|1G_joDA9sy6x@kb$)Lt}sJZDP?llg4Mm*sM?`~KHvL#}vR zSi8uzV7X9E+o|Wl3zH9$EAc1~*y>7nQ-<5exgyp#R))JL8k%%@VABZ;bKiS^#30Kb zpOZ*8=^7cXwza7$zeAr(%oAZrWcyT8>cXLVc*OxIVKwrSZaU)|wojgvrIz(}A8n3s zkIOx9sQj`h=G2`OFefhlscOmA<%&Eg}audY7?x*USIR&o#?u z2`#pii?!;eb?iG_V|z>U`itwlq}qy1<4IhhZg~+Uu|tG*7Wvn$^*dD8koSme=U4l( zHlGc>M}|+Qwu)4rQYFc@nKrpX*(_|fs*B>Nvx+3-`W9Hev?1F7`_F?e4@6|KZEJEs> z5dwi<&N%SheZ&1h{nHmEl83_gxfyRR=XMM7T)obpDFBr=9i~k_o;=LlS(_iB9Uyyi^YU6{i+eMuKiT`eDJ&JL3o+(r}`Hc2mRM#R_+XHu9R zldnImA}~gdxT#JmR&IXo_DHBA&b!xx@;@Fs_AIi1w9}?uRuE!Qe1CqU(7jvc`Z%M* zP?N49+K|}NK4kd(uWGa4?7w9N9GegL!CoHr)4`ePnHwA2v$4h2K^J-y=&c5j~E-@*PX*>*b!1{byc>|pN&ZTq{}Uw41E3pD*NHQRTp@bB+n ze_{LG4w@N$Epxy7B(}|e7Kq<{vXb$aSN|**zuUu>0{3s5yFEjm%q^s`ai`ZUb) zC{1?T_yKCS!la)LqU2(?{rvRse_hpXpW!&pZ#Hw6?f{^dGc9PF2|E3Doos+N_ccReh%sPAbnXxIG&t+YjyK7 zWj{^MBN!NyEZIqeJj!>He_#~mJ4GLw943RbKQY4CSxmiS1{DmL@y@sv4R+fw!i;i0 z%^vSR3(svhFRtQn9yC4mFbjiEY^a~clTk7ckHYLCwB^`Bvq{o2jbA9w#)Be1&Fll) zts?xa*pD)&+Pm#Xy=RYq-a9_+9>Jr>K|kEHj{qISm@-HnoShUYe~eIt5Sj%)4C383 zTZ}PsgwkF-eSZA-wB1T4MI0sJ$uJm~jlrh6qjWI}x$1lvW<}Hw;uq1N7(Rlr;M!(Y z^(nM}FDYhCxyYhH%M|@VHWi?0@GNkdCKng!$I)S$jRKpi<0MdknjB9?R-Pv&koTbV z4|}JNoQ$2YqrR)ue_3ol!(UDUC#JHTPoq3Ki{hxbY7L`7co=1QVQL&^Hp49LFinfq zxF@p)+4!?Gv)N7_^L^NFY56d{GyzC<<{s=S z9M9sc;9FT}MR9sH4yPJ5Ns5P8_WK|**1bP1a4NB-(u|})f0JUE1M+@gig@vO|KR8& z5WMNT-8R>pz$`Hgql+PkUoosiyLB-spylqFM+b+eFMG$3$Cfw>vWqBb4W}|>gcA_N zRC+Gta@$J9;khZ5Bhbuj`Uo4aD$0dWMy^GXj;5KR+MQXw?E_8O$58w<7)**3TIuwq zRoE)-KmNezfAAy^vps7{Kr^!NJo>B*<&*PS=p7Rr=lv`iFX&qWPcYp9HBK&!VBQ7w zccq{7jvnvN1cn}9(i)BI&`zPaA0Yd0p_mgGl`sRh&cfm{3=>m#7@b5>XlfX{UN>!* z?N)G>ej2(kh@~vU_Ms`kJ%0~I`{U#1z2_(GRuW!Xf4#zG|HfbejMZw{Z@cY-?%t!9 zd%dIQPmaywk}xQSr!ZuvE$v(vC|JG?h!-=V31w`(LPnK{_;~+i@9^b*Z}0h&gX7cN z#Jnt5J1tlPatKCa`dDYp&Sueb!)vVU!>PS_+I@QPtUVoZkCPniiEXJHbc+#CL>H!- zGK+n1e|mnNhsAUtVus~xAi97Zi0*4S5N&8-AkOQ3ds7ZRJUITIG^Mw{U$d5UN@TEw z_lwN64hGMhB5c!+4_=&1YaRzzFy}k-ZpYc4nOJN)bHJjLSF^7l1mgv@cBOY5ynHLf z6rJUCW@gL7iy+H_tHlT_*Kz8GFTBkxeb1v;e^77i$OY1s6P1fO3-U0Yjcvr+CB49YmL%A08bz5xvOFa5(Kfec6S104(@v?}_`%Axu2ZroTJ^$bzXPPW!G-gDf2be%W@w zD1?{srB>`67<$aYF-#*1aGIr;d($Cl#%K98jN_BCE6@#=3OFN4yMvD>`JBS@SLM`- zr8LlGL(jtaG~I1?AHwYW{PbXsfs`mxe}=9l8fReQ`U{ggs6nfMmK5FGF#yyuI6sFp zM~f9b2l>2+%6ZbHi6N#3dKfzk19}t>x=A0@shbQ=dNZw^R^e&)S=TAsG@|4jlcpO- z7m4i{mt-1t=FKGNS(`i4*Ll!20*v7khqlftqnSxYQ+tf&#<Q zWX7j?3ump1e#^Xu8XG-acrOWZSF%(1xx`!HAc8lzIGnx!WW|-0o5NB`Zr&L!F~OwU%kDhT{5%unwh05 zW|r_JJB!urhSp96|Bs>V%$32x0hp2QV2~Mcna|SVl;1nER4|4UlgfNrU4vBR_k~oe z7N%^ZF(vb4-*LRyp6E|Mv+3tqyavvoWO*`lrf;d2Y|KJ0Nqz6LA=R2|e*$yUCQ(DY z{Q!{2$j&#^z#0*OHLgm!Q`Eo&GpVWMa*J3)yoogwYFMLTjg7Jfl@g|6Mn!`fx1a{Q z!O-4RBfd~0rcm{j@`QgxZTLrt<`+`*CMH4 z{t=K;m@}dzshEHi6+pIFe{T%|DXK~1ZD|O|a{|KfPNWIaL{^4CKdKV~naRLY+He-8 zCbWT#uiZa)3&w;hQ@2%TW2Lx(-hK!WqL}awH#nD^GeIg|+96yrp@hI&1RJPvw=}Tf zIc!j_G$FKMjoVm5+_bW@S$E4VmGT6DP;CH+Ft$8F`{8dc=+f3?B&CMDOf-b5)j z+gUy1A1ny;J4bxg;@!8q1xZARrP}QPAPETHcv~6(@*IG$l7t|F`RY!>`y-$q2cz*% z>O?_iKJXMcoRz5wa8M?fXGA|dE{YQ(95*PVf0}VEP(vHvLK`=&?`+oRa!aK=K_FHe1Y&^N$U~ot)QV}zS9hIN z2SHq|V~Yz@O8d9TS8M1~Ohwf@TnNQPGpW$FK#)+)4wnXkyoVqrxfDoNx90Rto%o0Q ziyF?p)C4s+V#{-(AKn%$C6$`kvNy*XYuMky8I}HRrzMCXf2}Z=RUas#m@+05CR+p> zsPVWou;DpuU`#m0g5c^Fcxr|l9&T~DrBa?S5ULLYalJf8`{8b3LNH0MIYFxRLik}0C4#MPar{^pB6*NK13 zRNyIUI1^J7f7C!8x?0TbB1}tF)nS(#j}oonmN=@syt)M%Cqcfn;-f?eY05d?s`ce>dee2;@5g5yT0Vn&H*c6!(ch zf2k7!3GMC5jXo7&&2 z#X9b`&&5INFd3pUv&~(V7WC1s)aV|;*H0pK_IUY2opj%n5t{P1b2T3^ou$H zkUMMcC2KefQxn#pnEQBl3-rB4@E>pPwp_0HI<~lQ=HvA(k}-`qVwGRcuOth*f0gosfnIUdz5o3!sx-F$ z`tAMl&l;_)nFsvj3};Hf**`kF*i#^F~9yB8P$=`TFwx05P^StdO@ow0}3Hk zyI3%noH2V*%yy8^9nKInE|!LTHcUPOf1BTB*Vitvyg&5$=F89P!#>`g9};ysJ_J;> zG8KB^V`=^?(B!$Vw3>fhE`kSkUSp{jrRP;-WaQfgaH4~aV*9%?)+4QFh6 zDMt|mT6k^eV8aJ0`Kwy`xF_!l zM?U@z0O49o$t!bR&GxSl${DE7_UznkoGT6Zcn>}p-eM(@O5FPq=^6R_^VjtupT@be z7UzmkJ{}R`p!`TvwXwV3*5h4K+{3%}DfB2vmR0@3&Y)_FXh4mv!HmYgCemPr|Cm9| zs;*#i)sx*|M&n@l9y?gj%J1N8)Wgyl<~w=VfB%1z@Eq<1m09&=#gpS5C4UEzu-PIO z(OdBY&qH=9!J+i<3yJiQ>V4ddM+;u07_HZJ9X$5VG`Kt*tM+S2 zQD1MyQDZ6amvEU6p>Liln>dUuG{cyv8F3~T;w8INA{KM`ZO**EEcaMR_PK>Kii)Ah z)9#rL7P?QtiWgUI-SY$B67nX$xMnY>1R_ugHc+u9Mpts)_kG>~$>?0z{OEbpJKgf9V!h_z9Ge&}iQ&M*!GmiS z-nvL&e!9a9NfrZ&Nb#6iB8ere$C=V3Q5pofP|}=hREXA}W|~f7X$TSh%2B?SFxLO3 z2GO8~cZ;r`IC2Sv>wKGAf8bJZY*C|siGi>4HJ`BdN?%D=p9xPz@tM=^g0%D%4fvRp z)&)KvrFWfCaac=I_};r0!tV$_NucZYAG#YRq_Cz|)E%8SrG=nEX+UErqo5i+ucV!5lhDa{011h{Vyu{$3Tfec;&|Ccm!^#q33bF%Z@s(&1Gd;laYKTDwSFFWyJsh02cuO01N;C000000000W0Dyt79RL7xWps3D zZfA2Ycx`NxBYi3Yo*t7=eJLA@>cA2L006ZH000yK0000000000AOL`Y+aHsYeLw;q iB9l*j6_e_HEdo{}lNo*=4hjGY0DA%e0Qw^U0000y)~g=? diff --git a/tests/fixtures/hancom_saved/formfit_script_symbols.hwpx b/tests/fixtures/hancom_saved/formfit_script_symbols.hwpx index 17d63764a9b717abf45a8f79e412dc6b0a57fa18..452a15e5bd7120c4c12f36a3b6400156d2524d33 100644 GIT binary patch literal 34346 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 delta 9390 zcmZ8{2{e@L`#+k}qzH*hmTXChRJJKvWJE;0*&6$jeI2_VWXn2C_N`F8WM^z+c_kz- z5@u}K_pxN($NzrR_j|s-f1QrgnQN}+damobKg)e&htah<;}j7$scD;0%2Tx0iX~|2 zm<}spzb3xL%bdIbDM#uyy9e$c>(Dke#QwbMXKMU_J(5QItX4FAvza{M;*BxeqI*TT zQJRdyh&zIzJi&&11>u*I|3MbTBaS)_jeq1PqPLi`?zxm{O_k(4N!v`l^hregcIdpI zHfpcC#VKnArN2MP-lUkZsCK$##>>SxQs3A!qj}DN>MY~=5;9&~%8=D}^30g9M0v{G zPHY#HT-Q^L^~|t)IYtR;p|mvDT|{}7R=t#}DReE@NqIgr1TBp=5b7P=0>-T9SFDC~ z=eTR6q;L1Jhpp@_H8&4#NvL|<8Z)Wlkkb!SV;n+77IU>0=>$A-Sju^& z*De!(Rghgx8k$>sQ{TKflk{=*+`x!)MdDRGJ=AyHJxq+TCnuo*A9)^IG!SpQ)pczi>n)3Xtnw!SM zQM@w(d9Ng`{2HPU8f(ZVr>(W->wCRn7y4K{lf9*#4{2_WH#Cp^+L5eZOsoAeKEB$V ze|}+kSCVP6*t}CrT$R0;va;k@S#|pyw^}S&lYWFx%}i~I{$p!ndCguwIZ264@ZaV& ze8=icc(qu4;^eNg!v@J!u$>ec_bE;hFUgct+tn1>yy;0%q+iMC9P3SLYQi_HG;d=` zS1YAbpzuVd+BFYKTF?WkbK%SS>JH20hFOwxp~d_;&otC#+s`3y`~42ZjnBGiVN8OO zWIJXLoKx24{Kz!a^Va&~*s#LTprP~JKYO0^%UP5fyAj%NdwcCKWK?(TI%BV=JmTVt zP-~MrZWri@8lp1yAD<%P8!SDI)_EOt!wfd=AXK}`{o34`gU&`40*c+ZZ++M1+YS|il zEXDa$&7oNOu}Oj3L{G|k^$_x0%~t=<9;j0<^w$*!sf62d$CHMH7yccb-kQ1OwcP4C zNc5iSm||K8n#$2%a;tK?of6L2Uiywj$Nz*w>DtZ6o9%i`voDr&-2ZC5YcAS0XtZbW zGrf<4Y)$UAeCf45E;hFp>X1KF;6A@IGSLpEpt0PHvDJWuYvQ>o!L9v?N4U zXOS@$cfYwey4$h5+S`yZWXqL$ndx*VKKEr(fa?n?r{S04sn)WcgH_tYhT(fHAGW%$M&8w@qV={lx%Y`U; zRxSa8irhJGwrpAD><6}rSP$--#m_^oi(q`4BZDt)x)&~pyrgd2I)?n7NqVuDf6lW^ zu5zn+N|JlPb9a8HwZBzxta~Iw%(VUX%uCl-f#WR&?iJVc(C=M{QN27#o7CKP?t!gc z(yOG%TJIfdMw!i|8!@l;G>O(x$iK0--}c8`b3^11!VX`=oi@?>k=xs2M;7ulmsnV^ zKC^7HrzDBD-Ju^5xP46j#*~_N?b2><@q`KXCUeE;y3qw&t{kD!$+Rg}hrJh87i!LI z^vivlUmUF2_w{;1UuL@(=pDVcf(cv;<<2>sq{c4To>U#YrbvW#ii6DgXX7g)celV?$Ooy|MVIu?C}E#~pgg zyvMa6l_C4Y`^JW2<7azMt%N7v&)86s2}|)?-sQ z_e1eoTk5VCKBr}E`q^T!@0JH2TWR=vd&3=>7TqMRIgfMwp*FkSO#75HE8!1Skg+ne zWU1W-A+o>kY;`wDXD_jok=9;GSN|ptrSw5&*f+Tgd95Veai@C5EXA6$hSu@Bt$Mns zE%%gN&5Wx3@iK}XmkOk>{3v0!Eoql8L`cs37<*J)L{`(>hK@yZnEHJ0)!Dh)v!?Vr zB?EOe7Vp{L%(T~w+E953leI+!Z>qdhZcWx2eUr|5zH^F*!&3Fbi$aZc7Sm#p}3Y1I|G z4c_n7jNO$v;!Q7!s1LPGxeC*AnQq%6fx6-LTk+e^x5I< z#a8<6J}&`&jAFT$igyGxU@CEGy{|^ce^6sO1L8sK9 zD-JEpqTEj+tD&Y6Grie1GKAT7Rrtm@SsR#ZF*3M%dpmNn);IS7nnS~is@vn}50!;w zwGY;A+;tc1@2t(+C0>A=S07tqe-%x?-+JZd7MzyPpoMwx+6ONEeNxcA)KEpf1}O&8 z%&gkqm1HUX5FiVB*Djarw&2v$-BETttGz2OQQBO~bCRq8qUH>`ndXk|OqyNzrVaIo zy6iI(Tz3pT72}w)nv@{9cel)+l`U@Iu?<6P!m{Q4>@M!N=Axn_w$9IudVCJn8QMAS zf?2&{JiFA;9yZx1(~+=;tp=e)I24(O2d-$P_eVtJzr)o|88$XYfbql$^#rDHJ}mmeDPo-%Na7_ zBD317sXrWgD+WK#I@XG4xHyrxyGeau%?0W)x**PNT{(hy*<&jn+Rj<;HmvnsT6g6B zOLGSkRTQf0ZCJMLl#33cYSh`TsewstpXp zyOgMdB=v9l{;2EJKSvF|< zOzWoCcRbDoN1U>_Q8v)h*1@P!TzP(}EoY^s*x0WsPS&%Y ztm7CD4ddvAuf@-c)&0y(9rx>HWF45FHDNo>9w?0r7TA?h{(lLbFj;!{T`hcUv7}eQzzbAj|3jTiE;rQdid5IU*>|HyBDlF4cbw5?r zT)N%bbC_!9gPwMq*lp>AMzC^@@+x?)nUe6j*^a=t=KtJBIopZ6|E78h3|tM@6^>w2ca{}D8IMcn z>uY1>7x$gz`_U&de}BWo8gok5Do=`51I2<+R8JoEK`I4iTvWCHf+!mO>L{E%nte|? zzs1O^l}$)0L@`7{xH1XipjSah3)(axaq;qTg4$CFg*76NvP6unTHgrChbe~m3tymx z6R`;1J}&MnYN%m2^u=RQ#$0XoTaS*@1d?$q>H;=o8KDT$$k z2tCev@_TD&jZhl=>de{)VfPgr{O$?j1k?>{8zIk(D$XvJnBQ+_fX}RTxKw%Ph--?J zf)wGrfRqVcuO!?0i}>rGUE^1<>ejgleu$tY^pYllHl$balsPgYUcOZGhO3TygABvm zyY=ip`>ZG36oFnsLxom^NT+3{ ztQa9F1G=Ai0u_#=-h~Av%t_EmRGm6X!x^KV3OArKZ~6=TG!hmmNN@=YUEhNY^vOeA z+wVx{2h@&#aa)ZuzCoOOb&{3E3*)G(6ntOsu{UPKJ<;a7^1bcKkQci;4B@OijTyC^ zA`z@S;=FZawk9M5`n7=-uMfA!l=7`xTQjHVTP3*rjl_3{K$`#~)3U16Ne3z;-M6rx(IV2AUBZX`7q*U#{B8u{rITqiH))c$?-8!Rt ze~hg2B6(Ph3+b2xHtQe%Q~H{xgyfArdrA=zOo}Kd8oP`L6}p(dVs%AA&4(irq3|qO zNXqDL2tlNcmGhc!&b*~{`UTDf=LnYqH@^#KYe{#<;0fSN8XWvUb#BCTDcTFHUq?ml zRNUBkWs00Gr@V!W`&SAKorPapJ(42Lj;f%STofGW z_yuv*m}JlSr0^RB<)4DvKs!)yJ1%Rhr;c;0CJRUz(f#awU;cEY07r;){^v*Dg~S@t zwG6oUlO_#Qh7OvqS>HgIB?rcZ3*x;!6PX3EH)`enF8mZ+3aS^Qbwq9V7p9AWmjeS` zN=4!ldJCi(EcOBLDTj)82G3;uPa;AhQjrhVcpF zyfLu>n3j_dQZiC1c}htt4s@Ar{N;tvs8k&-D_HV_9WuehN!<0w>&w(C$o&*t16q2$ z?hcBjOUof~*bOOMnzv~NlKR?Gek4jd({=Ew6(=2g2ehjJ)0i0eX0+ddZrx?i6Uybb{7IWa6THOZLB#!o$S$+$ zSz3*nL)%uzrC?YKNdny6vepN;n!6^?3 z;%qP@p7Jtn-cttj$^bu>tgc*FwLckoN*CaZ6sRj#B!rby9PG+6>CC*W-}z^qnIx12 zoTJa^2~*;W0P?DtdM-5qF=FnR z%>F7~!3?=$ICQN(pzhp71^0>aTm@iAN5?wdC(0h-RzCg{^@k?^R=WGtWyB5XY|PG> zqsHc9(Gp`n5Nrs}Y>8K{=@BI3=$$p}h&|E-!yXYQUy5~TFM09+%bwE3R!D%%jkd^1ltL%f1E8&mxKtHwY%B?=N!Go3o za0~!*>FsQ#PZgplkKri13U8uAobqLFhE-lTIOzUvk8LpWdUU;{!w7h8pCzWMOXi(~ z474?wAu!)}4t}rP9-G1;+HlBsQ%s*UU&X{cTOk~Bz(@cs;0VB?q{9GtO)(l)#+V@4 z6E0Y`jt#=;L_w)w`tI(-;{rGg9M#+15I`Ob$|zuL;_?t(7t$xeG&z0%;*>rvmgsmK z4~3;8-UkANRnUT-_t(t93w_5IR{WMr%}Z!87lnJ^sIk1kIHb}eNYq~< zI+l6mDu7KLiyEE_3G@dfg#JT9B+s5Xz5Bi$|&3tKwMZLB;^dKsrSRhSN({TKgJcA9_zP3V61HwZZ0J@&I#&UX~) zxZ#y6Fond8MFEOBcqSk|7|Fj5iq=<*=xnb)^vo#}acu#58>U-8c=Nmy+^U=~4QcmI zXiK#rk>n^N`6WaJv6>W(2SbB*9Qw^e{+K00n1;H^0`aaIu8TsA+m((Rp1A@*;J^p8 zkBb?gfe|HSL)rcxL}jk>3!4W`DUtvX;x;GeEc=cRQ=A}ay8`}_mePuVfUyXTJKt65My zm=WmLXw=(-dB@@2!nu%euK12NNx#uMpeoNA2o}dmOX%;QEO^?0hz_O=s%mrOOPL*4 z!Z5)~46rfy?Du>ynqIQvj0pf1#hE|f&tdv=EZihePevkPkbJbrWrLz$G z7XX)0nE&lfEaZ-h^D6XrLp)kR^01QVyEIu6J+H8?Wuv)pV08YkdI8!AsOYj#WePvO z&E<4)H=&R)`3;sXb$_JGg@prJej7?GQ6G^TB(yggHNbC3N?(B=Szw~zPKOZ842IW+ z1=dS>XV`fsA(I{J%cOxA;(@w{_1B|6`l~|Z8{V*~(@G%enu;z-??oiM(;Hx?SvZ^c z?nJREAQ=;I7v@9MzKn{p;!`lu+7`K8^GP9vZFvJH^sSl={SLYFZvp{RC(f!7hEb0n zev33QWS<(8u1j9rd`(I0(UAy1Lb&m$VOYT&eS}trWmTpiE(Y_U|CdR-4FAn>rJnt* z5pG!H{^XqYnM8K?1o#U+4#%J^>3Vw_PO<*`OO)@lJIl@A&WlE!>%K8NOQQS@7v3!7 zQ{%X}57Mvudu8vW2DT0^5n_`C(Kvebp2H@vXpw(Gr`;m}NjXJWEXcU~p;(h(4gued*s8(lucwntMCwsKA;w&vQ&3YLFf6ix|p+o znWSi2nX}7a&W8TfK!Axp`^k9ub?g$3|AAAktov_KtLAem@{}R@=EiZf3Yx_w!4L;;p!sJdtMY}T zG!#EzAfX9l#8{Nk+;0bY4JQ42g5Se2|2`BxOqomVS}P!!g#g#Yr_e(Hw+=>kqYD7% z!>uT2QEEyNPnjtAvl`Q|8Pf2={Pw*ydB1&c{wM9Y#pI6kjE27%fbj(`4|v*qk!yXh zrK`!Chv35qK`^;>iJ=2cUHLl>occ0j)+76)GW-j^4~H5%K(u z^B1{OG(U}`~QnoK}KtTJOP9j<05Vi>LwZT`o( zyln&!`8%0A@Q&YYFuafwKYN6$GY6dPx6lB|$_oKTf@HAurg@EY#>C+@bjaFuM@oU( zI1qo}`oixlu+hNYH;~@1iou-Na&|&W!V%W22d>L6BdR6i3n;p<=0!L zb|ne{zY9eoZu|kYIokvvoQJR^^XT2X`{tvPIx>h>n$|1eh)GT2JjX zopPa`V{KlZQMdl~qeW>k0tm1l0Ez*l;xaZ07= zfiyIM-1skovg&{$$iZ0B0Fl@u5WiGPo8l}==~4jt^BW7CCIY6LINT^jqy85QczxrP z2^Ux!-U9Pi^5b*k4=zmSuj^pZc#5&)02;gNeVCbyb=JBbvZw2>Ki-F#3#pTHQN^dg z|J0MXv%#_QH?a;)5Zj7g3u9GHUI4fOOC3H5$4IH!|4)qY%&jSm7%iOV_g%(OIA${k z84-gsn$iFtHVXGO7O9vqxEMK!lCvwRTg4@8& z4g-8gR>zEDsnSXbg=D}5JJ6D`@|swOiOd^%b=}Y$N=#Aay{<&&unVjd|MEiq$ zXjw6zI)3#*K9#Dk=e_lbEVn;1-L0u#O(myA=U(dgwqy$tBZ%Z;_G)NSzZS9ct=JKLhKckY%)>H*IhK_+p zwkfqY`|4VAZT?1>&&v%?3fWOT@_60#ch^Xs9~OtyJwAV}7()Z9NU-zL6_Yd=$A+vZ(hJ-6& z^+!$>wkQuXG1%oZX_mcBYzrgwI!my*J+T(6J+`;3Di`=|i%$%WHS zTQ+S~wU;-vl-4T(Btk;oHFqu~FrKbds|#V*wEekqWEC~D&p*liSoshFe(pWXLs7YQ}*ZbM<^Xjxz6k zQ?H2?Bkg}U((yLXH8d|($`Khr@k-K#hBfT1)iYlE=C9mHD_DQ1ucVoVR8v?==v?qC zS!Fx18UKcK_%`=@*A#UJNK08`bCAgXdGV;6(p$#>bTSuTVX|7{fNwQE<$ zDf4h_{e|Rien3L}3C6!v+z^-8VxyR%=AK?2)iv2Y!cn<*_0m?8{Odbz&_v^;8^Shg zoUUq=y2?R3_grBsCa`Ik+xeFISC)=zNbHv-~D8$1o?jgVkdPkSQiETK_; zF7oLXQT^gC2kDQF1_=+c4A|5nRDL|_xkP(UY^$I-e|*sH-RJ}RzD@3Cju|s1{P=Y> zjnOhiCe<^~t#N`0(jsbwFOaNa*C&42{vv*zh}YD5Y3Qq8CD~u>>3f0h;1_}L?_Rn5 z`4u2ee=WLgG5lk3Hhif6$xHwLp#kRx{NbVT@pTaYzefm9A8?7z;2K^c;3DULSMLZ7 z&8gpC`SYz53H%-CG(H@}j@-ak1l*91N&>RDQJ;ByiNy7j8f0TfD Ap8x;= diff --git a/tests/test_form_fit_hancom_rules.py b/tests/test_form_fit_hancom_rules.py index 7d0fec45..5be4966f 100644 --- a/tests/test_form_fit_hancom_rules.py +++ b/tests/test_form_fit_hancom_rules.py @@ -71,6 +71,7 @@ MORE_FACES_HANGUL = Path(__file__).parent / "fixtures" / "hancom_saved" / "formfit_more_faces_hangul_cells.hwpx" KOPUB_FACES_CELLS = Path(__file__).parent / "fixtures" / "hancom_saved" / "formfit_kopub_faces_cells.hwpx" HFT_FACES_CELLS = Path(__file__).parent / "fixtures" / "hancom_saved" / "formfit_hft_faces_cells.hwpx" +DODUM_PUNCTUATION = Path(__file__).parent / "fixtures" / "hancom_saved" / "formfit_dodum_punctuation_cells.hwpx" NO_BREAK_SPACES = Path(__file__).parent / "fixtures" / "hancom_saved" / "pages_no_break_spaces.hwpx" FIXED_WIDTH_SPACES = Path(__file__).parent / "fixtures" / "hancom_saved" / "pages_fixed_width_spaces.hwpx" SCRIPT_ROWS = [ @@ -162,6 +163,26 @@ def test_cells_in_hancom_font_faces_break_where_hancom_breaks_them() -> None: assert len(cells) == 224 and len(faces) == 8 +def test_dodum_punctuation_and_the_exclamation_mark_break_where_hancom_breaks_them() -> None: + # Hancom Office 2024 laid this document out: each cell holds a glyph and five Hangul syllables in 함초롬돋움, + # 한컴산뜻돋움 or 한컴 고딕 at one of the two widths where its line count changes, at 10 pt and 30 pt. It lays + # out ! at half an em in every face, and 함초롬돋움's spacing modifier letters, general punctuation (but the + # quotation marks) and currency symbols at 함초롬바탕's advances, the faces falling back on it with them. + doc = HwpxDocument.open(DODUM_PUNCTUATION) + cells = list(doc.oxml.sections[0].element.iter(f"{HP}tc")) + for cell in cells: + paragraph = cell.find(f"{HP}subList/{HP}p") + text = "".join(t.text or "" for t in paragraph.iter(f"{HP}t")) + ref = paragraph.find(f"{HP}run").get("charPrIDRef") + style = text_style_from_refs(doc.oxml, paragraph.get("paraPrIDRef"), [ref]) + points = int(doc.oxml.char_property(ref).attributes["height"]) / 100 + margins = cell.find(f"{HP}cellMargin") + width = int(cell.find(f"{HP}cellSz").get("width")) - int(margins.get("left")) - int(margins.get("right")) + hancom = len(paragraph.findall(f"{HP}linesegarray/{HP}lineseg")) + assert estimate_lines(text, width, points, style) == hancom, (style.glyph_face, f"U+{ord(text[0]):04X}", points) + assert len(cells) == 144 + + def test_cells_in_more_faces_break_where_hancom_breaks_them() -> None: # Hancom laid these documents out: each cell holds a glyph and five Hangul syllables in 한컴산뜻돋움, HY중고딕, # HY견고딕, HY신명조, 새굴림 or 한컴 말랑말랑 Regular at one of the two widths where its line count changes, at @@ -182,13 +203,15 @@ def test_cells_in_more_faces_break_where_hancom_breaks_them() -> None: points = int(doc.oxml.char_property(ref).attributes["height"]) / 100 if style.glyph_face.startswith("한컴 말랑말랑") and (text.startswith("0") or (points == 30 and "고" in text)): continue + if text[0] in "—‐‑" and style.glyph_face in ("한컴산뜻돋움", "새굴림"): # from 함초롬돋움, which Hancom + continue # Office 2024 lays them out from 함초롬바탕 (test_dodum_punctuation_...) margins = cell.find(f"{HP}cellMargin") width = int(cell.find(f"{HP}cellSz").get("width")) - int(margins.get("left")) - int(margins.get("right")) hancom = len(paragraph.findall(f"{HP}linesegarray/{HP}lineseg")) assert estimate_lines(text, width, points, style) == hancom, ( style.glyph_face, f"U+{ord(text[0]):04X}", points, width) faces[style.glyph_face] = faces.get(style.glyph_face, 0) + 1 - assert faces == {"한컴산뜻돋움": 58, "HY중고딕": 58, "HY견고딕": 52, "HY신명조": 52, "새굴림": 34, + assert faces == {"한컴산뜻돋움": 40, "HY중고딕": 58, "HY견고딕": 52, "HY신명조": 52, "새굴림": 20, "한컴 말랑말랑 Regular": 56, "한컴 말랑말랑 Bold": 4} @@ -247,10 +270,10 @@ def test_a_line_taking_its_height_from_the_font_is_as_tall_as_the_face_makes_it( def test_human_myeongjo_takes_the_design_advances_of_its_font() -> None: - # 휴먼명조's font has 512 units per em: a Hangul syllable takes the full em, a parenthesis 160 units, the comma - # 138 and A 338. + # Hancom lays 휴먼명조 out in 1024 units per em: a Hangul syllable takes the full em, a parenthesis 321 units, + # the comma 276 and A 676. style = TextStyle(hangul_face="휴먼명조", glyph_face="휴먼명조") - assert glyph_advance_em("휴먼명조", "(") == 160 / 512 + assert glyph_advance_em("휴먼명조", "(") == 321 / 1024 assert [char_advance(ch, 10, style) for ch in "가(,A"] == [1000, 312, 268, 660] From 4b99ba8fc129293cfe19a4821b452b923659dc81 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:29:53 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix(form=5Ffit):=20take=20=ED=9C=B4?= =?UTF-8?q?=EB=A8=BC=EB=AA=85=EC=A1=B0's=20and=20=ED=9C=B4=EB=A8=BC?= =?UTF-8?q?=EA=B3=A0=EB=94=95's=20units=20Hancom=20lays=20out=20at=2080=20?= =?UTF-8?q?pt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At 10 and 40 pt two neighbouring units in 1024 can give a glyph the same width; laid out at 80 pt (an em of 2000) they do not. Seven glyphs of 휴먼명조 and eleven of 휴먼고딕 are a unit narrower than the tables had them, among them the parentheses and the slash (320, not 321: 468 at 15 pt, not 472). Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 +- src/hwpx/form_fit/_glyph_table.py | 8 ++++---- src/hwpx/form_fit/measure.py | 12 ++++++------ tests/test_form_fit_hancom_rules.py | 8 +++++--- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ea0d79..889e3659 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,7 +85,7 @@ - 함초롬돋움의 간격 수정 문자·일반 문장 부호(따옴표 빼고)·통화 기호는 함초롬바탕의 폭이다(…·※·‰·—·–·₩ 등). 함초롬돋움으로 대신 그리는 글꼴(한컴산뜻돋움·한컴 고딕 등)의 이 글자들도 그렇다. - HY헤드라인M은 한컴오피스 2024에 든 글꼴 판의 설계 폭을 쓴다(라틴 글자 폭이 옛 판과 다르다). - - 휴먼명조·휴먼고딕은 한/글이 배치하는 폭이다(1024 단위). HY헤드라인M과 이 둘의 그리스·키릴 문자와 글꼴에 없는 + - 휴먼명조·휴먼고딕은 한/글이 배치하는 폭이다(1024 단위, 10·40·80pt에서 잰 값: 괄호는 320 단위라 15pt에서 468). HY헤드라인M과 이 둘의 그리스·키릴 문자와 글꼴에 없는 글자도 한/글이 배치하는 폭이다. - HY견고딕·HY울릉도M·HY견명조·HY동녘M의 `` ` ``는 0.584 em이고, HY울릉도M에 없는 글자는 함초롬바탕의 폭이다. diff --git a/src/hwpx/form_fit/_glyph_table.py b/src/hwpx/form_fit/_glyph_table.py index e32cb37a..ea77fa8b 100644 --- a/src/hwpx/form_fit/_glyph_table.py +++ b/src/hwpx/form_fit/_glyph_table.py @@ -1780,7 +1780,7 @@ 592: "α", 596: "К", 598: "ýÿŷдл", - 619: "З", + 618: "З", 620: "₲", 626: "ΖΤТ", 632: "σ", @@ -1795,7 +1795,7 @@ 686: "ж", 690: "Ç", 694: "ďД", - 705: "м", + 704: "м", 706: "π", 726: "ÒÓÔÕÖĎĐĜĞĠĢŌŎŐ", 730: "ψ", @@ -2025,7 +2025,7 @@ 608: "‾", 610: "₦", 616: "₠₪", - 619: "З⁙", + 618: "З⁙", 620: "₲", 622: "‴‷₵", 626: "ΖΤТ", @@ -2049,7 +2049,7 @@ 690: "Ç", 694: "ďД", 700: "⁛", - 705: "м⁓", + 704: "м⁓", 706: "π", 726: "ÒÓÔÕÖĎĐĜĞĠĢŌŎŐ", 730: "ψ", diff --git a/src/hwpx/form_fit/measure.py b/src/hwpx/form_fit/measure.py index 491b4b37..137918eb 100644 --- a/src/hwpx/form_fit/measure.py +++ b/src/hwpx/form_fit/measure.py @@ -353,10 +353,10 @@ 0, 0, 0, 0, )), "휴먼명조": (1024, 1024, 512, ( - 512, 512, 672, 516, 768, 788, 296, 321, 321, 512, 512, 276, 512, 276, 321, 512, + 512, 512, 672, 516, 768, 788, 296, 320, 320, 512, 512, 276, 512, 276, 320, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 276, 276, 512, 512, 512, 440, 796, 676, 616, 656, 696, 640, 596, 720, 696, 264, 404, 660, 592, 800, 708, 732, 588, - 705, 668, 508, 640, 692, 680, 956, 728, 688, 612, 328, 321, 328, 372, 512, 332, + 704, 668, 508, 640, 692, 680, 956, 728, 688, 612, 328, 320, 328, 372, 512, 332, 520, 556, 496, 520, 536, 400, 528, 568, 256, 272, 536, 256, 816, 564, 524, 552, 552, 412, 420, 348, 552, 552, 740, 500, 524, 464, 300, 208, 300, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, @@ -383,12 +383,12 @@ 0, 0, 0, 0, )), "휴먼고딕": (1024, 1024, 512, ( - 512, 400, 720, 592, 864, 705, 288, 321, 321, 512, 512, 296, 512, 244, 321, 516, + 512, 400, 720, 592, 864, 704, 288, 320, 320, 512, 512, 296, 512, 244, 320, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 264, 252, 512, 512, 512, 528, 796, - 612, 577, 608, 588, 552, 512, 664, 592, 200, 472, 612, 504, 732, 600, 692, 548, - 692, 564, 568, 552, 592, 628, 856, 604, 592, 548, 328, 321, 328, 396, 512, 304, + 612, 576, 608, 588, 552, 512, 664, 592, 200, 472, 612, 504, 732, 600, 692, 548, + 692, 564, 568, 552, 592, 628, 856, 604, 592, 548, 328, 320, 328, 396, 512, 304, 512, 524, 512, 540, 544, 292, 552, 512, 200, 248, 508, 200, 784, 512, 540, 532, - 540, 368, 476, 321, 516, 520, 696, 480, 488, 456, 300, 272, 300, 512, 1024, 1024, + 540, 368, 476, 320, 516, 520, 696, 480, 488, 456, 300, 272, 300, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 896, 640, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 994, 994, diff --git a/tests/test_form_fit_hancom_rules.py b/tests/test_form_fit_hancom_rules.py index 5be4966f..f07f79e2 100644 --- a/tests/test_form_fit_hancom_rules.py +++ b/tests/test_form_fit_hancom_rules.py @@ -270,11 +270,13 @@ def test_a_line_taking_its_height_from_the_font_is_as_tall_as_the_face_makes_it( def test_human_myeongjo_takes_the_design_advances_of_its_font() -> None: - # Hancom lays 휴먼명조 out in 1024 units per em: a Hangul syllable takes the full em, a parenthesis 321 units, - # the comma 276 and A 676. + # Hancom lays 휴먼명조 out in 1024 units per em: a Hangul syllable takes the full em, a parenthesis 320 units, + # the comma 276 and A 676. 320 and 321 units give a parenthesis the same width at 10 and 40 pt; at 15 pt + # Hancom lays it out 468 wide (321 would be 472), and at 80 pt 2500. style = TextStyle(hangul_face="휴먼명조", glyph_face="휴먼명조") - assert glyph_advance_em("휴먼명조", "(") == 321 / 1024 + assert glyph_advance_em("휴먼명조", "(") == 320 / 1024 assert [char_advance(ch, 10, style) for ch in "가(,A"] == [1000, 312, 268, 660] + assert [char_advance("(", size, style) for size in (15, 80)] == [468, 2500] def test_every_fallback_face_has_a_table() -> None: