diff --git a/README.md b/README.md index d82a847..d1422fd 100644 --- a/README.md +++ b/README.md @@ -90,3 +90,5 @@ OFL 라이선스의 폰트가 패치에 사용된 경우, 그 폰트가 웹폰 ~~일해라 쿼리~~ ps1 스크립트로 윈도우 설치 자동화와, 윈도우 호환성을 만듭니다(가능한가 의문) + +^ And how diff --git a/src/build/NanumSquareNeo/cacheBuilder.py b/src/build/NanumSquareNeo/cacheBuilder.py index 50d43f2..c58f15f 100644 --- a/src/build/NanumSquareNeo/cacheBuilder.py +++ b/src/build/NanumSquareNeo/cacheBuilder.py @@ -10,9 +10,9 @@ def getCachedFont(sourcePath,baseSize=550,weight=16): # 캐시된 파일을 확인하고 있으면 반환 filename = "assets/cache/NanumSquareNeoKr.cache_{}.base_{}.weight_{}.sfd".format(patchVersion,baseSize,weight) if os.path.exists(filename): - print("Found build cache [OK]") + print(" Found build cache [CACHE HIT]") return fontforge.open(filename) - print("Creating new build cache",end="") + print(" Creating new build cache",end="",flush=True) # 새로운 캐시용 폰트 생성 cache=fontforge.font() diff --git a/src/build/NanumSquareNeo/patcher.py b/src/build/NanumSquareNeo/patcher.py index 837b2c2..ffb5429 100644 --- a/src/build/NanumSquareNeo/patcher.py +++ b/src/build/NanumSquareNeo/patcher.py @@ -17,6 +17,7 @@ def pasteGlyphs(target,sourcePath,deselectOriginalGlyphs,baseSize=550,weightStr= weight = weightStrToNum.get(weightStr) ) + print(" Copying . . .",end="",flush=True) selectGlyphs.Clear(source) selectGlyphs.Clear(target) @@ -27,6 +28,7 @@ def pasteGlyphs(target,sourcePath,deselectOriginalGlyphs,baseSize=550,weightStr= selectGlyphs.Korean(target) deselectOriginalGlyphs(target) target.paste() + print(" [OK]") # 캐시 닫기 source.close() diff --git a/src/build/NerdFonts/__init__.py b/src/build/NerdFonts/__init__.py index af46eae..328c523 100644 --- a/src/build/NerdFonts/__init__.py +++ b/src/build/NerdFonts/__init__.py @@ -1,4 +1,5 @@ from .download import downloadPatcher from .download import isCached -from .download import nerdFonts_Download_Test \ No newline at end of file +from .download import nerdFonts_Download_Test +from .nerdfonts import build diff --git a/src/build/NerdFonts/nerdfonts.py b/src/build/NerdFonts/nerdfonts.py index e69de29..c21219f 100644 --- a/src/build/NerdFonts/nerdfonts.py +++ b/src/build/NerdFonts/nerdfonts.py @@ -0,0 +1,68 @@ +import argparse + +def callPatcher(font): + + + import sys + NerdFontPatcher = sys.modules["NerdFontPatcher"] + if not NerdFontPatcher: + import importlib.util + spec = importlib.util.spec_from_file_location("NerdFontPatcher", "assets/NerdFontPatcher_extract/fontPatcher.py") + NerdFontPatcher = importlib.util.module_from_spec(spec) + sys.modules["NerdFontPatcher"] = NerdFontPatcher + spec.loader.exec_module(NerdFontPatcher) + + # NerdFontPatcher.patch(font) + args = argparse.Namespace() + + # complete all options + args.complete = True + args.fontawesome = True + args.fontawesomeextension = True + args.fontlogos = True + args.octicons = True + args.codicons = True + args.powersymbols = True + args.pomicons = True + args.powerline = True + args.powerlineextra = True + args.material = True + args.weather = True + + args.windows = True + args.alsowindows = False + args.nonmono = False + args.progressbars = True + args.quiet = False + args.adjustLineHeight = True + # args.careful = True + args.careful = False + args.single = False + args.removeligatures = False + args.postprocess = False + args.configfile = False + args.custom = False + args.glyphdir = "assets/NerdFontPatcher_extract/src/glyphs/" + + patcher = NerdFontPatcher.font_patcher(args) + patcher.patch(font) + +selFlag = ("more","ranges","unicode") + +def postScript(font,deselectOriginalGlyphs,baseSize): + font.selection.none() + font.selection.select() + deselectOriginalGlyphs() + +def build(target,deselectOriginalGlyphs,NerdFontsAdjust=True,baseSize=550,weightStr="Regular"): + # 용량적 이유로 Regular 폰트에만 패치를 적용함 + if weightStr != "Regular": return + + print("Patching: NerdFonts") + + # NerdFonts 공식 패처를 수행함 + callPatcher(target) + + # 적절한 크기를 위해서 크기조절을 수행함 + # if NerdFontsAdjust: + # postScript(target,deselectOriginalGlyphs,baseSize) diff --git a/src/build/NotoMono/cacheBuilder.py b/src/build/NotoMono/cacheBuilder.py index ee25adb..3dc2528 100644 --- a/src/build/NotoMono/cacheBuilder.py +++ b/src/build/NotoMono/cacheBuilder.py @@ -16,9 +16,9 @@ def getCachedFont(sourcePath,EnabledItems,baseSize=550,weight=16): EnabledItems.get("CopyCJKCompatibilityIdeographs") and ".cid" or "", EnabledItems.get("Symbols") and ".sym" or "") if os.path.exists(filename): - print("Found build cache [OK]") + print(" Found build cache [CACHE HIT]") return fontforge.open(filename) - print("Creating new build cache",end="") + print(" Creating new build cache",end="",flush=True) # 새로운 캐시용 폰트 생성 cache=fontforge.font() @@ -29,18 +29,16 @@ def getCachedFont(sourcePath,EnabledItems,baseSize=550,weight=16): source.cidFlatten() source.encoding = 'UnicodeFull' if EnabledItems.get("JapaneseGlyphs"): selectGlyphs.JapaneseGlyphs(source) - if EnabledItems.get("Symbols"): selectGlyphs.Symbols(source) source.changeWeight(weight) # 굵기 변경 selectGlyphs.SelectByEnabledList(source,EnabledItems) # 한자 글립은 냥많아서 크기조절하면 끝이 안난다냥 # 너비 지정 + Utility.scale(font=source,targetScale=0.85) Utility.setWidthWithSavingPosition( font=source,targetWidth=baseSize*2 ) - Utility.scale(font=source,targetScale=0.85) - # 캐시에 붇여넣기 source.copy() selectGlyphs.SelectByEnabledList(cache,EnabledItems) diff --git a/src/build/NotoMono/patcher.py b/src/build/NotoMono/patcher.py index 3b02906..65eda0f 100644 --- a/src/build/NotoMono/patcher.py +++ b/src/build/NotoMono/patcher.py @@ -8,6 +8,7 @@ weightStrToNum = { def pasteGlyphs(target,sourcePath,deselectOriginalGlyphs,EnabledItems,baseSize=550,weightStr="Regular"): # 캐시된 소스를 읽어드림 + print("Patching: NotoMono") source = getCachedFont( sourcePath = sourcePath, baseSize = baseSize, @@ -15,6 +16,7 @@ def pasteGlyphs(target,sourcePath,deselectOriginalGlyphs,EnabledItems,baseSize=5 EnabledItems = EnabledItems ) + print(" Copying . . .",end="",flush=True) selectGlyphs.Clear(source) selectGlyphs.Clear(target) @@ -25,6 +27,7 @@ def pasteGlyphs(target,sourcePath,deselectOriginalGlyphs,EnabledItems,baseSize=5 selectGlyphs.SelectByEnabledList(target,EnabledItems) deselectOriginalGlyphs(target) target.paste() + print(" [OK]") # 캐시 닫기 source.close() diff --git a/src/build/NotoMono/select.py b/src/build/NotoMono/select.py index fd1e928..5841d72 100644 --- a/src/build/NotoMono/select.py +++ b/src/build/NotoMono/select.py @@ -52,14 +52,21 @@ def Symbols(font): font.selection.select(selFlag,0x3358,0x337A) font.selection.select(selFlag,0x3380,0x33FF) + # 로마 숫자 + # font.selection.select(selFlag,0x2160,0x217B) + font.selection.select(selFlag,0x2150,0x218F) # Number Forms + # Latin Ligature - font.selection.select(selFlag,0xFB00,0xFB04) + font.selection.select(selFlag,0xFB00,0xFB4F) # Alphabetic Presentation Forms # 특수기호/FULLWIDTH Latin - font.selection.select(selFlag,0xFE10,0xFF5A) - font.selection.select(selFlag,0xFFE0,0xFFEE) - font.selection.select(selFlag,0x1F100,0x1F1AC) - font.selection.select(selFlag,0x1F201,0x1F251) + font.selection.select(selFlag,0x2600,0x26FF) # Miscellaneous Symbols + font.selection.select(selFlag,0x2700,0x27BF) # Dingbats + font.selection.select(selFlag,0xFE10,0xFE1F) # Vertical Forms + # font.selection.select(selFlag,0xFFE0,0xFFEE) # (Without kr) Halfwidth and Fullwidth Forms + font.selection.select(selFlag,0xFF00,0xFFEF) # Halfwidth and Fullwidth Forms + font.selection.select(selFlag,0x1F100,0x1F1FF) # Enclosed Alphanumeric Supplement + font.selection.select(selFlag,0x1F200,0x1F2FF) # Enclosed Ideographic Supplement def SelectByEnabledList(target,EnabledItems): if EnabledItems.get("JapaneseGlyphs"): JapaneseGlyphs(target) diff --git a/src/build/build.py b/src/build/build.py index 37ab292..6acaac7 100644 --- a/src/build/build.py +++ b/src/build/build.py @@ -46,6 +46,9 @@ def build(config=None): for unicode in keepList: if unicode == -1: continue target.selection.select(deselectFlags,unicode) + def updateOriginalGlyphs(): + nonlocal keepList + keepList = [i.unicode for i in kawaii.selection.byGlyphs] # 모든 글리프를 붇여넣을 수 있도록 인코딩을 utf full 로 변경 kawaii.encoding = 'UnicodeFull' @@ -64,6 +67,7 @@ def build(config=None): target=kawaii,baseSize=baseSize,weightStr="Regular", sourcePath=nanumSquareNeo, deselectOriginalGlyphs = deselectOriginalGlyphs) + updateOriginalGlyphs() # 일어 글리프 혹은 한자 글리프 추가 if notoMono: @@ -76,13 +80,19 @@ def build(config=None): "CJKCompatibilityIdeographs": config.get("CopyCJKCompatibilityIdeographs") or False, "Symbols": config.get("CopySymbols") or False, }, - target=kawaii,baseSize=550, + target=kawaii,baseSize=baseSize, sourcePath=notoMono, deselectOriginalGlyphs = deselectOriginalGlyphs) + updateOriginalGlyphs() # NerdFonts 패치 적용 - # if config.get("NerdFonts"): - # nerdFontsPatcherPath = NerdFontsLoader.downloadPatcher() + if config.get("NerdFonts"): + NerdFontsLoader.build( + target=kawaii, + NerdFontsAdjust=config.get("NerdFontsAdjust") or False, + baseSize=baseSize, + weightStr="Regular", + deselectOriginalGlyphs = deselectOriginalGlyphs) # 생성 if not os.path.exists("out"): os.mkdir("out")