alt_styles = { Reg = { 400, 100 }, -- Regular Cond = { 400, 75 }, SmCond = { 400, 87.5 }, SmExp = { 400, 112.5 }, Exp = { 400, 125 }, Light = { 300, 100 }, -- Light CondLight = { 300, 75 }, SmCondLight = { 300, 87.5 }, SmExpLight = { 300, 112.5 }, ExpLight = { 300, 125 }, Medium = { 500, 100 }, -- Medium CondMedium = { 500, 75 }, SmCondMedium = { 500, 87.5 }, SmExpMedium = { 500, 112.5 }, ExpMedium = { 500, 125 }, Smbold = { 600, 100 }, -- Semibold CondSmbold = { 600, 75 }, SmCondSmbold = { 600, 87.5 }, SmExpSmbold = { 600, 112.5 }, ExpSmbold = { 600, 125 }, Bold = { 700, 100 }, -- Bold CondBold = { 700, 75 }, SmCondBold = { 700, 87.5 }, SmExpBold = { 700, 112.5 }, ExpBold = { 700, 125 } } names = { {"Regular", "MainRegSizeDef"}, {"Italic", "MainItalicSizeDef"}, {"Bold", "MainBoldSizeDef"}, {"BoldItalic", "MainBoldItalicSizeDef"} } main_regular_styles = { {size=8.5, wght=490, wdth=115 }, {size=9.5, wght=472, wdth=112 }, {size=10.5, wght=454, wdth=109 }, {size=11.5, wght=436, wdth=106 }, {size=12.5, wght=418, wdth=103 }, {size=13.5, wght=400, wdth=100 }, {size=14.5, wght=390, wdth=99 }, {size=16.5, wght=380, wdth=98 }, {size=19.5, wght=370, wdth=97 }, {size=22.5, wght=360, wdth=96 }, {size=22.5, wght=350, wdth=95 }, } main_bold_styles = { {size=8.5, wght=790, wdth=115 }, {size=9.5, wght=772, wdth=112 }, {size=10.5, wght=754, wdth=109 }, {size=11.5, wght=736, wdth=106 }, {size=12.5, wght=718, wdth=103 }, {size=13.5, wght=700, wdth=100 }, {size=14.5, wght=690, wdth=99 }, {size=16.5, wght=680, wdth=98 }, {size=19.5, wght=670, wdth=97 }, {size=22.5, wght=660, wdth=96 }, {size=22.5, wght=650, wdth=95 }, } -- 1=Regular, 2=Light, 3=Medium main_regular_autoadjustment = {0, -100, 100} -- 1=Bold, 2=SemiBold main_bold_autoadjustment = {0, -100} -- 1=Regular, 2=Condensed, 3=SemiCondensed, 4=SemiExpanded, 5=Expanded main_width_autoadjustment = { 0, -25, -12.5, 12.5, 25 } function adjustweight(weight, adjustment) adjusted = weight + adjustment if adjusted > 700 then adjusted = 700 end if adjusted < 300 then adjusted = 300 end return adjusted end function adjustwidth(width, adjustment) adjusted = width + adjustment if adjusted > 125 then adjusted = 125 end if adjusted < 75 then adjusted = 75 end return adjusted end function mkaltcommands() for k, v in pairs(alt_styles) do romdef = k .. "Def" romsizedef = k .. "SizeDef" italsizedef = k .. "ItalicSizeDef" romfeat = k .. "Features" romsizefeat = k .. "SizeFeatures" italsizefeat = k .. "ItalicSizeFeatures" if k == "Reg" then romdef = "RegDef" italsizedef = "ItalicSizeDef" romfeat = "RegularFeatures" romsizefeat = "RegularSizeFeatures" italsizefeat = "ItalicSizeFeatures" end tex.print("\\newcommand{\\" .. romdef .. "}{}") tex.print("\\newcommand{\\" .. romsizedef .. "}{SizeFeatures={{Size={5-}, RawFeature={axis={wght=" .. v[1] .. ",wdth=" .. v[2] .. "}}}}}") tex.print("\\DeclareOptionX{" .. romfeat .. "}{\\renewcommand*{\\" .. romdef .. "}{#1,}}") tex.print("\\DeclareOptionX{" .. romsizefeat .. "}{\\renewcommand*{\\" .. romsizedef .. "}{\\directlua{mksizecommand({#1})}}}") tex.print("\\DeclareOptionX{" .. italsizefeat .. "}{\\renewcommand*{\\" .. romsizedef .. "}{\\directlua{mksizecommand({#1})}}}") end end function mkfontcommands() for k, v in pairs(alt_styles) do defcmd = k .. "Def" defsizecmd = k .. "SizeDef" romfontcmd = "j" .. k italfontcmd = "j" .. k .. "Italic" if k == "Reg" then romfontcmd = "jRegular" italfontcmd = "jItalic" end tex.print("\\junicodevf@newfont{\\" .. romfontcmd .. "}{JunicodeVF}{\\" .. defcmd .. "}{\\" .. defsizecmd .. "}") tex.print("\\junicodevf@newfont{\\" .. italfontcmd .. "}{JunicodeVF-Italic}{\\" .. defcmd .. "}{\\" .. defsizecmd .. "}") end end function mksizecommand_helper(sizetable) result = "Nothing yet" if #sizetable > 0 then result = "SizeFeatures={" lastsize = 0 for i, v in ipairs(sizetable) do if v["size"] then axiscount = 0 sizeitem = "{Size={" currentsize = v["size"] csnum = v["size"] if i == #sizetable then -- last array in the list currentsize = currentsize .. "-" elseif lastsize == 0 then -- first array in the list currentsize = "-" .. currentsize else -- an intermediate array currentsize = lastsize .. "-" .. currentsize end lastsize = csnum sizeitem = sizeitem .. currentsize .. "},RawFeature={axis={" if v["wght"] then sizeitem = sizeitem .. "wght=" .. v["wght"] axiscount = axiscount + 1 end if v["wdth"] then if axiscount >= 1 then sizeitem = sizeitem .. "," end sizeitem = sizeitem .. "wdth=" .. v["wdth"] axiscount = axiscount + 1 end if v["ENLA"] then if axiscount >= 1 then sizeitem = sizeitem .. "," end sizeitem = sizeitem .. "ENLA=" .. v["ENLA"] end sizeitem = sizeitem .. "}}}," result = result .. sizeitem end end result = result .. "}" return result end end function mksizecommand(sizetable) tex.print(mksizecommand_helper(sizetable)) end function mkmainfontcommand(name_idx, wght_option, wght_adjust, wdth_option, wdth_adjust) main_style_name = names[name_idx][1] command_name = names[name_idx][2] style_table = main_regular_styles wght_autoadjust = main_regular_autoadjustment[wght_option] if string.find(main_style_name, "Bold") then style_table = main_bold_styles wght_autoadjust = main_bold_autoadjustment[wght_option] end sizetable = {} for i, v in ipairs(style_table) do sizetable[i] = {} sizetable[i]["size"] = v["size"] sizetable[i]["wght"] = adjustweight(v["wght"] + wght_autoadjust, wght_adjust) sizetable[i]["wdth"] = adjustwidth(v["wdth"] + main_width_autoadjustment[wdth_option], wdth_adjust) end tex.print("\\newcommand{\\" .. command_name .. "}{" .. mksizecommand_helper(sizetable) .. "}") end