Prevent more local colors from leaking (#6626)

This commit is contained in:
Juergen Spitzmueller 2021-01-22 10:34:41 +01:00
parent b1e9206cab
commit 6775d7c3a2
6 changed files with 19 additions and 8 deletions

View File

@ -988,7 +988,7 @@ int Buffer::readHeader(Lexer & lex)
<< token << '\'');
string const result =
params().readToken(lex, token, d->filename.onlyPath());
params().readToken(lex, token, d->filename);
if (!result.empty()) {
if (token == "\\textclass") {
d->layout_position = result;

View File

@ -704,9 +704,10 @@ BufferParams::MathNumber BufferParams::getMathNumber() const
string BufferParams::readToken(Lexer & lex, string const & token,
FileName const & filepath)
FileName const & filename)
{
string result;
FileName const & filepath = filename.onlyPath();
if (token == "\\textclass") {
lex.next();
@ -1028,7 +1029,7 @@ string BufferParams::readToken(Lexer & lex, string const & token,
color = lcolor.getX11HexName(Color_background);
// FIXME UNICODE
if (!shortcut.empty())
lcolor.setColor(to_utf8(shortcut), color);
lcolor.setColor(to_utf8(shortcut)+ "@" + filename.absFileName(), color);
}
}
} else if (token == "\\author") {
@ -1055,12 +1056,14 @@ string BufferParams::readToken(Lexer & lex, string const & token,
notefontcolor = lyx::rgbFromHexName(color);
lcolor.setColor("notefontcolor", color);
lcolor.setLaTeXName("notefontcolor", "note_fontcolor");
// set a local name for the painter
lcolor.setColor("notefontcolor@" + filename.absFileName(), color);
isnotefontcolor = true;
} else if (token == "\\boxbgcolor") {
lex.eatLine();
string color = lex.getString();
boxbgcolor = lyx::rgbFromHexName(color);
lcolor.setColor("boxbgcolor", color);
lcolor.setColor("boxbgcolor@" + filename.absFileName(), color);
isboxbgcolor = true;
} else if (token == "\\paperwidth") {
lex >> paperwidth;

View File

@ -17,6 +17,7 @@
#include "Citation.h"
#include "ColorCode.h"
#include "ColorSet.h"
#include "DocumentClassPtr.h"
#include "LayoutModuleList.h"
#include "paper.h"
@ -78,7 +79,7 @@ public:
/// read a header token, if unrecognised, return it or an unknown class name
std::string readToken(Lexer & lex,
std::string const & token, ///< token to read.
support::FileName const & filepath);
support::FileName const & filename);
///
void writeFile(std::ostream &, Buffer const *) const;

View File

@ -34,6 +34,7 @@
#include "support/debug.h"
#include "support/docstream.h"
#include "support/FileName.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/Translator.h"
@ -220,10 +221,10 @@ ColorCode InsetBox::backgroundColor(PainterInfo const &) const
return getLayout().bgcolor();
if (params_.type == "Shaded") {
if (buffer().params().isboxbgcolor)
if (!buffer().params().isboxbgcolor)
return getLayout().bgcolor();
ColorCode c = lcolor.getFromLyXName("boxbgcolor");
ColorCode c = lcolor.getFromLyXName("boxbgcolor@" + buffer().fileName().absFileName());
if (c == Color_none)
return getLayout().bgcolor();
return c;

View File

@ -34,6 +34,7 @@
#include "support/debug.h"
#include "support/docstream.h"
#include "support/FileName.h"
#include "support/gettext.h"
#include "support/lstrings.h"
@ -456,7 +457,8 @@ ColorCode InsetIndex::labelColor() const
if (params_.index.empty() || params_.index == from_ascii("idx"))
return InsetCollapsible::labelColor();
// FIXME UNICODE
ColorCode c = lcolor.getFromLyXName(to_utf8(params_.index));
ColorCode c = lcolor.getFromLyXName(to_utf8(params_.index)
+ "@" + buffer().fileName().absFileName());
if (c == Color_none)
c = InsetCollapsible::labelColor();
return c;

View File

@ -332,6 +332,10 @@ FontInfo InsetNote::getFont() const
ColorCode c = lcolor.getFromLyXName("notefontcolor");
if (c != Color_none)
font.setColor(c);
// This is the local color (not overridden by other documents)
ColorCode lc = lcolor.getFromLyXName("notefontcolor@" + buffer().fileName().absFileName());
if (lc != Color_none)
font.setPaintColor(lc);
}
return font;
}