Hello there,

I had mentioned this on a thread some (long) time ago, finally got around to finishing a first version of a typescript with the Adobe Source font family, in all its weight alternatives and design sizes (the latter being available in the Serif style only).

Comments welcome. If it looks good I can upload it to the wiki, on the Typescripts_examples page I guess.

(I have Questions For the Experts further down...)


About Adobe Source
==================

The fonts are available on GitHub [1]. They are the descendants of the Source {Serif,Sans,Code} Pro fonts described in the type-imp-source.mkiv typescript available in the ConTeXt distribution. Due to major changes, Serif Pro was renamed into Serif 4 in, well, its version 4 [2] (that’s the version that introduces design sizes, a.k.a. optical sizes), and Sans Pro was renamed into Sans 3 [3].

[1] https://github.com/adobe-fonts/
[2] https://github.com/adobe-fonts/source-serif/releases/tag/4.004R
[3] https://github.com/adobe-fonts/source-sans/issues/192


Usage
=====

Short version: store the attached typescript and its helper Lua files somewhere on your file system where ConTeXt will find them ($HOME/texmf for example), then use in your document:

    \setupbodyfont[adobesource]

Long version: The default typescript name is adobesource (also available as adobesource-regular) and has design sizes enabled.

Each weight is also available: adobesource-extralight, adobesource-light, etc., all the way to adobesource-black. There is also a medium weight, that selects the regular versions of Serif and Sans, but the medium version of Mono (just slightly bolder than the regular one, presumably for better on-screen rendering in terminals).

Design sizes can be disabled by adding -nodesignsize- to the typescript name: adobesource-nodesignsize-extralight, etc.

Finally, I thought it would be cool to over-engineer the typescript a little bit and provide direct access to the design sizes (in case one would want a narrower version for body text, or a bolder and more expanded version for titles, etc.). Here they are, again in all their weights: adobesource-caption-extralight, adobesource-smtext-light, adobesource-subhead, adobesource-display-bold, etc. The ‘regular’ design size is accessed by simply using adobesource-nodesignsize.


Questions For the Experts
=========================

To avoid a gigantic typescript file with a lot of duplication, I offloaded the font filename calculation to a Lua function (see attached adobesource.lua). I initially wanted to put the Lua code inside the typescript, but then I had all sorts of weird Lua compilation errors. The very same code works fine when included in a normal document though. Could it be that typescripts are processed in some special mode that doesn’t like Lua syntax? As a workaround, I put the code in an external file and require it from inside the typescript.

In the goodies file, I use what I believe is the largest possible font size that can be used in ConTeXt (16,383pt) to select the Display design size. Otherwise, text above that size will fall back to the default, regular design size.

Now, since I use the goodies file only when design sizes are enabled, I thought I could make it more robust by using AdobeSource4Display as a default, that is, for any size above 16.5pt. However, if I mix design sizes enabled and disabled in a document, the disabled one seems to be using the goodies file even though it’s not mentioned in the typescript. Any idea of why? For example:

\usetypescriptfile[adobesource]
\usebodyfont[adobesource]
\setupbodyfont[adobesource-nodesignsize]
\starttext
This text is typeset in Display when Regular should be used.

\switchtobodyfont[adobesource]
This text is typeset in Regular with design sizes enabled.
\stoptext


What’s Next
===========

* A harmonious-looking companion math font.
* A harmonious-looking companion math font that uses glyphs from Adobe Serif 4 when available.


Thanks,
Vincent
\starttypescriptcollection[adobesource]

  \startluacode
  require("adobesource")
  \stopluacode

  \starttypescript[serif,sans,mono]
    [
      adobesource-extralight,
      adobesource-light,
      adobesource,
      adobesource-regular,
      adobesource-medium,
      adobesource-semibold,
      adobesource-bold,
      adobesource-black,
      adobesource-nodesignsize-extralight,
      adobesource-nodesignsize-light,
      adobesource-nodesignsize,
      adobesource-nodesignsize-regular,
      adobesource-nodesignsize-medium,
      adobesource-nodesignsize-semibold,
      adobesource-nodesignsize-bold,
      adobesource-nodesignsize-black,
    ]
    [name]
    \setups[font:fallback:\typescriptone]
    \definefontsynonym [\typescriptprefix{\typescriptone}]           [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", false, false))}] [features=default]
    \definefontsynonym [\typescriptprefix{\typescriptone}Italic]     [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", true,  false))}] [features=default]
    \definefontsynonym [\typescriptprefix{\typescriptone}Bold]       [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", false, true))}]  [features=default]
    \definefontsynonym [\typescriptprefix{\typescriptone}BoldItalic] [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", true,  true))}]  [features=default]
  \stoptypescript

  \starttypescript
    [
      adobesource-extralight,
      adobesource-light,
      adobesource,
      adobesource-regular,
      adobesource-medium,
      adobesource-semibold,
      adobesource-bold,
      adobesource-black,
    ]
    \loadfontgoodies[adobesource-serif]
    \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [designsize=auto]
    \definetypeface [\typescriptone] [ss] [sans]  [\typescriptone] [default]
    \definetypeface [\typescriptone] [tt] [mono]  [\typescriptone] [default]
  \stoptypescript

  \starttypescript
    [
      adobesource-nodesignsize-extralight,
      adobesource-nodesignsize-light,
      adobesource-nodesignsize,
      adobesource-nodesignsize-regular,
      adobesource-nodesignsize-medium,
      adobesource-nodesignsize-semibold,
      adobesource-nodesignsize-bold,
      adobesource-nodesignsize-black,
    ]
    \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
    \definetypeface [\typescriptone] [ss] [sans]  [\typescriptone] [default]
    \definetypeface [\typescriptone] [tt] [mono]  [\typescriptone] [default]
  \stoptypescript

  \starttypescript [serif]
    [
      adobesource-caption-extralight,
      adobesource-caption-light,
      adobesource-caption,
      adobesource-caption-semibold,
      adobesource-caption-bold,
      adobesource-caption-black,
      adobesource-smtext-extralight,
      adobesource-smtext-light,
      adobesource-smtext,
      adobesource-smtext-semibold,
      adobesource-smtext-bold,
      adobesource-smtext-black,
      adobesource-subhead-extralight,
      adobesource-subhead-light,
      adobesource-subhead,
      adobesource-subhead-semibold,
      adobesource-subhead-bold,
      adobesource-subhead-black,
      adobesource-display-extralight,
      adobesource-display-light,
      adobesource-display,
      adobesource-display-semibold,
      adobesource-display-bold,
      adobesource-display-black,
    ]
    [name]
    \setups[font:fallback:serif]
    \definefontsynonym [Serif]           [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", false, false))}] [features=default]
    \definefontsynonym [SerifItalic]     [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", true,  false))}] [features=default]
    \definefontsynonym [SerifBold]       [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", false, true ))}] [features=default]
    \definefontsynonym [SerifBoldItalic] [\ctxlua{context(userdata.adobesource.getfontname("\typescriptone", "\typescripttwo", true,  true ))}] [features=default]
  \stoptypescript

  \starttypescript
    [
      adobesource-caption-extralight,
      adobesource-caption-light,
      adobesource-caption,
      adobesource-caption-semibold,
      adobesource-caption-bold,
      adobesource-caption-black,
      adobesource-smtext-extralight,
      adobesource-smtext-light,
      adobesource-smtext,
      adobesource-smtext-semibold,
      adobesource-smtext-bold,
      adobesource-smtext-black,
      adobesource-subhead-extralight,
      adobesource-subhead-light,
      adobesource-subhead,
      adobesource-subhead-semibold,
      adobesource-subhead-bold,
      adobesource-subhead-black,
      adobesource-display-extralight,
      adobesource-display-light,
      adobesource-display,
      adobesource-display-semibold,
      adobesource-display-bold,
      adobesource-display-black,
    ]
    \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
  \stoptypescript

\stoptypescriptcollection
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
local designsizes = {}
for _, v in ipairs({"ExtraLight", "ExtraLightIt", "Light", "LightIt", 
"Regular", "It",
        "Semibold", "SemiboldIt", "Bold", "BoldIt", "Black", "BlackIt"}) do
    designsizes["SourceSerif4-"..v] = {
        ["6.5pt"]   = "file:SourceSerif4Caption-"..v..".otf",
        ["9.5pt"]   = "file:SourceSerif4SmText-" ..v..".otf",
        ["12.5pt"]  = "file:SourceSerif4-"       ..v..".otf",
        ["16.5pt"]  = "file:SourceSerif4Subhead-"..v..".otf",
        ["16383pt"] = "file:SourceSerif4Display-"..v..".otf",
        default     = "file:SourceSerif4-"..v..".otf",
    }
end
return {
    name = "source-serif4",
    version = "1.00",
    comment = "Design sizes for Adobe Source Serif 4",
    designsizes = designsizes,
}
-- vim:filetype=lua
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

Reply via email to