2013-11-15 5 views
2

저는 fontforge Python 라이브러리/래퍼를 사용하여 실험 중이며 여러 문자 대체가 작동하지 않는 것 같습니다. 어쩌면 당신은 친구들과 내가 잘못한 것을 지적 할 수 있습니까?FontForge Python 확장 : 작동하도록 gsub_multiple 검색을 할 수 없습니다.

기본적으로 "ABC"를 "a"의 문자 표현으로 대체하려고 시도하고 있지만, 일단 이것이 작동하면 적절한 하위 집합으로이를 확장하려고합니다.

from random import randint 
from datetime import datetime 

def add_pixel(pen, x, y, scale = 100): 
    pen.moveTo(((x + 0) * scale, (y + 0) * scale)) 
    pen.lineTo(((x + 0) * scale, (y + 1) * scale)) 
    pen.lineTo(((x + 1) * scale, (y + 1) * scale)) 
    pen.lineTo(((x + 1) * scale, (y + 0) * scale)) 
    pen.closePath() 

def add_character(font, code, name): 
    if not name in list(font): 
     font.createChar(code, name) 

    pen = font[code].glyphPen() 
    for i in range(1, 15): 
     add_pixel(pen, randint(0, 15), randint(0, 15), 100 * 10/15) 

try: 
    import fontforge 
except Exception, e: 
    raise 
else: 
    font = fontforge.font() 
    font.familyname = "font" 
    font.fontname = "font x15" 
    font.fullname = "font x15" 
    font.version = datetime.now().strftime("%Y-%m-%d %H:%M") 

    # lower 
    for c in range(0x61, 0x61 + 26): 
     add_character(font, c, unichr(c)) 

    # upper 
    for c in range(0x41, 0x41 + 26): 
     add_character(font, c, unichr(c)) 

    font.addLookup("gsub", "gsub_multiple",(), (("dlig",(("latn",("dflt")),)),)) 
    font.addLookupSubtable("gsub", "gsub_n") 

    glyph = font["a"] 
    glyph.addPosSub("gsub_n", ("A", "B", "C")) 

    # font.save("font.x15.sfd") 
    font.generate("font.x15.otf", flags=("PfEd-lookups", "opentype")) 
finally: 
    pass 

답변

0

룩업 유형이 기능과 일치하지 않습니다.

# Try "gsub_ligature" as type. 
font.addLookup("gsub", "gsub_ligature",(), (("dlig",(("latn",("dflt")),)),)) 

팁 : 당신은 기능 파일을 생성하여 기능을 검사 할 수 있습니다 : 첫 번째 줄은 마법처럼 일했다

font.generateFeatureFile("features.fea") 
+0

. 두 번째는하지 않았지만 지금은 확장 할 수있는 작업 상태를 가지고 있다고 생각합니다. 감사! – user2996332

+0

'subs'(subscript) 기능이 관련이 없으므로 두 번째 줄을 제거했습니다. 천만에요! – allcaps