mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Fix some listings/minted incompatibilities
The basic problem here is that rather than using an abstract syntax, backend-specific param strings are produced in the listings dialog, depending on whether listings or minted is used. Of course this breaks if a user switches backends inbetween (s/he would have to open and re-apply each and every listings inset!) Do at least the most basic translations in InsetListings::latex(). A sane solution would imply the use of only one param syntax with respective interpretation for each backend. But this would be a file format change.
This commit is contained in:
parent
54147a7140
commit
c0f734bcef
@ -297,6 +297,9 @@ string GuiListings::construct_params()
|
||||
string fontstyle = font_styles[qMax(0, fontstyleCO->currentIndex())];
|
||||
string basicstyle;
|
||||
string mintedsize;
|
||||
// FIXME: We should not compose listings- or minted-dependant string here
|
||||
// This breaks if a users switches the backend without opening and
|
||||
// re-applying all listings insets. Use a backend-abstract syntax!
|
||||
bool const use_minted = buffer().params().use_minted;
|
||||
if (fontsize != "default") {
|
||||
if (use_minted)
|
||||
|
@ -150,6 +150,44 @@ void InsetListings::latex(otexstream & os, OutputParams const & runparams) const
|
||||
static regex const reg1("(.*)(basicstyle=\\{)([^\\}]*)(\\\\ttfamily)([^\\}]*)(\\})(.*)");
|
||||
static regex const reg2("(.*)(basicstyle=\\{)([^\\}]*)(\\\\rmfamily)([^\\}]*)(\\})(.*)");
|
||||
static regex const reg3("(.*)(basicstyle=\\{)([^\\}]*)(\\\\sffamily)([^\\}]*)(\\})(.*)");
|
||||
static regex const reg4("(.*)(basicstyle=\\{)([^\\}]*)(\\\\(tiny|scriptsize|footnotesize|small|normalsize|large|Large))([^\\}]*)(\\})(.*)");
|
||||
static regex const reg5("(.*)(fontfamily=)(tt|sf|rm)(.*)");
|
||||
static regex const reg6("(.*)(fontsize=\\{)(\\\\(tiny|scriptsize|footnotesize|small|normalsize|large|Large))(\\})(.*)");
|
||||
if (use_minted) {
|
||||
// If params have been entered with "listings", and then the user switched to "minted",
|
||||
// we have params that need to be translated.
|
||||
// FIXME: We should use a backend-abstract syntax in listings params instead!
|
||||
// Substitute fontstyle option
|
||||
smatch sub;
|
||||
if (regex_match(param_string, sub, reg1))
|
||||
param_string = sub.str(1) + "fontfamily=tt," + sub.str(2) + sub.str(3)
|
||||
+ sub.str(5) + sub.str(6) + sub.str(7);
|
||||
if (regex_match(param_string, sub, reg2))
|
||||
param_string = sub.str(1) + "fontfamily=rm," + sub.str(2) + sub.str(3)
|
||||
+ sub.str(5) + sub.str(6) + sub.str(7);
|
||||
if (regex_match(param_string, sub, reg3))
|
||||
param_string = sub.str(1) + "fontfamily=sf," + sub.str(2) + sub.str(3)
|
||||
+ sub.str(5) + sub.str(6) + sub.str(7);
|
||||
// as well as fontsize option
|
||||
if (regex_match(param_string, sub, reg4))
|
||||
param_string = sub.str(1) + "fontsize={" + sub.str(4) + sub.str(3) + sub.str(7) + sub.str(8);
|
||||
} else {
|
||||
// And the same vice versa
|
||||
// Substitute fontstyle option
|
||||
smatch sub;
|
||||
string basicstyle;
|
||||
if (regex_match(param_string, sub, reg5)) {
|
||||
basicstyle = "\\" + sub.str(3) + "family";
|
||||
param_string = sub.str(1) + sub.str(4);
|
||||
}
|
||||
// as well as fontsize option
|
||||
if (regex_match(param_string, sub, reg6)) {
|
||||
basicstyle += sub.str(3);
|
||||
param_string = sub.str(1) + sub.str(6);
|
||||
}
|
||||
if (!basicstyle.empty())
|
||||
param_string = rtrim(param_string, ",") + ",basicstyle={" + basicstyle + "}";
|
||||
}
|
||||
if (runparams.use_polyglossia && runparams.local_font->isRightToLeft()) {
|
||||
// We need to use the *latin switches (#11554)
|
||||
smatch sub;
|
||||
|
Loading…
Reference in New Issue
Block a user