tex2lyx support for MoreOptions in IBM Plex and Noto, support Adobe Source fonts at all

This commit is contained in:
Juergen Spitzmueller 2019-07-13 15:44:52 +02:00
parent e0578e4d61
commit db638018d9

View File

@ -883,6 +883,24 @@ void Preamble::handle_package(Parser &p, string const & name,
h_font_roman[0] = "IBMPlexSerifLight"; h_font_roman[0] = "IBMPlexSerifLight";
else if (opts.find("semibold") != string::npos) else if (opts.find("semibold") != string::npos)
h_font_roman[0] = "IBMPlexSerifSemibold"; h_font_roman[0] = "IBMPlexSerifSemibold";
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (opt == "thin")
continue;
if (opt == "extralight")
continue;
if (opt == "light")
continue;
if (opt == "semibold")
continue;
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_roman_opts = xopts;
options.clear();
} }
if (name == "noto-serif") { if (name == "noto-serif") {
h_font_roman[0] = "NotoSerifRegular"; h_font_roman[0] = "NotoSerifRegular";
@ -896,6 +914,40 @@ void Preamble::handle_package(Parser &p, string const & name,
else if (opts.find("light") != string::npos) else if (opts.find("light") != string::npos)
h_font_roman[0] = "NotoSerifLight"; h_font_roman[0] = "NotoSerifLight";
} }
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (opt == "regular")
continue;
if (opt == "thin")
continue;
if (opt == "extralight")
continue;
if (opt == "light")
continue;
if (opt == "semibold")
continue;
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_roman_opts = xopts;
options.clear();
}
if (name == "sourceserifpro") {
h_font_roman[0] = "ADOBESourceSerifPro";
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_roman_opts = xopts;
options.clear();
} }
// sansserif fonts // sansserif fonts
@ -936,18 +988,28 @@ void Preamble::handle_package(Parser &p, string const & name,
h_font_sans[0] = "IBMPlexSansSemibold"; h_font_sans[0] = "IBMPlexSansSemibold";
else else
h_font_sans[0] = "IBMPlexSans"; h_font_sans[0] = "IBMPlexSans";
// check if the option contains scaling, if yes, extract it vector<string> allopts = getVectorFromString(opts);
string::size_type pos = opts.find("scale"); string xopts;
if (pos != string::npos) { for (auto const & opt : allopts) {
string scale; if (opt == "thin")
string::size_type i = opts.find(',', pos); continue;
if (i == string::npos) if (opt == "extralight")
scale_as_percentage(opts.substr(pos + 1), scale); continue;
else if (opt == "light")
scale_as_percentage(opts.substr(pos, i - pos), scale); continue;
if (!scale.empty()) if (opt == "semibold")
h_font_sf_scale[1] = scale; continue;
if (prefixIs(opt, "scale=")) {
scale_as_percentage(opt, h_font_sf_scale[0]);
continue;
}
if (!xopts.empty())
xopts += ", ";
xopts += opt;
} }
if (!xopts.empty())
h_font_sans_opts = xopts;
options.clear();
} }
if (name == "noto-sans") { if (name == "noto-sans") {
h_font_sans[0] = "NotoSansRegular"; h_font_sans[0] = "NotoSansRegular";
@ -961,7 +1023,44 @@ void Preamble::handle_package(Parser &p, string const & name,
else if (opts.find("light") != string::npos) else if (opts.find("light") != string::npos)
h_font_sans[0] = "NotoSansLight"; h_font_sans[0] = "NotoSansLight";
} }
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (opt == "regular")
continue;
if (opt == "thin")
continue;
if (opt == "extralight")
continue;
if (opt == "light")
continue;
if (opt == "semibold")
continue;
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_sans_opts = xopts;
options.clear();
}
if (name == "sourcesanspro") {
h_font_sans[0] = "ADOBESourceSansPro";
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (prefixIs(opt, "scaled=")) {
scale_as_percentage(opt, h_font_sf_scale[0]);
continue;
}
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_sans_opts = xopts;
options.clear();
} }
// typewriter fonts // typewriter fonts
@ -999,22 +1098,62 @@ void Preamble::handle_package(Parser &p, string const & name,
h_font_typewriter[0] = "IBMPlexMonoSemibold"; h_font_typewriter[0] = "IBMPlexMonoSemibold";
else else
h_font_typewriter[0] = "IBMPlexMono"; h_font_typewriter[0] = "IBMPlexMono";
// check if the option contains scaling, if yes, extract it vector<string> allopts = getVectorFromString(opts);
string::size_type pos = opts.find("scale"); string xopts;
if (pos != string::npos) { for (auto const & opt : allopts) {
string scale; if (opt == "thin")
string::size_type i = opts.find(',', pos); continue;
if (i == string::npos) if (opt == "extralight")
scale_as_percentage(opts.substr(pos + 1), scale); continue;
else if (opt == "light")
scale_as_percentage(opts.substr(pos, i - pos), scale); continue;
if (!scale.empty()) if (opt == "semibold")
h_font_tt_scale[1] = scale; continue;
if (prefixIs(opt, "scale=")) {
scale_as_percentage(opt, h_font_tt_scale[0]);
continue;
}
if (!xopts.empty())
xopts += ", ";
xopts += opt;
} }
if (!xopts.empty())
h_font_typewriter_opts = xopts;
options.clear();
} }
if (name == "noto-mono") { if (name == "noto-mono") {
h_font_typewriter[0] = "NotoMonoRegular"; h_font_typewriter[0] = "NotoMonoRegular";
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (opt == "regular")
continue;
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_typewriter_opts = xopts;
options.clear();
}
if (name == "sourcecodepro") {
h_font_typewriter[0] = "ADOBESourceCodePro";
vector<string> allopts = getVectorFromString(opts);
string xopts;
for (auto const & opt : allopts) {
if (prefixIs(opt, "scaled=")) {
scale_as_percentage(opt, h_font_tt_scale[0]);
continue;
}
if (!xopts.empty())
xopts += ", ";
xopts += opt;
}
if (!xopts.empty())
h_font_typewriter_opts = xopts;
options.clear();
} }
// font uses old-style figure // font uses old-style figure