diff --git a/CHANGELOG.md b/CHANGELOG.md index 45347ef9..56126c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -121,6 +121,8 @@ - 표 뒤의 조판 부호는 전처럼 표 아래 빈 줄에 선다. - 어울림 개체 옆 좁은 띠에 든 이런 개체는 띠보다 넓어도 띠 안 그 자리에 놓인다. 전에는 개체 아래 전체 폭 줄로 내렸다. +- FormFit과 쪽 수 추정이 HCI Poppy·HCI Hollyhock·한양중고딕·한양신명조·한양견고딕·휴먼옛체의 라틴 확장·그리스·키릴 + 문자와 기호(표준 글자 1,678자)도 한/글이 배치하는 폭으로 잰다. 전에는 표에 없어 글자 종류의 평균 폭을 썼다. - 쪽 수 추정이 문단 위로 올려 놓은 도형(문단 기준 음수 `vertOffset`, 파일에는 부호 없는 32비트로 남는다)을 그만큼 위에 놓인 것으로 센다. 전에는 그 값을 큰 양수로 읽어 문단 줄이 40억 넘게 높아지고, 한 쪽짜리 문서가 세 쪽으로 나왔다. 한/글은 그 도형을 문단 위가 있었을 자리에서 그만큼 위에 놓고, 그 띠에 걸린 앞 줄(아래끝이 띠 위끝보다 아래인 줄)을 diff --git a/src/hwpx/form_fit/_glyph_table.py b/src/hwpx/form_fit/_glyph_table.py index ea77fa8b..8f2b2fd3 100644 --- a/src/hwpx/form_fit/_glyph_table.py +++ b/src/hwpx/form_fit/_glyph_table.py @@ -4962,4 +4962,1315 @@ "_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" ), }, + "HCI Poppy": { + 1: "¡\u302a\u302b", + 161: "˙", + 172: "ː", + 218: "⁏", + 232: "⁚⁝⁞", + 256: "¦", + 263: "˛", + 270: "˚", + 272: "ĺļľł", + 276: "ìíîïĩīĭįı", + 294: "Ι", + 296: "․‧", + 300: "‚‛", + 304: "ª", + 308: "ĵ", + 321: "¹", + 328: "⁴ⁿ₁₂₃₄", + 338: "ι", + 343: "‖′‵", + 346: "ÌÍÎÏĨĪĬĮİ", + 358: "¸", + 370: "ţťŧ", + 378: "‣", + 384: "º", + 386: "´˘", + 390: "¨", + 392: "²³", + 395: "ˇ", + 400: "„‟", + 402: "ŀ", + 406: "‹›", + 409: "•", + 418: "ŕŗř", + 427: "⁎", + 432: "¼½¾", + 445: "˝", + 448: "Ĵ", + 449: "‡", + 458: "τ‼", + 466: "śŝşš", + 467: "⁃", + 474: "źżž", + 475: "⁖", + 483: "⁅⁆", + 485: "″‶", + 488: "⚬", + 491: "¶", + 492: "‽", + 494: "çðćĉċč", + 497: ( + "〿。「」、ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑→" + "↓■○" + ), + 498: "§⁑", + 502: "èéêëēĕėęě", + 506: "¯", + 512: ( + "¢»¿【】〔〕〖〗〘〙〚〛・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモ" + "ヤユヨラリルレロワン゙゚ᅠ" + ), + 514: "«", + 522: "àáâãäåāăą", + 523: "₫", + 529: "₰", + 530: "её", + 532: "£òóôõöøōŏő", + 534: "⁙", + 536: "µ", + 537: "δ", + 538: "ĸ‸", + 540: "ij", + 541: "‐‑", + 544: "⁊", + 546: "ζξ⚘", + 547: "сэ", + 549: "ν", + 550: "β", + 551: "з", + 553: "х", + 554: "у", + 555: "μ", + 556: "ďđ", + 562: "ь", + 564: "⚨⚲", + 565: "ρ", + 566: "ß", + 568: "ĝğġģε⁒", + 570: "ķ", + 571: "†", + 573: "а", + 574: "¤ùúûüĥħũūŭůűųŷ", + 578: "ñńņňʼnŋ", + 580: "ýþÿκ", + 584: "¥οо₤", + 585: "б", + 586: "гт", + 587: "γ", + 590: "ÞΡ⚚", + 593: "‗", + 601: "Β", + 604: "η", + 605: "υ", + 606: "В", + 607: "θ", + 608: "‾", + 609: "₦", + 612: "ŹŻŽк", + 613: "в", + 614: "φ", + 615: "₠₪", + 616: "З", + 621: "Р₲", + 623: "Ζря‴‷₵", + 624: "ΕЁБЕ", + 627: "Γ", + 628: "₴", + 632: "χий", + 636: "ŚŜŞŠ", + 637: "Г", + 639: "⁈", + 640: "‒", + 645: "ч", + 647: "₣", + 649: "ц⁉", + 650: "⁄", + 652: "₱", + 655: "‥", + 657: "ΚЯ⁘⁛", + 660: "ĹĻĽĿŁ", + 662: "ΤТ⁋⁌⁍", + 665: "Ь", + 666: "₭", + 668: "⁗", + 670: "₮", + 671: "н", + 672: "€", + 673: "σ", + 674: "С", + 675: "⚭", + 676: "α", + 677: "ΞЭ", + 681: "лп₥", + 682: "ψ⁁₡₢", + 688: "æК", + 694: "ÈÉÊËĒĔĖĘĚ", + 697: "⁕", + 705: "Ç", + 706: "ĆĈĊČ", + 711: "⚥⚦", + 712: "Δм", + 713: "ΘΟО", + 714: "Π", + 716: "ŔŖŘ", + 717: "Ч", + 720: "ΥΧХ", + 721: "ΑА", + 724: "λ", + 726: "Ŋъ", + 727: "д", + 731: "πω", + 733: "ΗΝН", + 736: "ИЙ", + 737: "⚐⚑", + 738: "Ω", + 740: "œ", + 752: "ПЦ", + 753: "ΛЛ", + 760: "ĜĞĠĢ", + 762: "Д", + 764: "Ψ", + 765: "ΦФ", + 766: "ÐÒÓÔÕÖØĎĐŌŎŐ", + 768: "У", + 773: "Σ", + 780: "ŶŸ", + 787: "₳", + 788: "ÙÚÛÜÝŢŤŦŨŪŬŮŰŲ‿⁀", + 792: "IJ", + 796: "ÑŃŅŇ", + 798: "Ķ", + 800: "ж", + 802: "ĤĦ", + 804: "©", + 806: "®", + 808: "Ъ", + 813: "₩", + 814: "ÀÁÂÃÄÅĀĂĄю", + 815: "⁔", + 818: "⁐", + 819: "⚢", + 822: "⁓", + 825: "ы", + 829: "₨", + 841: "ΜМ", + 842: "ŵ", + 845: "шщ", + 853: "⁇", + 864: "⚩", + 882: "◸◹◺◿", + 886: "ШЩ", + 895: "Ы⚣⚤", + 896: "―", + 920: "ф⚊⚋⚌⚍⚎⚏", + 931: "⁂", + 950: "Œ", + 951: "Ж", + 954: "⚮", + 956: "Æ", + 971: "Ю", + 979: "‱", + 980: "₧", + 993: ( + "₯℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥" + "∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡" + "≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝" + "⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙" + "⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰" + "⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤" + "┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▴▵▶▷" + "▸▹►▻▼▽▾▿◀◁◂◃◄◅◈◉◊◌◍◎◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷" + "☀☁☂☃☄☇☈☉☊☋☌☍☎☏☐☑☒☓☖☗☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂" + "♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽⚀" + "⚁⚂⚃⚄⚅⚆⚇⚈⚉✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷" + "✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻" + "❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻" + "➼➽➾、。〃〄〇〜〝〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘" + "㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝" + "㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'" + "()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc" + "defghijklmnopqrstuvwxyz{|}~⦅⦆¢£¬ ̄¦¥₩" + ), + 1022: "¬", + 1024: "ſ⁜✀々〆〒〓〞〟", + 1036: "☜☞", + 1058: "Ŵ", + 1116: "⚯", + 1406: "◻◼◽◾☔☕☘♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱", + }, + "HCI Hollyhock": { + 1: "¡\u302a\u302b", + 161: "˙", + 172: "ː", + 200: "ıľ", + 202: "ī", + 204: "į", + 206: "ĵ", + 210: "Ī", + 218: "ìíîïĺļł⁏", + 226: "ĭ", + 232: "Į⁚⁝⁞", + 238: "ÌÍÎÏ", + 242: "¦", + 244: "¹", + 246: "ĩ", + 260: "Ĭİ", + 262: "ţťŧ", + 263: "˛", + 270: "˚", + 276: "´Ĩ", + 286: "ŀ", + 294: "Ι", + 296: "․‧", + 300: "‚‛", + 318: "ŕŗř", + 328: "⁴ⁿ₁₂₃₄", + 338: "¸ι", + 343: "‖′‵", + 358: "¨", + 370: "º", + 372: "²³", + 378: "‣", + 380: "ª", + 384: "„‟", + 386: "˘", + 394: "¼½¾ij", + 395: "ˇ", + 406: "‹›", + 409: "•", + 427: "⁎", + 445: "˝", + 449: "‡", + 458: "τ‼", + 467: "⁃", + 475: "⁖", + 478: "ŷ", + 480: "ýþÿ", + 482: "ð", + 483: "⁅⁆", + 485: "″‶", + 488: "⚬", + 491: "ķ", + 492: "śŝşš‽", + 494: "¢çćĉċč", + 496: "źżž", + 497: ( + "〿。「」、ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑→" + "↓■○" + ), + 498: "»⁑", + 500: "«", + 508: "Ĵ", + 510: "ĸ", + 512: ( + "【】〔〕〖〗〘〙〚〛・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨ" + "ラリルレロワン゙゚ᅠ" + ), + 522: "¯", + 523: "₫", + 528: "¿", + 529: "₰", + 530: "её", + 534: "⁙", + 536: "Þ", + 537: "δ", + 538: "‸", + 541: "‐‑", + 542: "ñĝğġģĥńņňʼnŋ", + 544: "èéêëùúûüďđēĕėęěũūŭůűų⁊", + 546: "àáâãäåāăąζξ⚘", + 547: "сэ", + 548: "ô", + 549: "ν", + 550: "õβ", + 551: "з", + 552: "òóöøōŏő", + 553: "х", + 554: "у", + 555: "μ", + 562: "ĹĻĽĿŁь", + 564: "⚨⚲", + 565: "ρ", + 568: "ε⁒", + 571: "†", + 572: "ħ", + 573: "а", + 574: "¥µ", + 577: "¶", + 580: "κ", + 584: "οо₤", + 585: "б", + 586: "гт", + 587: "γ", + 590: "Ρ⚚", + 593: "‗", + 600: "ßŢŤŦŹŻŽ", + 601: "Β", + 604: "η", + 605: "υ", + 606: "¤В", + 607: "θ", + 608: "‾", + 609: "₦", + 612: "к", + 613: "в", + 614: "φ", + 615: "₠₪", + 616: "З", + 621: "Р₲", + 623: "Ζря‴‷₵", + 624: "£ΕЁБЕ", + 627: "Γ", + 628: "₴", + 632: "χий", + 634: "ÝŊŶŸ", + 637: "Г", + 639: "⁈", + 640: "Ķ‒", + 645: "ч", + 647: "₣", + 648: "ÀÁÂÃÄÅĀĂĄ", + 649: "ц⁉", + 650: "Ş⁄", + 652: "ŚŜŠ₱", + 655: "‥", + 657: "ΚЯ⁘⁛", + 658: "§", + 662: "ΤТ⁋⁌⁍", + 664: "ÈÉÊËĒĔĖĘĚ", + 665: "Ь", + 666: "₭", + 668: "⁗", + 670: "₮", + 671: "н", + 672: "€", + 673: "σ", + 674: "С", + 675: "⚭", + 676: "α", + 677: "ΞЭ", + 681: "лп₥", + 682: "ψ⁁₡₢", + 688: "К", + 697: "⁕", + 698: "IJ", + 702: "ĎĐ", + 705: "ÙÚÛÜŨŪŬŮŲ", + 706: "ĤĦŰ", + 708: "ÑŃŅŇŔŖŘ", + 710: "Ð", + 711: "⚥⚦", + 712: "Δм", + 713: "ΘΟО", + 714: "ŵΠ", + 716: "ÇĆĈĊČ", + 717: "Ч", + 720: "ΥΧХ", + 721: "ΑА", + 724: "λ", + 726: "ъ", + 727: "д", + 731: "πω", + 733: "ΗΝН", + 736: "ИЙ", + 737: "⚐⚑", + 738: "Ω", + 752: "ПЦ", + 753: "ΛЛ", + 762: "Д", + 764: "Ψ", + 765: "ΦФ", + 766: "ÒÓÔÕÖŌŎŐ", + 768: "У", + 770: "ĜĞĠĢ", + 773: "Σ", + 782: "©®", + 787: "₳", + 788: "‿⁀", + 800: "ж", + 806: "Ø", + 808: "Ъ", + 813: "₩", + 814: "ю", + 815: "⁔", + 818: "⁐", + 819: "⚢", + 822: "⁓", + 825: "ы", + 829: "₨", + 841: "ΜМ", + 845: "шщ", + 848: "æ", + 853: "⁇", + 864: "⚩", + 882: "◸◹◺◿", + 886: "ШЩ", + 892: "œ", + 895: "Ы⚣⚤", + 896: "―", + 920: "ф⚊⚋⚌⚍⚎⚏", + 926: "Ŵ", + 931: "⁂", + 946: "Œ", + 951: "Ж", + 954: "⚮", + 958: "¬", + 971: "Ю", + 972: "Æ", + 979: "‱", + 980: "₧", + 993: ( + "₯℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥" + "∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡" + "≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝" + "⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙" + "⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰" + "⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤" + "┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▴▵▶▷" + "▸▹►▻▼▽▾▿◀◁◂◃◄◅◈◉◊◌◍◎◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷" + "☀☁☂☃☄☇☈☉☊☋☌☍☎☏☐☑☒☓☖☗☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂" + "♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽⚀" + "⚁⚂⚃⚄⚅⚆⚇⚈⚉✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷" + "✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻" + "❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻" + "➼➽➾、。〃〄〇〜〝〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘" + "㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝" + "㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'" + "()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc" + "defghijklmnopqrstuvwxyz{|}~⦅⦆¢£¬ ̄¦¥₩" + ), + 1024: "ſ⁜✀々〆〒〓〞〟", + 1036: "☜☞", + 1116: "⚯", + 1406: "◻◼◽◾☔☕☘♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱", + }, + "한양중고딕": { + 1: "\u302a\u302b", + 195: "ıľ", + 198: "ī", + 200: "į", + 201: "ĵ", + 205: "Ī", + 212: "ìíîïĺļł", + 213: "⁏", + 220: "ĭ", + 226: "Į", + 227: "⁚⁝⁞", + 233: "ÌÍÎÏ", + 237: "¦", + 239: "¹", + 240: "ĩ", + 253: "Ĭİ", + 255: "ţťŧ", + 270: "´Ĩ", + 279: "ŀ", + 292: "‚‛", + 310: "ŕŗř", + 312: "˙", + 313: "˚˛", + 330: "¸", + 350: "¨", + 361: "º", + 363: "²", + 364: "³", + 371: "ª", + 375: "ˇ˘Ι„‟", + 384: "¼½", + 385: "¾ij", + 398: "ι", + 417: "⁎", + 438: "˝ζξ", + 457: "с", + 463: "⁖", + 464: "з", + 466: "ŷ", + 468: "ÿ", + 469: "ýþ", + 470: "ð", + 477: "⚬", + 478: "ķ", + 480: "śŝşš", + 483: "¢çćĉċč", + 485: ( + "źżžε〿ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑→" + "↓○" + ), + 486: "υ⁑", + 487: "»", + 488: "«", + 497: "Ĵ", + 498: "ĸ", + 500: ( + "ао‧▮▯◤◥❙❚〖〗〘〙。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマ" + "ミムメモヤユヨラリルレロワン゙゚ᅠ" + ), + 506: "э", + 509: "¯", + 511: "₫", + 515: "¿", + 517: "₰", + 520: "⁙", + 521: "р", + 522: "ρ", + 524: "Þ", + 526: "τ", + 529: "ñĝğġģĥńņňʼnŋ", + 531: "ùúûüďđũūŭůűų⁊", + 532: "èéêëēĕėęě", + 533: "⚘", + 534: "àáâãäåāăą", + 535: "ô", + 537: "З", + 538: "õ", + 539: "óöøōŏő", + 540: "ò", + 542: "δμοσеё", + 544: "α", + 547: "ν", + 548: "я", + 549: "ĹĻĽĿŁ₤", + 551: "⚨⚲", + 555: "⁒", + 556: "г", + 559: "ħ", + 560: "¥", + 561: "µ", + 562: "¶γ", + 563: "κх", + 565: "π", + 574: "б", + 576: "⚚", + 577: "у", + 580: "ь", + 585: "ßŹŻŽ", + 586: "ŢŤŦ", + 592: "¤", + 593: "ч", + 594: "в", + 595: "₦", + 601: "₠₪", + 603: "Ξ", + 605: "к", + 606: "₲", + 608: "₵", + 609: "£Ρ", + 610: "Γ", + 612: "Р", + 613: "₴", + 616: "Ь", + 617: "т", + 619: "ÝŊŶŸ", + 623: "η", + 624: "⁈", + 625: "ĶΖλωГ₣", + 626: "χ", + 632: "ÀÁÂÃÄÅĀĂĄ", + 634: "⁉", + 635: "Ş", + 636: "ŚŜŠ", + 637: "₱", + 640: "и", + 641: "⁘⁛", + 643: "§", + 645: "н", + 646: "⁋⁌⁍", + 649: "ÈÉÊËĒĔĖĘĚ", + 650: "Ч₭", + 652: "⁗", + 654: "Ββ₮", + 658: "Δ₧", + 659: "⚭", + 661: "φ", + 662: "п", + 665: "₥", + 666: "₡₢", + 667: "ΕΥЁБВЕСЭЯ", + 670: "д", + 680: "⁕", + 681: "IJ", + 684: "ΧХ", + 686: "ĎĐц", + 688: "ÙÚÛÜŨŪŬŮŲъ", + 689: "ĤĦ", + 690: "Űψф", + 692: "ÑŃŅŇŔŖŘУ", + 693: "Ð", + 694: "⚥⚦", + 697: "ŵ", + 699: "ÇĆĈĊČ", + 700: "Πл", + 708: "ΘΟθО", + 711: "Т", + 716: "Τ", + 717: "Ω", + 720: "⚐⚑", + 736: "ΦЛФ", + 741: "Ψ", + 749: "ÒÓÔÕÖŌŎŐ", + 750: "ΑΗΚΛΝАИЙН►◄", + 751: "ĜĞĠĢ", + 762: "ж", + 764: "©®", + 769: "₳", + 770: "м", + 774: "♦", + 780: "П", + 781: "Σ", + 787: "Ø", + 794: "Д", + 795: "Ъ", + 796: "⁔", + 798: "ю", + 799: "⁐⚢", + 801: "Ц", + 802: "⁓", + 810: "₨", + 813: "К", + 829: "æ", + 833: "⁇", + 844: "⚩", + 861: "◸◹◺◿", + 872: "œ", + 874: "⚣⚤", + 875: "шы", + 890: "щ", + 898: "⚊⚋⚌⚍⚎⚏", + 900: "Ы", + 904: "Ŵ", + 912: "ΜМ", + 924: "Œ", + 932: "⚮", + 936: "¬", + 950: "Æ", + 970: ( + "₯∊∍≛⋍⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿▢▭▰▻◅◌◍◖◗◚◛◠◡◢◣◧◨◩◪◫◬◭◮◰◱◲◳◴◵◶◷☀☉☊☋☌☍☐☓☖☗" + "☙☚☛☠☡☣☤☥☦☧☩☪☫☬☭☸☹☾☿♁♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♢♰♱♲♳♴♵♶♷♸♹" + "♺♻♼♽⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉✁✃✄✆✇✈✌✍✎✏✐✑✒✓✕✖✘✙✚✛✜✞✟✠✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸" + "✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❿➀➁➂➃➄➅➆➇" + "➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➝➞➟➠➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾〝〠〡〢〣〤〥〦〧〨〩" + "〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾⦅⦆¦" + ), + 1000: ( + "¡ſːЖШЩЮй‐‑‒―‖‗†‡•‣․‥‱′″‴‵‶‷‸‹›‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁜⁴ⁿ₁₂₃₄₩€℉ℓ№℡™ΩÅ⅓⅔⅛" + "⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∋∌∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲" + "∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯" + "≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫" + "⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨" + "⋩⋪⋫⋬⋭⋮⋯⋰⋱⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧ" + "ⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁" + "╂╃╄╅╆╇╈╉╊╋▒▣▤▥▦▧▨▩▪▫▬▱▴▵▶▷▸▹▼▽▾▿◀◁◂◃◈◉◊◎◐◑◒◓◔◕◘◙◜◝◞◟◦◯☁☂☃☄☇☈" + "☎☏☑☒☜☝☞☟☢☨☮☯☰☱☲☳☴☵☶☷☺☻☼☽♀♂♠♡♣♤♥♧♨♩♪♫♬♭♮♯✀✂✉✔✗✝✡❶❷❸❹❺❻❼❽❾➜➡、。" + "〃〄々〆〇【】〒〓〔〕〚〛〜〞〟㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮" + "㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰" + "㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:" + ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv" + "wxyz{|}~¢£¬ ̄¥₩■" + ), + 1089: "⚯", + 1373: "◻◼◽◾☔☕☘♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱", + }, + "한양신명조": { + 1: "\u302a\u302b", + 213: "⁏", + 227: "⁚⁝⁞", + 250: "¦", + 265: "ĺļľł", + 269: "ìíîïĩīĭįı", + 292: "‚‛", + 297: "ª", + 301: "ĵ", + 312: "˙", + 313: "¹˚˛", + 337: "ÌÍÎÏĨĪĬĮİ", + 350: "¸", + 361: "ţťŧ", + 375: "ºˇ˘Ι", + 376: "´", + 380: "¨", + 383: "²³", + 390: "„‟", + 393: "ŀ", + 398: "ι", + 409: "ŕŗř", + 417: "⁎", + 421: "¼½¾", + 438: "Ĵ˝ζξ", + 455: "śŝşš", + 457: "с", + 463: "źżž⁖", + 464: "з", + 477: "⚬", + 479: "¶", + 482: "çðćĉċč", + 485: "ε〿ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│←↑→↓○", + 486: "§υ⁑", + 490: "èéêëēĕėęě", + 494: "¯", + 500: ( + "¢»¿ао‧▮▯◤◥❙❚〖〗〘〙。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフ" + "ヘホマミムメモヤユヨラリルレロワン゙゚ᅠ" + ), + 501: "«", + 506: "э", + 509: "àáâãäåāăą", + 511: "₫", + 517: "₰", + 519: "òóôõöøōŏő", + 520: "£⁙", + 521: "р", + 522: "ρ", + 523: "µ", + 525: "ĸ", + 526: "τ", + 528: "ij", + 531: "⁊", + 533: "⚘", + 537: "З", + 542: "δμοσеё", + 543: "ďđ", + 544: "α", + 547: "ν", + 548: "я", + 549: "₤", + 551: "⚨⚲", + 553: "ß", + 554: "ĝğġģ", + 555: "⁒", + 556: "г", + 557: "ķ", + 560: "ùúûüĥħũūŭůűų", + 561: "¤ŷ", + 562: "γ", + 563: "κх", + 564: "ñńņňʼnŋ", + 565: "π", + 566: "ýþÿ", + 571: "¥", + 574: "б", + 576: "Þ⚚", + 577: "у", + 580: "ь", + 593: "ч", + 594: "в", + 595: "₦", + 597: "ŹŻŽ", + 601: "₠₪", + 603: "Ξ", + 605: "к", + 606: "₲", + 608: "₵", + 609: "Ρ", + 610: "Γ", + 612: "Р", + 613: "₴", + 616: "Ь", + 617: "т", + 622: "ŚŜŞŠ", + 623: "η", + 624: "⁈", + 625: "ΖλωГ₣", + 626: "χ", + 634: "⁉", + 637: "₱", + 640: "и", + 641: "⁘⁛", + 645: "ĹĻĽĿŁн", + 646: "⁋⁌⁍", + 650: "Ч₭", + 652: "⁗", + 654: "Ββ₮", + 658: "Δ₧", + 659: "⚭", + 661: "φ", + 662: "п", + 665: "₥", + 666: "₡₢", + 667: "ΕΥЁБВЕСЭЯ", + 670: "д", + 672: "æ", + 677: "ÈÉÊËĒĔĖĘĚ", + 680: "⁕", + 684: "ΧХ", + 686: "ц", + 687: "Ç", + 688: "ъ", + 690: "ĆĈĊČψф", + 692: "У", + 694: "⚥⚦", + 700: "ŔŖŘΠл", + 708: "ΘΟθО", + 709: "Ŋ", + 711: "Т", + 716: "Τ", + 717: "Ω", + 720: "⚐⚑", + 723: "œ", + 736: "ΦЛФ", + 741: "Ψ", + 742: "ĜĞĠĢ", + 748: "ÒÓÔÕÖØŌŎŐ", + 749: "ÐĎĐ", + 750: "ΑΗΚΛΝАИЙН►◄", + 762: "ŶŸж", + 769: "₳", + 770: "ÙÚÛÜÝŢŤŦŨŪŬŮŰŲм", + 774: "IJ♦", + 777: "ÑŃŅŇ", + 780: "ĶП", + 781: "Σ", + 784: "ĤĦ", + 785: "©", + 788: "®", + 794: "ÀÁÂÃÄÅĀĂĄД", + 795: "Ъ", + 796: "⁔", + 798: "ю", + 799: "⁐⚢", + 801: "Ц", + 802: "⁓", + 810: "₨", + 813: "К", + 823: "ŵ", + 833: "⁇", + 844: "⚩", + 861: "◸◹◺◿", + 874: "⚣⚤", + 875: "шы", + 890: "щ", + 898: "⚊⚋⚌⚍⚎⚏", + 900: "Ы", + 912: "ΜМ", + 927: "Œ", + 932: "⚮", + 934: "Æ", + 970: ( + "₯∊∍≛⋍⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿▢▭▰▻◅◌◍◖◗◚◛◠◡◢◣◧◨◩◪◫◬◭◮◰◱◲◳◴◵◶◷☀☉☊☋☌☍☐☓☖☗" + "☙☚☛☠☡☣☤☥☦☧☩☪☫☬☭☸☹☾☿♁♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♢♰♱♲♳♴♵♶♷♸♹" + "♺♻♼♽⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉✁✃✄✆✇✈✌✍✎✏✐✑✒✓✕✖✘✙✚✛✜✞✟✠✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸" + "✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❿➀➁➂➃➄➅➆➇" + "➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➝➞➟➠➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾〝〠〡〢〣〤〥〦〧〨〩" + "〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾⦅⦆¦" + ), + 999: "¬", + 1000: ( + "¡ſːЖШЩЮй‐‑‒―‖‗†‡•‣․‥‱′″‴‵‶‷‸‹›‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁜⁴ⁿ₁₂₃₄₩€℉ℓ№℡™ΩÅ⅓⅔⅛" + "⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∋∌∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲" + "∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯" + "≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫" + "⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨" + "⋩⋪⋫⋬⋭⋮⋯⋰⋱⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧ" + "ⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁" + "╂╃╄╅╆╇╈╉╊╋▒▣▤▥▦▧▨▩▪▫▬▱▴▵▶▷▸▹▼▽▾▿◀◁◂◃◈◉◊◎◐◑◒◓◔◕◘◙◜◝◞◟◦◯☁☂☃☄☇☈" + "☎☏☑☒☜☝☞☟☢☨☮☯☰☱☲☳☴☵☶☷☺☻☼☽♀♂♠♡♣♤♥♧♨♩♪♫♬♭♮♯✀✂✉✔✗✝✡❶❷❸❹❺❻❼❽❾➜➡、。" + "〃〄々〆〇【】〒〓〔〕〚〛〜〞〟㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮" + "㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰" + "㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:" + ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv" + "wxyz{|}~¢£¬ ̄¥₩■" + ), + 1034: "Ŵ", + 1089: "⚯", + 1373: "◻◼◽◾☔☕☘♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱", + }, + "한양견고딕": { + 3: "\u302a\u302b", + 644: "˙", + 689: "ː", + 799: "ıľ", + 813: "ī", + 820: "į", + 824: "ĵ", + 840: "Ī", + 869: "ìíîïĺļł", + 873: "⁏", + 902: "ĭ", + 925: "Į", + 930: "⁚⁝⁞", + 955: "ÌÍÎÏ", + 971: "¦", + 979: "¹", + 983: "ĩ", + 1037: "Ĭİ", + 1045: "ţťŧ", + 1053: "˛", + 1082: "˚", + 1107: "´Ĩ", + 1143: "ŀ", + 1176: "Ι", + 1184: "․‧", + 1196: "‚‛", + 1271: "ŕŗř", + 1311: "⁴ⁿ₁₂₃₄", + 1353: "¸ι", + 1373: "‖′‵", + 1435: "¨", + 1479: "º", + 1487: "²", + 1491: "³", + 1512: "‣", + 1520: "ª", + 1536: "„‟", + 1545: "˘", + 1573: "¼½", + 1577: "¾ij", + 1581: "ˇ", + 1622: "‹›", + 1635: "•", + 1708: "⁎", + 1782: "˝", + 1796: "‡", + 1831: "τ‼", + 1868: "⁃", + 1901: "⁖", + 1908: "ŷ", + 1917: "ÿ", + 1921: "ýþ", + 1927: "ð", + 1934: "⁅⁆", + 1941: "″‶", + 1954: "⚬", + 1959: "ķ", + 1967: "śŝşš‽", + 1979: "¢çćĉċč", + 1987: ( + "źżž〿。「」、ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ│" + "←↑→↓■○" + ), + 1992: "⁑", + 1995: "»", + 1999: "«", + 2036: "Ĵ", + 2041: "ĸ", + 2048: ( + "【】〔〕〖〗〘〙〚〛・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨ" + "ラリルレロワン゙゚ᅠ" + ), + 2053: "¡", + 2085: "¯", + 2094: "₫", + 2110: "¿", + 2118: "₰", + 2121: "её", + 2134: "⁙", + 2147: "Þδ", + 2151: "‸", + 2163: "‐‑", + 2167: "ñĝğġģĥńņňʼnŋ", + 2175: "ùúûüďđũūŭůűų⁊", + 2180: "èéêëēĕėęě", + 2184: "ζξ⚘", + 2189: "àáâãäåāăąсэ", + 2192: "ô", + 2196: "ν", + 2200: "β", + 2205: "õз", + 2208: "óöøōŏő", + 2212: "òх", + 2216: "у", + 2219: "μ", + 2249: "ĹĻĽĿŁь", + 2257: "⚨⚲", + 2261: "ρ", + 2274: "ε⁒", + 2285: "†", + 2290: "ħ", + 2294: "¥а", + 2298: "µ", + 2301: "¶", + 2320: "κ", + 2336: "οо₤", + 2339: "б", + 2343: "гт", + 2347: "γ", + 2360: "Ρ⚚", + 2372: "‗", + 2397: "ßŹŻŽ", + 2400: "ŢŤŦ", + 2405: "Β", + 2416: "η", + 2421: "υ", + 2425: "¤В", + 2429: "θ", + 2432: "‾", + 2438: "₦", + 2449: "к", + 2454: "в", + 2458: "φ", + 2462: "₠₪", + 2465: "З", + 2484: "Р₲", + 2491: "Ζря‴‷₵", + 2495: "£ΕЁБЕ", + 2507: "Γ", + 2511: "₴", + 2528: "χий", + 2536: "ÝŊŶŸ", + 2549: "Г", + 2556: "⁈", + 2560: "Ķ‒", + 2580: "ч", + 2589: "ÀÁÂÃÄÅĀĂĄ₣", + 2596: "ц⁉", + 2601: "Ş⁄", + 2606: "ŚŜŠ", + 2610: "₱", + 2622: "‥", + 2629: "ΚЯ⁘⁛", + 2634: "§", + 2648: "ΤТ⁋⁌⁍", + 2659: "ÈÉÊËĒĔĖĘĚЬ", + 2664: "₭", + 2671: "⁗", + 2680: "₮", + 2683: "н", + 2687: "€", + 2692: "σ", + 2697: "С", + 2700: "⚭", + 2704: "α", + 2708: "ΞЭ", + 2724: "лп₥", + 2729: "ψ⁁₡₢", + 2753: "К", + 2790: "IJ⁕", + 2809: "ĎĐ", + 2818: "ÙÚÛÜŨŪŬŮŲ", + 2823: "ĤĦ", + 2828: "Ű", + 2835: "ÑŃŅŇŔŖŘ", + 2839: "Ð", + 2844: "⚥⚦", + 2847: "Δм", + 2851: "ΘΟО", + 2855: "ŵΠ", + 2864: "ÇĆĈĊČ", + 2868: "Ч", + 2880: "ΥΧХ", + 2884: "ΑА", + 2896: "λ", + 2905: "ъ", + 2908: "д", + 2924: "πω", + 2933: "ΗΝН", + 2945: "ИЙ", + 2950: "⚐⚑", + 2954: "Ω", + 3008: "ПЦ", + 3011: "ΛЛ", + 3048: "Д", + 3057: "Ψ", + 3060: "ΦФ", + 3068: "ÒÓÔÕÖŌŎŐ", + 3073: "У", + 3077: "ĜĞĠĢ", + 3093: "Σ", + 3130: "©®", + 3150: "₳", + 3153: "‿⁀", + 3199: "ж", + 3224: "Ø", + 3232: "Ъ", + 3252: "₩", + 3257: "ю", + 3261: "⁔", + 3273: "⁐", + 3277: "⚢", + 3290: "⁓", + 3301: "ы", + 3317: "₨", + 3363: "ΜМ", + 3380: "шщ", + 3396: "æ", + 3412: "⁇", + 3457: "⚩", + 3527: "◸◹◺◿", + 3543: "ШЩ", + 3572: "œ", + 3581: "Ы⚣⚤", + 3584: "―", + 3680: "ф⚊⚋⚌⚍⚎⚏", + 3703: "Ŵ", + 3724: "⁂", + 3785: "Œ", + 3806: "Ж", + 3818: "⚮", + 3834: "¬", + 3883: "Ю", + 3893: "Æ", + 3916: "‱", + 3920: "₧", + 3973: ( + "₯℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥" + "∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡" + "≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝" + "⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙" + "⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰" + "⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤" + "┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋▒▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▴▵▶▷" + "▸▹►▻▼▽▾▿◀◁◂◃◄◅◈◉◊◌◍◎◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷" + "☀☁☂☃☄☇☈☉☊☋☌☍☎☏☐☑☒☓☖☗☙☚☛☝☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂" + "♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽⚀" + "⚁⚂⚃⚄⚅⚆⚇⚈⚉✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷" + "✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻" + "❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻" + "➼➽➾、。〃〄〇〜〝〠〡〢〣〤〥〦〧〨〩〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘" + "㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝" + "㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'" + "()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc" + "defghijklmnopqrstuvwxyz{|}~⦅⦆¢£¬ ̄¦¥₩" + ), + 4096: "ſ⁜✀々〆〒〓〞〟", + 4146: "☜☞", + 4464: "⚯", + 5624: "◻◼◽◾☔☕☘♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱", + }, + "휴먼옛체": { + 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: ( + "¢£«»àáâãäåāăąćĉċčśŝşšγκλνсух〖〗〘〙〚〛・ヲァィゥェォャュョッーアイウエオカキクケコサシスセ" + "ソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᅠ" + ), + 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: ( + "¡¤§¨ª²³´¶¸¹º¼½¾¿ÆÐØÞßæðøþđĦħıIJijĸĿŀŁłʼnŊŋŒœŦŧˇː˘˙˚˛˝―†‡‥′″⁴ⁿ₁₂" + "₃₄℉ℓ№℡™ΩÅ⅓⅔⅛⅜⅝⅞↔↕↖↗↘↙⇒⇔∀∂∃∇∈∋∏∑√∝∞∠∥∧∨∩∪∫∬∮∴∵∼∽≒≠≡≤≥≪≫⊂⊃⊆⊇⊙⊥" + "⌒⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ─━│┃┌┍┎" + "┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊" + "╋▒▣▤▥▦▧▨▩▶▷▼▽◀◁◈◎◐◑☎☏☜☞♀♂♠♡♣♤♥♧♨♩♪♬♭✀、。〃々〆【】〒〓〔〕〞〟㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉" + "㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉿㎀㎁㎂㎃㎄㎈㎉㎊㎋㎌㎍㎎" + "㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊" + "㏏㏐㏓㏖㏘㏛㏜㏝!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST" + "UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¬ ̄¥₩" + ), + 1034: "Ю", + }, } diff --git a/tests/fixtures/hancom_saved/formfit_hft_faces_std_glyph_cells.hwpx b/tests/fixtures/hancom_saved/formfit_hft_faces_std_glyph_cells.hwpx new file mode 100644 index 00000000..01ac08e9 Binary files /dev/null and b/tests/fixtures/hancom_saved/formfit_hft_faces_std_glyph_cells.hwpx differ diff --git a/tests/test_form_fit_hancom_rules.py b/tests/test_form_fit_hancom_rules.py index ef436488..fec1e118 100644 --- a/tests/test_form_fit_hancom_rules.py +++ b/tests/test_form_fit_hancom_rules.py @@ -72,6 +72,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" +HFT_STD_GLYPH_CELLS = Path(__file__).parent / "fixtures" / "hancom_saved" / "formfit_hft_faces_std_glyph_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" @@ -233,6 +234,31 @@ def test_dodum_punctuation_and_the_exclamation_mark_break_where_hancom_breaks_th assert len(cells) == 144 +def test_latin_greek_cyrillic_and_symbols_in_hancom_font_faces_break_where_hancom_breaks_them() -> None: + # The same in the six faces Hancom ships in its own font format, for twenty glyphs beyond ASCII (Latin letters + # with marks, Greek, Cyrillic, quotation marks and symbols), which take the advances Hancom lays them out at. + # 한양견고딕's § at 30 pt is left out: it is laid out as in a face of 1024 units (659), which no advance in the + # face's 4096 gives at 10, 30 and 40 pt together. + doc = HwpxDocument.open(HFT_STD_GLYPH_CELLS) + cells = list(doc.oxml.sections[0].element.iter(f"{HP}tc")) + faces, checked = set(), 0 + 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 + if (style.glyph_face, text[0], points) == ("한양견고딕", "§", 30): + continue + 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")) + faces.add(style.glyph_face) + checked += 1 + assert estimate_lines(text, width, points, style) == hancom, (style.glyph_face, f"U+{ord(text[0]):04X}", points) + assert len(cells) == 480 and checked == 478 and len(faces) == 6 + + 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