\input luaotfload.sty
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% script, features, and language
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\font\minionregular=file:MinionPro_Regular.otf  at 9pt
\font\biolinum=file:LinBiolinum_R.otf  at 9pt
\font\cmuregular=file:cmunrm.otf  at 9pt

%% (1) luaotfload.aux.provides_script(font_id, script)
%%      #1 defined font; #2 OT script tag
\def\providesscript[#1][#2]{%
  \bgroup#1%
  let’s see whether \detokenize{#1} has script #2:
  \directlua{
    local aux = luaotfload.aux
    local succ = aux.provides_script(font.current(), [[#2]])
    if succ then tex.sprint"true" else tex.sprint"false" end
  }%
  \egroup
  \endgraf%
}

\providesscript [\minionregular][latn]%% Latin
\providesscript      [\biolinum][latn]
\providesscript    [\cmuregular][latn]
\providesscript [\minionregular][cyrl]%% Cyrillic
\providesscript      [\biolinum][cyrl]
\providesscript    [\cmuregular][cyrl]
\providesscript [\minionregular][tibt]%% Tibetan
\providesscript      [\biolinum][tibt]
\providesscript    [\cmuregular][tibt]

\hrule % --------------------------------------------------------------

%% (2) luaotfload.aux.provides_language(font_id, script, language)
%%      #1 defined font; #2 OT script tag; #3 OT language tag
\def\provideslanguage[#1][#2][#3]{%
  \bgroup#1%
  let’s see whether \detokenize{#1} supports language #3 for script #2:
  \directlua{
    local aux = luaotfload.aux
    local succ = aux.provides_language(font.current(), [[#2]], [[#3]])
    if succ then tex.sprint"true" else tex.sprint"false" end
  }%
  \egroup
  \endgraf%
}

\provideslanguage [\minionregular][latn][nld]%% Latin/Dutch
\provideslanguage      [\biolinum][latn][nld]
\provideslanguage    [\cmuregular][latn][nld]
\provideslanguage [\minionregular][latn][deu]%% Latin/German
\provideslanguage      [\biolinum][latn][deu]
\provideslanguage    [\cmuregular][latn][deu]
\provideslanguage [\minionregular][cyrl][rus]%% Cyrillic/Russian
\provideslanguage      [\biolinum][cyrl][rus]
\provideslanguage    [\cmuregular][cyrl][rus]
\provideslanguage [\minionregular][cyrl][klm]%% Cyrillic/Kalmyk
\provideslanguage      [\biolinum][cyrl][klm]
\provideslanguage    [\cmuregular][cyrl][klm]
\provideslanguage [\minionregular][cyrl][srb]%% Cyrillic/Serbian
\provideslanguage      [\biolinum][cyrl][srb]
\provideslanguage    [\cmuregular][cyrl][srb]
\provideslanguage [\minionregular][tibt][tib]%% Tibetan
\provideslanguage      [\biolinum][tibt][tib]
\provideslanguage    [\cmuregular][tibt][tib]

\hrule % --------------------------------------------------------------

%% (3) luaotfload.aux.provides_feature(
%%                      font_id, script, language, feature)
%%      #1 defined font;    #2 OT script tag;
%%      #3 OT language tag; #4 OT feature
\def\providesfeature[#1][#2][#3][#4]{%this is getting ridiculous
  \bgroup#1%
  let’s see whether \detokenize{#1} supports feature #4 for the
  combination of script #2 with language #3:
  \directlua{
    local aux = luaotfload.aux
    local succ = aux.provides_feature(
      font.current(), [[#2]], [[#3]], [[#4]])
    if succ then tex.sprint"true" else tex.sprint"false" end
  }%
  \egroup
  \endgraf%
}

\providesfeature [\minionregular][latn][nld][liga]%% Latin/Dutch
\providesfeature      [\biolinum][latn][nld][liga]
\providesfeature    [\cmuregular][latn][nld][liga]
\providesfeature [\minionregular][latn][deu][liga]%% Latin/German
\providesfeature      [\biolinum][latn][deu][liga]
\providesfeature    [\cmuregular][latn][deu][liga]
\providesfeature [\minionregular][cyrl][srb][liga]%% Cyrillic/Serbian
\providesfeature      [\biolinum][cyrl][srb][liga]
\providesfeature    [\cmuregular][cyrl][srb][liga]
\providesfeature [\minionregular][tibt][tib][liga]%% Tibetan
\providesfeature      [\biolinum][tibt][tib][liga]
\providesfeature    [\cmuregular][tibt][tib][liga]

\bye
