init comomit

master
Qwreey 2023-01-19 17:37:40 +09:00
parent 992fe96f32
commit 28d1ac3e9f
17 changed files with 11723 additions and 0 deletions

11494
KawaiiMonoRegular.sfd Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

3
build.py Normal file
View File

@ -0,0 +1,3 @@
from src.build import build
import config
if __name__ == "__main__": build(config.config)

81
config.py Normal file
View File

@ -0,0 +1,81 @@
# TODO: 블록 글자 추가
# TODO: 기울임꼴(ah 같은 특수 기울임도) 추가
config = {
# -------------------------------------------
# Base Settings
# -------------------------------------------
# TODO: 이 설정은 아직 동작하지 않습니다
# 출력 파일의 이름을 지정합니다.
# Array 형태로 여러 이름을 추가할 수 있습니다
# 필요한 경우 otf 와 같은 다른 확장자를
# 사용할 수도 있습니다
"OutputNames": {
"Bold": ["KawaiiPatched.ttf"],
"Regular": [""],
},
# TODO: 이 설정은 아직 동작하지 않습니다
# 일반적인 글자 (예: a) 의 너비입니다.
# 작은 화면에 더많은 정보를 담아내려면
# 이 값을 줄이세요. 단 스캐일이 조정되지
# 않습니다
"FontBaseWidth": 550,
# TODO: 이 설정은 아직 동작하지 않습니다
# 폰트의 X 축 스캐일 조정입니다.
# 폰트의 width 를 줄이거나 늘렸을 때
# 이 값을 변경하여 가로로 늘리거나
# 작게 줄일 수 있습니다
"FontScaleX": 1,
# -------------------------------------------
# Glyphs and Features
# -------------------------------------------
# 한글 글리프를 나눔 스퀘어 네오 폰트에서
# 복사할 지에 대한 여부입니다
# 폰트 용량이 매우 커집니다!!
"CopyKoreanGlyphs": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# 노토 산스 모노에서 가타카나/히라가나
# 글리프를 복사할 지에 대한 여부입니다
# 한자는 포함하지 않습니다
"CopyJapaneseGlyphs": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# 노토 산스 모노에서 CJK 공용 한자 글리프를
# 복사할 지에 대한 여부입니다.
# 폰트 용량이 매우 커집니다!!
# 웹용 폰트의 경우 끄는것을 추천합니다
"CopyCJKUnifiedIdeographs": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# 라틴 글리프를 Hack 폰트에서 더 가져옵니다
# (성조 표시된 라틴, ...)
"CopyLatinExtra": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# Nerd Fonts 패치를 적용할지에 대한
# 여부입니다. 폰트 용량이 매우 커집니다!!
# 웹용 폰트의 경우 끄는것을 추천합니다
"NerdFonts": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# Nerd Fonts 패치에 발견되는 크기 이슈를
# 해결하기 위해 크기조절이 이루워집니다
# Nerd Fonts 패치를 활성화 한 경우에만
# 이 값이 사용됩니다.
"NerdFontsAdjust": True,
# TODO: 이 설정은 아직 동작하지 않습니다
# Liga (합자) 를 추가할 지에 대한 여부입니다
# 활성화시 <!-- 와 같은 문자를 합쳐줍니다
# Vscode 의 경우 설정에
# "editor.fontLigatures": true,
# 가 되어있어야 표시됩니다.
"Liga": True,
}

3
install.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/bash
python3 build.py
cp kawaiiPatched.ttf ~/.local/share/fonts/KawaiiMonoRegular.ttf

BIN
kawaiiPatched.ttf Normal file

Binary file not shown.

1
requirement.txt Normal file
View File

@ -0,0 +1 @@
wget

2
src/KawaiiMono.py Normal file
View File

@ -0,0 +1,2 @@
def getFontPath():
return "KawaiiMonoRegular.sfd"

47
src/NanumSquareNeo.py Normal file
View File

@ -0,0 +1,47 @@
from . import wgetHandler
import os
import zipfile
import shutil
import math
link_NanumSquareNeo = "https://campaign.naver.com/nanumsquare_neo/download/NaverNanumSquareNeo.zip"
# 폰트 다운로드와 열기
# 배포 방식이 zip 으로 배포이기 때문에 zipfile 라이브러리로
# 다운로드 후 언팩함
def getFontPath():
if not os.path.exists("assets"): os.mkdir("assets")
if not os.path.exists("assets/NanumSquareNeoKr.ttf"):
if not os.path.exists("assets/NanumSquareNeoKr.zip"):
wgetHandler.download(link_NanumSquareNeo,"assets/NanumSquareNeoKr.zip")
print("Unzipping NanumSquareNeoKr.zip",end="")
with zipfile.ZipFile("assets/NanumSquareNeoKr.zip", 'r') as zip_ref:
extractName = zip_ref.extract("NaverNanumSquareNeo/TTF/NanumSquareNeo-cBd.ttf","assets/NanumSquareNeoKr.extract")
os.rename(extractName,"assets/NanumSquareNeoKr.ttf")
shutil.rmtree('assets/NanumSquareNeoKr.extract')
print(" [OK]")
return "assets/NanumSquareNeoKr.ttf"
def pasteGlyphs(target,source,baseSize=550):
def select(font):
font.selection.none()
font.selection.select(("more","ranges","unicode"),0x3131,0x32BF) # ㄱ ~ ㊿
font.selection.select(("more","ranges","unicode"),0xAC00,0xD7A3) # 가 ~ 힣
select(source)
# 넓은 글자 크기 (한글에 모두 적용)
wideWidth = baseSize*2
for glyph in source.selection.byGlyphs:
widthDiff = wideWidth-glyph.width # 타겟 너비와 얼마나 크기 차이가 나는지
sideAdjust = widthDiff/2 # 좌우 사이드 조정해야하는 정도
glyph.left_side_bearing = int(glyph.left_side_bearing + math.floor(sideAdjust)) # 좌우 베어링을 조정함
glyph.right_side_bearing = int(glyph.right_side_bearing + math.ceil(sideAdjust))
glyph.width = wideWidth # 타겟 너비로 정확하게 설정
# 타겟으로 글리프 복사
source.copy()
select(target)
target.paste()
if __name__ == "__main__":
getFontPath()

38
src/NotoMono.py Normal file
View File

@ -0,0 +1,38 @@
from . import wgetHandler
import os
github_NotoSansMonoCJKkr = "https://github.com/googlefonts/noto-cjk/raw/main/Sans/Mono/NotoSansMonoCJKkr-Regular.otf"
# 폰트 다운로드와 열기
def getFontPath():
if not os.path.exists("assets"): os.mkdir("assets")
if not os.path.exists("assets/NotoMonoCJKkr.otf"):
wgetHandler.download(github_NotoSansMonoCJKkr,"assets/NotoMonoCJKkr.otf")
return "assets/NotoMonoCJKkr.otf"
def pasteGlyphs(target,source,baseSize=550):
source.cidFlatten()
def select(font):
font.selection.none()
font.selection.select(("more","ranges","unicode"),0x3131,0x32BF) # ㄱ ~ ㊿
font.selection.select(("more","ranges","unicode"),0xAC00,0xD7A3) # 가 ~ 힣
select(source)
# 넓은 글자 크기 (한글에 모두 적용)
wideWidth = baseSize*2
for glyph in source.selection.byGlyphs:
widthDiff = wideWidth-glyph.width # 타겟 너비와 얼마나 크기 차이가 나는지
sideAdjust = widthDiff/2 # 좌우 사이드 조정해야하는 정도
glyph.left_side_bearing = int(glyph.left_side_bearing + math.floor(sideAdjust)) # 좌우 베어링을 조정함
glyph.right_side_bearing = int(glyph.right_side_bearing + math.ceil(sideAdjust))
glyph.width = wideWidth # 타겟 너비로 정확하게 설정
# 타겟으로 글리프 복사
source.copy()
select(target)
target.paste()
if __name__ == "__main__":
getFontPath()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

39
src/build.py Normal file
View File

@ -0,0 +1,39 @@
import fontforge
from . import NanumSquareNeo as NanumSquareNeoLoader
from . import NotoMono as NotoMonoLoader
from . import KawaiiMono as KawaiiMonoLoader
def build(config=None):
# 메인 폰트 불러오기
kawaii = fontforge.open(
KawaiiMonoLoader.getFontPath())
# 모든 글리프를 붇여넣을 수 있도록 인코딩을 utf full 로 변경
kawaii.encoding = 'UnicodeFull'
# 한글 글리프 붇여넣기
if config.CopyKoreanGlyphs:
# 나눔 스퀘어 네오 다운로드/불러오기
nanumSquareNeo = fontforge.open(
NanumSquareNeoLoader.getFontPath())
# 글리프 붇여넣기
NanumSquareNeoLoader.pasteGlyphs(
target=kawaii,baseSize=550,
source=nanumSquareNeo)
if config.CopyJPGlyphs or config.Copy:
# 노토 모노 다운로드/불러오기
notoMono = fontforge.open(
NotoMonoLoader.getFontPath())
# 생성
kawaii.generate("kawaiiPatched.ttf")
# 파일 닫기
notoMono.close()
nanumSquareNeo.close()
kawaii.close()
if __name__ == "__main__": build()

15
src/wgetHandler.py Normal file
View File

@ -0,0 +1,15 @@
import wget
import math
def bar_custom(current, total, width=80):
width=30
avail_dots = width-2
shaded_dots = int(math.floor(float(current) / total * avail_dots))
percent_bar = '[' + ''*shaded_dots + ' '*(avail_dots-shaded_dots) + ']'
progress = "%d%% %s [%d / %d]" % (current / total * 100, percent_bar, current, total)
return progress
def download(url, fileName):
print("Downloading resource to "+fileName+" ...")
wget.download(url, fileName, bar=bar_custom)
print(" [OK]")