import sys

sys.path.insert(0,"%s/scripts/lib"%BASEDIR)

from robofab.world import RFont
from fontTools.misc.transform import Transform
from fontbuild.Build import FontProject,swapGlyphs,transformGlyphMembers
from fontbuild.mix import Mix,Master
from fontbuild.italics import condenseGlyph, transformFLGlyphMembers

# Masters

rg = Master("%s/src/v2/Roboto_Regular.vfb"%BASEDIR)
bd = Master("%s/src/v2/Roboto_Bold.vfb"%BASEDIR)
th = Master("%s/src/v2/Roboto_Thin.vfb"%BASEDIR)

# build condensed masters

condensed = Font(th.font)

lessCondensed = "plusminus \
bracketleft bracketright dieresis \
macron percent \
multiply degree at i j zero one two \
three four five six seven eight nine braceright braceleft".split()
uncondensed = "tonos breve acute grave quotesingle quotedbl asterisk \
period currency registered copyright bullet ring degree dieresis comma bar brokenbar dotaccent \
dotbelow colon semicolon uniFFFC uniFFFD uni0488 uni0489 ringbelow estimated".split()
moreCondensed = "z Z M W A V".split()


def condenseFont(font, scale=.8, stemWidth=185):
    f = RFont(font)
    
    xscale = scale
    CAPS = "A B C.cn D.cn E F G.cn H I J K L M N O.cn P Q.cn R S T U.cn V W X Y Z one two three four five six seven eight nine zero".split()
    LC = "a.cn b.cn c.cn d.cn e.cn f g.cn h i j k l m n o.cn p.cn q.cn r s t u v w x y z".split()
    # for g in [f[name] for name in LC]:
    for g in f:
        if (len(g) > 0):
            # print g.name
            if g.name in lessCondensed:
                scale = xscale * 1.1
            if g.name in uncondensed:
                continue
            if g.name in moreCondensed:
                scale = xscale * .90
            # g2 = condenseGlyph(g, xscale)
            # g.clear()
            # g2.drawPoints(g.getPointPen())
        m = Transform(xscale, 0, 0, 1, 20, 0)
        g.transform(m)
        transformFLGlyphMembers(g,m,transformAnchors=False)
        g.width += 40
    return f


proj = FontProject(rg.font, BASEDIR, "res/roboto.cfg", th.ffont)
proj.incrementBuildNumber()

# FAMILYNAME = "Roboto 2 DRAFT"
# FAMILYNAME = "Roboto2"
FAMILYNAME = "Roboto"

proj.generateFont(th.font,"%s/Thin/Regular/Th"%FAMILYNAME)
proj.generateFont(Mix([th,rg], 0.45),"%s/Light/Regular/Lt"%FAMILYNAME)
proj.generateFont(Mix([th,rg], Point(0.90, 0.92)),"%s/Regular/Regular/Rg"%FAMILYNAME)
proj.generateFont(Mix([rg,bd], 0.35),"%s/Medium/Regular/Lt"%FAMILYNAME)
proj.generateFont(Mix([rg,bd], Point(0.73, 0.73)),"%s/Bold/Bold/Rg"%FAMILYNAME)
proj.generateFont(Mix([rg,bd], Point(1.125, 1.0)),"%s/Black/Bold/Bk"%FAMILYNAME)

proj.generateFont(th.font,"%s/Thin Italic/Italic/Th"%FAMILYNAME, italic=True, stemWidth=80)
proj.generateFont(Mix([th,rg], 0.45),"%s/Light Italic/Italic/Lt"%FAMILYNAME, italic=True, stemWidth=120)
proj.generateFont(Mix([th,rg], Point(0.90, 0.92)),"%s/Italic/Italic/Rg"%FAMILYNAME, italic=True, stemWidth=185)
proj.generateFont(Mix([rg,bd], 0.35),"%s/Medium Italic/Bold Italic/Lt"%FAMILYNAME, italic=True, stemWidth=230)
proj.generateFont(Mix([rg,bd], Point(0.73, 0.73)),"%s/Bold Italic/Bold Italic/Rg"%FAMILYNAME, italic=True, stemWidth=290)
proj.generateFont(Mix([rg,bd], Point(1.125, 1.0)),"%s/Black Italic/Bold Italic/Bk"%FAMILYNAME, italic=True, stemWidth=290)

thcn1 = Master(condenseFont(Font(th.font), .84, 40).naked())
cn1 = Master( rg.ffont.addDiff(thcn1.ffont, th.ffont))
bdcn1 = Master( bd.ffont.addDiff(thcn1.ffont, th.ffont))

proj.generateFont(Mix([thcn1,cn1], Point(0.45, 0.47)), "%s Condensed/Light/Regular/Lt"%FAMILYNAME, swapSuffixes=[".cn"])
proj.generateFont(Mix([thcn1,cn1], Point(0.9, 0.92)), "%s Condensed/Regular/Regular/Rg"%FAMILYNAME, swapSuffixes=[".cn"])
proj.generateFont(Mix([cn1,bdcn1], Point(0.75, 0.75)), "%s Condensed/Bold/Bold/Rg"%FAMILYNAME, swapSuffixes=[".cn"])

proj.generateFont(Mix([thcn1,cn1], Point(0.45, 0.47)), "%s Condensed/Light Italic/Italic/Lt"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=120)
proj.generateFont(Mix([thcn1,cn1], Point(0.9, 0.92)), "%s Condensed/Italic/Italic/Rg"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=185)
proj.generateFont(Mix([cn1,bdcn1], Point(0.75, 0.75)), "%s Condensed/Bold Italic/Bold Italic/Rg"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=240)

for i in range(len(fl)):
    fl.Close(0)
    
sys.exit(0)
