userdata = userdata or {} userdata.adobesource = userdata.adobesource or {} userdata.adobesource.getfontname = function(style, typescript, italic, bold) local prefixes = { serif = "file:SourceSerif4", sans = "file:SourceSans3", mono = "file:SourceCodePro", } local designsizes = { caption = "Caption", smtext = "SmText", subhead = "Subhead", display = "Display", } local boldalternative = { extralight = "regular", light = "semibold", regular = "bold", medium = "bold", semibold = "black", bold = "black", black = "black" } local i = string.gmatch(typescript, "[^-]*") i() -- Skip "adobesource" local explicitdesignsize local nodesignsize local weight local token = i() if designsizes[token] then explicitdesignsize = designsizes[token] weight = i() elseif token == "nodesignsize" then nodesignsize = true weight = i() else weight = token end weight = weight or "regular" if style ~= "mono" and weight == "medium" then weight = "regular" end if bold then weight = boldalternative[weight] end local name if style == "serif" and not (explicitdesignsize or nodesignsize) then name = "SourceSerif4" else name = prefixes[style] end if explicitdesignsize then name = name .. explicitdesignsize end name = name .. "-" if italic then if weight == "regular" then return name .. "It" else return name .. weight .. "It" end else return name .. weight end end