diff --git a/.esformatter b/.esformatter deleted file mode 100644 index 519807221..000000000 --- a/.esformatter +++ /dev/null @@ -1,461 +0,0 @@ -{ - "indent" : { - "ReturnStatement": ">=1", - "value": "\t", - "alignComments": true, - "ArrayExpression": 1, - "ArrayPattern": 1, - "ArrowFunctionExpression": 1, - "AssignmentExpression": 1, - "AssignmentExpression.BinaryExpression": 1, - "AssignmentExpression.LogicalExpression": 1, - "AssignmentExpression.UnaryExpression": 1, - "CallExpression": 1, - "CallExpression.BinaryExpression": 1, - "CallExpression.LogicalExpression": 1, - "CallExpression.UnaryExpression": 1, - "CatchClause": 1, - "ConditionalExpression": 1, - "CommentInsideEmptyBlock": 1, - "ClassDeclaration": 1, - "DoWhileStatement": 1, - "ForInStatement": 1, - "ForOfStatement": 1, - "ForStatement": 1, - "FunctionDeclaration": 1, - "FunctionExpression": 1, - "IfStatement": 1, - "MemberExpression": 1, - "MultipleVariableDeclaration": 1, - "NewExpression": 1, - "ObjectExpression": 1, - "ObjectExpression.BinaryExpression": 1, - "ObjectExpression.LogicalExpression": 1, - "ObjectExpression.UnaryExpression": 1, - "ObjectPattern": 1, - "ParameterList": 1, - "SingleVariableDeclaration": 0, - "SwitchCase": 1, - "SwitchStatement": 1, - "TopLevelFunctionBlock": 1, - "TryStatement": 1, - "VariableDeclaration.BinaryExpression": 1, - "VariableDeclaration.LogicalExpression": 1, - "VariableDeclaration.UnaryExpression": 1, - "WhileStatement": 1 - }, - - "lineBreak" : { - "value" : "\n", - - "before" : { - "AssignmentExpression" : -1, - "AssignmentOperator": -1, - "AssignmentPattern" : 0, - "ArrayPatternOpening": 0, - "ArrayPatternClosing": 0, - "ArrayPatternComma": 0, - "ArrowFunctionExpressionArrow": 0, - "ArrowFunctionExpressionOpeningBrace": 0, - "ArrowFunctionExpressionClosingBrace": "<=1", - "BlockStatement" : -1, - "BreakKeyword": ">=1", - "CallExpression" : -1, - "CallExpressionOpeningParentheses" : 0, - "CallExpressionClosingParentheses" : -1, - "ClassDeclaration" : ">=1", - "ClassDeclarationOpeningBrace" : 0, - "ClassDeclarationClosingBrace" : "<=1", - "ConditionalExpression" : ">=1", - "CatchOpeningBrace" : 0, - "CatchClosingBrace" : "<=1", - "CatchKeyword": 0, - "DeleteOperator" : -1, - "DoWhileStatement" : -1, - "DoWhileStatementOpeningBrace" : 0, - "DoWhileStatementClosingBrace" : "<=1", - "EndOfFile" : 1, - "EmptyStatement" : -1, - "FinallyKeyword" : -1, - "FinallyOpeningBrace" : 0, - "FinallyClosingBrace" : "<=1", - "ForInStatement" : -1, - "ForInStatementExpressionOpening" : -1, - "ForInStatementExpressionClosing" : -1, - "ForInStatementOpeningBrace" : 0, - "ForInStatementClosingBrace" : "<=1", - "ForOfStatement" : ">=1", - "ForOfStatementExpressionOpening" : 0, - "ForOfStatementExpressionClosing" : 0, - "ForOfStatementOpeningBrace" : 0, - "ForOfStatementClosingBrace" : "<=1", - "ForStatement" : -1, - "ForStatementExpressionOpening" : -1, - "ForStatementExpressionClosing" : -1, - "ForStatementOpeningBrace" : 0, - "ForStatementClosingBrace" : "<=1", - "FunctionExpression" : -1, - "FunctionExpressionOpeningBrace" : 0, - "FunctionExpressionClosingBrace" : "<=1", - "FunctionDeclaration" : -1, - "FunctionDeclarationOpeningBrace" : 0, - "FunctionDeclarationClosingBrace" : "<=1", - "IIFEClosingParentheses" : 0, - "IfStatement" : -1, - "IfStatementOpeningBrace" : 0, - "IfStatementClosingBrace" : "<=1", - "ElseIfStatement" : -1, - "ElseIfStatementOpeningBrace" : 0, - "ElseIfStatementClosingBrace" : "<=1", - "ElseStatement" : 0, - "ElseStatementOpeningBrace" : 0, - "ElseStatementClosingBrace" : "<=1", - "LogicalExpression" : -1, - "MethodDefinition": ">=1", - "MemberExpressionOpening": 0, - "MemberExpressionClosing": 0, - "MemberExpressionPeriod": -1, - "ObjectExpressionClosingBrace" : -1, - "ObjectPatternOpeningBrace": 0, - "ObjectPatternClosingBrace": 0, - "ObjectPatternComma": 0, - "Property" : -1, - "PropertyValue" : 0, - "ReturnStatement" : -1, - "SwitchOpeningBrace" : 0, - "SwitchClosingBrace" : -1, - "ThisExpression" : -1, - "ThrowStatement" : -1, - "TryKeyword": -1, - "TryOpeningBrace" : 0, - "TryClosingBrace" : "<=1", - "VariableName" : -1, - "VariableValue" : -1, - "VariableDeclaration" : -1, - "VariableDeclarationSemiColon": -1, - "VariableDeclarationWithoutInit" : -1, - "WhileStatement" : -1, - "WhileStatementOpeningBrace" : 0, - "WhileStatementClosingBrace" : "<=1" - }, - - "after" : { - "AssignmentExpression" : -1, - "AssignmentOperator" : -1, - "AssignmentPattern" : 0, - "ArrayPatternOpening": 0, - "ArrayPatternClosing": 0, - "ArrayPatternComma": 0, - "ArrowFunctionExpressionArrow": 0, - "ArrowFunctionExpressionOpeningBrace": ">=1", - "ArrowFunctionExpressionClosingBrace": -1, - "BlockStatement" : -1, - "BreakKeyword": -1, - "CallExpression" : -1, - "CallExpressionOpeningParentheses" : -1, - "CallExpressionClosingParentheses" : -1, - "ClassDeclaration" : ">=1", - "ClassDeclarationOpeningBrace" : ">=1", - "ClassDeclarationClosingBrace" : ">=1", - "CatchOpeningBrace" : "<=1", - "CatchClosingBrace" : -1, - "CatchKeyword": 0, - "ConditionalExpression" : -1, - "DeleteOperator" : -1, - "DoWhileStatement" : -1, - "DoWhileStatementOpeningBrace" : "<=1", - "DoWhileStatementClosingBrace" : -1, - "EmptyStatement" : 1, - "FinallyKeyword" : -1, - "FinallyOpeningBrace" : "<=2", - "FinallyClosingBrace" : -1, - "ForInStatement" : -1, - "ForInStatementExpressionOpening" : -1, - "ForInStatementExpressionClosing" : -1, - "ForInStatementOpeningBrace" : "<=1", - "ForInStatementClosingBrace" : -1, - "ForOfStatement" : -1, - "ForOfStatementExpressionOpening" : "<2", - "ForOfStatementExpressionClosing" : -1, - "ForOfStatementOpeningBrace" : ">=1", - "ForOfStatementClosingBrace" : ">=1", - "ForStatement" : -1, - "ForStatementExpressionOpening" : -1, - "ForStatementExpressionClosing" : -1, - "ForStatementOpeningBrace" : "<=1", - "ForStatementClosingBrace" : -1, - "FunctionExpression" : -1, - "FunctionExpressionOpeningBrace" : "<=1", - "FunctionExpressionClosingBrace" : -1, - "FunctionDeclaration" : -1, - "FunctionDeclarationOpeningBrace" : "<=1", - "FunctionDeclarationClosingBrace" : -1, - "IIFEOpeningParentheses" : 0, - "IfStatement" : -1, - "IfStatementOpeningBrace" : "<=1", - "IfStatementClosingBrace" : -1, - "ElseIfStatement" : -1, - "ElseIfStatementOpeningBrace" : "<=1", - "ElseIfStatementClosingBrace" : -1, - "ElseStatement" : -1, - "ElseStatementOpeningBrace" : "<=1", - "ElseStatementClosingBrace" : -1, - "LogicalExpression" : -1, - "MethodDefinition": ">=1", - "MemberExpressionOpening": 0, - "MemberExpressionClosing" : ">=0", - "MemberExpressionPeriod": 0, - "ObjectExpressionOpeningBrace" : "<=1", - "ObjectPatternOpeningBrace": 0, - "ObjectPatternClosingBrace": 0, - "ObjectPatternComma": 0, - "Property" : -1, - "PropertyName" : 0, - "ReturnStatement" : -1, - "SwitchOpeningBrace" : "<=1", - "SwitchClosingBrace" : -1, - "SwitchCaseColon": ">=1", - "ThisExpression" : -1, - "ThrowStatement" : -1, - "TryKeyword": -1, - "TryOpeningBrace" : "<=1", - "TryClosingBrace" : -1, - "VariableValue" : -1, - "VariableDeclaration" : -1, - "VariableDeclarationSemiColon" : ">=1", - "WhileStatement" : -1, - "WhileStatementOpeningBrace" : "<=1", - "WhileStatementClosingBrace" : -1 - } - }, - - - "whiteSpace" : { - "value" : " ", - "removeTrailing" : 1, - - "before" : { - "AssignmentPattern" : 1, - "ArrayExpressionOpening" : -1, - "ArrayExpressionClosing" : -1, - "ArrayExpressionComma" : -1, - "ArrayPatternOpening": 1, - "ArrayPatternClosing": 0, - "ArrayPatternComma": 0, - "ArrowFunctionExpressionArrow": 1, - "ArrowFunctionExpressionOpeningBrace": 1, - "ArrowFunctionExpressionClosingBrace": 0, - "ArgumentComma" : -1, - "ArgumentList" : 0, - "AssignmentOperator" : 1, - "BinaryExpression": -1, - "BinaryExpressionOperator" : 1, - "BlockComment" : 1, - "CallExpression" : -1, - "CallExpressionOpeningParentheses" : 0, - "CallExpressionClosingParentheses" : -1, - "CatchParameterList" : 0, - "CatchOpeningBrace" : 1, - "CatchClosingBrace" : 1, - "CatchKeyword" : 1, - "CommaOperator" : 0, - "ClassDeclarationOpeningBrace" : 1, - "ClassDeclarationClosingBrace" : 1, - "ConditionalExpressionConsequent" : 1, - "ConditionalExpressionAlternate" : 1, - "DoWhileStatementOpeningBrace" : 1, - "DoWhileStatementClosingBrace" : 1, - "DoWhileStatementConditional" : 1, - "EmptyStatement" : 0, - "ExpressionClosingParentheses": 0, - "FinallyKeyword" : -1, - "FinallyOpeningBrace" : 1, - "FinallyClosingBrace" : 1, - "ForInStatement" : 1, - "ForInStatementExpressionOpening" : 1, - "ForInStatementExpressionClosing" : 0, - "ForInStatementOpeningBrace" : 1, - "ForInStatementClosingBrace" : 1, - "ForOfStatement" : 1, - "ForOfStatementExpressionOpening" : 1, - "ForOfStatementExpressionClosing" : 0, - "ForOfStatementOpeningBrace" : 1, - "ForOfStatementClosingBrace" : 1, - "ForStatement" : 1, - "ForStatementExpressionOpening" : 1, - "ForStatementExpressionClosing" : 0, - "ForStatementOpeningBrace" : 1, - "ForStatementClosingBrace" : -1, - "ForStatementSemicolon" : 0, - "FunctionDeclarationOpeningBrace" : 1, - "FunctionDeclarationClosingBrace" : 1, - "FunctionExpressionOpeningBrace" : 1, - "FunctionExpressionClosingBrace" : 1, - "FunctionGeneratorAsterisk": 1, - "FunctionName" : 1, - "IIFEClosingParentheses" : 0, - "IfStatementConditionalOpening" : 1, - "IfStatementConditionalClosing" : 0, - "IfStatementOpeningBrace" : 1, - "IfStatementClosingBrace" : -1, - "ModuleSpecifierClosingBrace": 1, - "ElseStatementOpeningBrace" : 1, - "ElseStatementClosingBrace" : -1, - "ElseIfStatementOpeningBrace" : 1, - "ElseIfStatementClosingBrace" : -1, - "LineComment" : 1, - "LogicalExpressionOperator" : 1, - "MemberExpressionOpening": 0, - "MemberExpressionClosing" : -1, - "MemberExpressionPeriod": 0, - "ObjectExpressionOpeningBrace": -1, - "ObjectExpressionClosingBrace": -1, - "ObjectPatternOpeningBrace": -1, - "ObjectPatternClosingBrace": -1, - "ObjectPatternComma": 0, - "Property" : -1, - "PropertyValue" : 1, - "ParameterComma" : -1, - "ParameterList" : 0, - "SwitchDiscriminantOpening" : 1, - "SwitchDiscriminantClosing" : -1, - "SwitchCaseColon": 0, - "ThrowKeyword": -1, - "TryKeyword": -1, - "TryOpeningBrace" : 1, - "TryClosingBrace" : -1, - "UnaryExpressionOperator": -1, - "VariableName" : -1, - "VariableValue" : 1, - "VariableDeclarationSemiColon" : 0, - "WhileStatementConditionalOpening" : -1, - "WhileStatementConditionalClosing" : -1, - "WhileStatementOpeningBrace" : -1, - "WhileStatementClosingBrace" : -1 - }, - - "after" : { - "AssignmentPattern" : 1, - "ArrayExpressionOpening" : -1, - "ArrayExpressionClosing" : -1, - "ArrayExpressionComma" : 1, - "ArrayPatternOpening": 0, - "ArrayPatternClosing": 1, - "ArrayPatternComma": 1, - "ArrowFunctionExpressionArrow": 1, - "ArrowFunctionExpressionOpeningBrace": 0, - "ArrowFunctionExpressionClosingBrace": 0, - "ArgumentComma" : 1, - "ArgumentList" : 0, - "AssignmentOperator" : 1, - "BinaryExpression": -1, - "BinaryExpressionOperator" : 1, - "BlockComment" : -1, - "CallExpression" : -1, - "CallExpressionOpeningParentheses" : -1, - "CallExpressionClosingParentheses" : -1, - "CatchParameterList" : -1, - "CatchOpeningBrace" : -1, - "CatchClosingBrace" : -1, - "CatchKeyword" : -1, - "ClassDeclarationOpeningBrace" : 1, - "ClassDeclarationClosingBrace" : 1, - "CommaOperator" : 1, - "ConditionalExpressionConsequent" : 1, - "ConditionalExpressionTest" : 1, - "DoWhileStatementOpeningBrace" : -1, - "DoWhileStatementClosingBrace" : -1, - "DoWhileStatementBody" : -1, - "EmptyStatement" : -1, - "ExpressionOpeningParentheses" : 0, - "FinallyKeyword" : -1, - "FinallyOpeningBrace" : -1, - "FinallyClosingBrace" : -1, - "ForInStatement" : -1, - "ForInStatementExpressionOpening" : -1, - "ForInStatementExpressionClosing" : -1, - "ForInStatementOpeningBrace" : -1, - "ForInStatementClosingBrace" : -1, - "ForStatement" : -1, - "ForStatementExpressionOpening" : -1, - "ForStatementExpressionClosing" : -1, - "ForStatementClosingBrace" : -1, - "ForStatementOpeningBrace" : -1, - "ForStatementSemicolon" : -1, - "FunctionReservedWord": 1, - "FunctionName" : 0, - "FunctionExpressionOpeningBrace" : 1, - "FunctionExpressionClosingBrace" : -1, - "FunctionDeclarationOpeningBrace" : 1, - "FunctionDeclarationClosingBrace" : -1, - "IIFEOpeningParentheses" : 0, - "IfStatementConditionalOpening" : 0, - "IfStatementConditionalClosing" : -1, - "IfStatementOpeningBrace" : -1, - "IfStatementClosingBrace" : 1, - "ModuleSpecifierOpeningBrace": 1, - "ElseStatementOpeningBrace" : -1, - "ElseStatementClosingBrace" : -1, - "ElseIfStatementOpeningBrace" : -1, - "ElseIfStatementClosingBrace" : -1, - "MemberExpressionOpening" : -1, - "MemberExpressionClosing": 0, - "MemberExpressionPeriod": 0, - "MethodDefinitionName" : 0, - "LogicalExpressionOperator" : 1, - "ObjectExpressionOpeningBrace": -1, - "ObjectExpressionClosingBrace": -1, - "ObjectPatternOpeningBrace": -1, - "ObjectPatternClosingBrace": -1, - "ObjectPatternComma": 1, - "PropertyName" : 0, - "PropertyValue" : -1, - "ParameterComma" : 1, - "ParameterList" : 0, - "SwitchDiscriminantOpening" : -1, - "SwitchDiscriminantClosing" : 1, - "ThrowKeyword": -1, - "TryKeyword": -1, - "TryOpeningBrace" : -1, - "TryClosingBrace" : -1, - "UnaryExpressionOperator": -1, - "VariableName" : 1, - "VariableValue" : 0, - "VariableDeclarationSemiColon": -1, - "WhileStatementConditionalOpening" : -1, - "WhileStatementConditionalClosing" : -1, - "WhileStatementOpeningBrace" : -1, - "WhileStatementClosingBrace" : -1 - } - }, - - "jsx": { - "formatJSX": true, - "attrsOnSameLineAsTag": false, - "maxAttrsOnTag": 3, - "firstAttributeOnSameLine": false, - "alignWithFirstAttribute": false, - "spaceInJSXExpressionContainers": "", - "htmlOptions": { - "brace_style": "collapse", - "indent_char": " ", - "indent_size": 2, - "max_preserve_newlines": 2, - "preserve_newlines": true - } - }, - - "plugins": [ - "esformatter-quotes", - "esformatter-literal-notation", - "esformatter-spaced-lined-comment", - "esformatter-semicolons", - "esformatter-semicolon-first", - "esformatter-jsx" - ], - - "quotes": { - "type": "double", - "avoidEscape": true - } -} \ No newline at end of file diff --git a/README.md b/README.md index 33ecb462f..86d165262 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,11 @@ The first step, `make custom-config` takes following parameters to set styles of * `italic=''`, styles for italics only. * `oblique=''`, styles for obliques only. -You can add arbitary styles for these variables, for example, `make custom-config upright='v-l-zshaped v-i-zshaped' && make custom` will create a variant with Z-shaped letter `l` and `i` for uprights. +You can also customize the font family: + +* `family=''`, for a customized font family name. + +You can add arbitary styles for these variables, for example, `make custom-config upright='v-l-zshaped v-i-zshaped' family='Iosevka X' && make custom` will create a variant with Z-shaped letter `l` and `i` for uprights, and it would be named as '`Iosevka X`' after installation. The current available styles are: diff --git a/generator.js b/generator.js index 2245b3827..ebe3f53af 100644 --- a/generator.js +++ b/generator.js @@ -82,18 +82,17 @@ const font = (function() { const variantData = toml.parse(fs.readFileSync(path.join(__dirname, "variants.toml"), "utf-8")); const emptyFont = toml.parse(fs.readFileSync(path.join(__dirname, "emptyfont.toml"), "utf-8")); - let para = parameters.build(parametersData, argv._); - let vsdata = formVariantData(variantData, para); + const para = parameters.build(parametersData, argv._); + const vsdata = formVariantData(variantData, para); para.variants = vsdata; para.variantSelector = parameters.build(vsdata, argv._); para.defaultVariant = vsdata.default; - - var fontUniqueName = + if (argv.family) para.family = argv.family; + const fontUniqueName = para.family + " " + para.style + " " + para.version + " (" + para.codename + ")"; - console.log(" Start building font " + fontUniqueName); - var font = buildGlyphs.build.call(emptyFont, para); - console.log(" " + fontUniqueName + " Successfully built."); + const font = buildGlyphs.build.call(emptyFont, para); + font.parameters = para; font.glyf = font.glyf .map(function(g, j) { @@ -101,8 +100,8 @@ const font = (function() { return g; }) .sort(function(a, b) { - var pri1 = a.cmpPriority || 0; - var pri2 = b.cmpPriority || 0; + const pri1 = a.cmpPriority || 0; + const pri2 = b.cmpPriority || 0; if (pri1 > pri2) return -1; if (pri1 < pri2) return 1; if (a.contours && b.contours && a.contours.length < b.contours.length) return 1; @@ -133,30 +132,24 @@ const font = (function() { })(); if (argv.charmap) { - (function() { - console.log(" Writing character map -> " + argv.charmap); - fs.writeFileSync( - argv.charmap, - JSON.stringify( - font.glyf.map(function(glyph) { - return [ - glyph.name, - glyph.unicode, - glyph.advanceWidth === 0 - ? hasv(glyph.anchors) - ? 1 - : glyph.contours && glyph.contours.length ? 2 : 0 - : 0 - ]; - }) - ), - "utf8" - ); - })(); + fs.writeFileSync( + argv.charmap, + JSON.stringify( + font.glyf.map(function(glyph) { + return [ + glyph.name, + glyph.unicode, + glyph.advanceWidth === 0 + ? hasv(glyph.anchors) ? 1 : glyph.contours && glyph.contours.length ? 2 : 0 + : 0 + ]; + }) + ), + "utf8" + ); } if (argv.o) { - console.log(" Writing output -> " + argv.o); var o_glyf = {}; var cmap = {}; var skew = (argv.uprightify ? 1 : 0) * Math.tan((font.post.italicAngle || 0) / 180 * Math.PI); diff --git a/makefile b/makefile index a2db58650..acb243576 100644 --- a/makefile +++ b/makefile @@ -53,7 +53,7 @@ ifndef prestyle prestyle = nothing endif -CREATECONFIG = node maker.js --custom $(set) --design '$(design)' --upright '$(upright)' --italic '$(italic)' --oblique '$(oblique)' --prestyle '$(prestyle)' > $(BUILD)/targets-$(set).mk +CREATECONFIG = node maker.js --custom $(set) --design '$(design)' --upright '$(upright)' --italic '$(italic)' --oblique '$(oblique)' --prestyle '$(prestyle)' --family '$(family)' > $(BUILD)/targets-$(set).mk custom-config : maker.js | $(BUILD)/ $(CREATECONFIG) diff --git a/maker.js b/maker.js index d9a41428b..905323e27 100644 --- a/maker.js +++ b/maker.js @@ -64,29 +64,33 @@ let definedBuildSeqs = {}; function createMake(mapping) { const { hives, dir, filename, cm, custom } = mapping; - let tfname = `$(BUILD)/${filename}.0.otd`; - let cmTarget = `$(BUILD)/${filename}.charmap`; + const tfname = `$(BUILD)/${filename}.0.otd`; + const cmTarget = `$(BUILD)/${filename}.charmap`; - let target = `$(DIST)/${dir}/ttf/${filename}.ttf`; - let woffTarget = `$(DIST)/${dir}/woff/${filename}.woff`; - let woff2Target = `$(DIST)/${dir}/woff2/${filename}.woff2`; + const target = `$(DIST)/${dir}/ttf/${filename}.ttf`; + const woffTarget = `$(DIST)/${dir}/woff/${filename}.woff`; + const woff2Target = `$(DIST)/${dir}/woff2/${filename}.woff2`; let buf = ""; if (!definedBuildSeqs[tfname]) { + const output = `-o $@`; + const charmapOutput = cm ? "--charmap $(BUILD)/" + filename + ".charmap" : ""; + const familyDirective = argv.family ? `--family '${argv.family}'` : ""; + buf += ` ${tfname} : ${custom || ""} $(SCRIPTS) | $(BUILD) $(DIST)/${dir}/ - @echo Building ${filename} with ${hives.join(" ")} - $(GENERATE) ${hives.join(" ")} -o $@ ${cm ? "--charmap $(BUILD)/" + filename + ".charmap" : ""}`; + @echo Building ${filename}, with ${hives.join(" ")} + $(GENERATE) ${hives.join(" ")} ${familyDirective} ${output} ${charmapOutput} +`; definedBuildSeqs[tfname] = true; } buf += ` ${target} : ${tfname} | $(DIST)/${dir}/ttf/ @echo Hinting and optimizing ${tfname} '->' $@ - @otfccbuild ${tfname} -o $(BUILD)/${filename}.1.ttf --keep-average-char-width - @ttfautohint $(BUILD)/${filename}.1.ttf $(BUILD)/${filename}.2.ttf - @otfccdump $(BUILD)/${filename}.2.ttf -o $(BUILD)/${filename}.2.otd --pretty - @otfccbuild $(BUILD)/${filename}.2.otd -o $@ -O3 -s --keep-average-char-width - @rm $(BUILD)/${filename}.1.ttf $(BUILD)/${filename}.2.ttf $(BUILD)/${filename}.2.otd`; + @otfccbuild ${tfname} -o $(BUILD)/${filename}.1.ttf -O3 --keep-average-char-width + @ttfautohint $(BUILD)/${filename}.1.ttf $@ + @rm $(BUILD)/${filename}.1.ttf +`; buf += ` ${woffTarget} : ${target} | $(DIST)/${dir}/woff/