Add support for custom family names. Fixes #239.

This commit is contained in:
belleve 2018-01-29 15:03:01 +08:00
parent a7f0d9b201
commit 31bf5dea5b
5 changed files with 45 additions and 505 deletions

View file

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

View file

@ -81,7 +81,11 @@ The first step, `make custom-config` takes following parameters to set styles of
* `italic='<styles>'`, styles for italics only.
* `oblique='<styles>'`, 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='<Font 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:

View file

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

View file

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

View file

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