Adding nerd fonts preset

master
Qwreey 2023-03-17 02:35:20 +09:00
parent d87dfa9ee2
commit 7eeb30a086
No known key found for this signature in database
GPG Key ID: 01D9B192033CF43F
9 changed files with 107 additions and 16 deletions

View File

@ -90,3 +90,5 @@ OFL 라이선스의 폰트가 패치에 사용된 경우, 그 폰트가 웹폰
~~일해라 쿼리~~
ps1 스크립트로 윈도우 설치 자동화와, 윈도우 호환성을 만듭니다(가능한가 의문)
^ And how

View File

@ -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()

View File

@ -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()

View File

@ -1,4 +1,5 @@
from .download import downloadPatcher
from .download import isCached
from .download import nerdFonts_Download_Test
from .download import nerdFonts_Download_Test
from .nerdfonts import build

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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")