mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
Introduce "inherit" encoding for latex_language
This gets rid of the hardcoded latin1 encoding for verbatim. Instead, verbatim now inherits the encoding from the context, which is what is actually wanted here. Fixes: #9012, #9258
This commit is contained in:
parent
4a7f068b96
commit
931f87f508
@ -246,3 +246,9 @@ End
|
||||
# Pure 7bit ASCII encoding (partially hardcoded in LyX)
|
||||
Encoding ascii ascii "ASCII" ascii fixed none
|
||||
End
|
||||
|
||||
# Semantic encodings
|
||||
|
||||
# Inherit encoding of the context (used by verbatim)
|
||||
Encoding inherit inherit "" "" fixed none
|
||||
End
|
||||
|
@ -65,6 +65,8 @@
|
||||
# * Encoding is the default encoding used with TeX fonts.
|
||||
# It is only used if Document > Settings > Language > Encoding
|
||||
# is set to "Language Default" and "use non-TeX fonts" is FALSE.
|
||||
# Encoding "inherit" means: keep encoding of the context (used by
|
||||
# latex_language).
|
||||
# * InternalEncoding is used to tell LyX that babel internally sets a
|
||||
# non-standard font encoding (such as hebrew to LHE or greek to LGR).
|
||||
# If True, LyX cares for characters/macros that do not exist in
|
||||
@ -100,13 +102,13 @@ Language ignore
|
||||
GuiName "Ignore"
|
||||
BabelName ignore
|
||||
PolyglossiaName ignore
|
||||
Encoding iso8859-1
|
||||
Encoding inherit
|
||||
LangCode ignore
|
||||
End
|
||||
|
||||
Language latex
|
||||
GuiName "LaTeX"
|
||||
Encoding iso8859-1
|
||||
Encoding inherit
|
||||
LangCode latex
|
||||
End
|
||||
|
||||
|
@ -721,6 +721,17 @@ Encoding const * DocIterator::getEncoding() const
|
||||
Text const & text = *sl.text();
|
||||
Font font = text.getPar(sl.pit()).getFont(bp, sl.pos(),
|
||||
text.outerFont(sl.pit()));
|
||||
Encoding const * enc = font.language()->encoding();
|
||||
if (enc->name() == "inherit") {
|
||||
size_t const n = depth();
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
Text const & otext = *slices_[i].text();
|
||||
Font ofont = otext.getPar(slices_[i].pit()).getFont(bp, slices_[i].pos(),
|
||||
otext.outerFont(slices_[i].pit()));
|
||||
if (ofont.language()->encoding()->name() != "inherit")
|
||||
return ofont.language()->encoding();
|
||||
}
|
||||
}
|
||||
return font.language()->encoding();
|
||||
}
|
||||
|
||||
|
13
src/Text.cpp
13
src/Text.cpp
@ -933,15 +933,12 @@ bool canInsertChar(Cursor const & cur, char_type c)
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent to insert uncodable characters in verbatim and ERT
|
||||
// (workaround for bug 9012)
|
||||
// Don't do it for listings inset, since InsetListings::latex() tries
|
||||
// to switch to a usable encoding which works in many cases (bug 9102).
|
||||
if (par.isPassThru() && cur.inset().lyxCode() != LISTINGS_CODE &&
|
||||
cur.current_font.language()) {
|
||||
Encoding const * e = cur.current_font.language()->encoding();
|
||||
// Prevent to insert uncodable characters in verbatim and ERT.
|
||||
// The encoding is inherited from the context here.
|
||||
if (par.isPassThru() && cur.getEncoding()) {
|
||||
Encoding const * e = cur.getEncoding();
|
||||
if (!e->encodable(c)) {
|
||||
cur.message(_("Character is uncodable in verbatim paragraphs."));
|
||||
cur.message(_("Character is uncodable in this verbatim context."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -1079,7 +1079,7 @@ GuiDocument::GuiDocument(GuiView & lv)
|
||||
Encodings::const_iterator it = encodings.begin();
|
||||
Encodings::const_iterator const end = encodings.end();
|
||||
for (auto const & encvar : encodings) {
|
||||
if (!encvar.unsafe())
|
||||
if (!encvar.unsafe() && !encvar.guiName().empty())
|
||||
encodinglist.append(qt_(encvar.guiName()));
|
||||
}
|
||||
encodinglist.sort();
|
||||
|
@ -1530,7 +1530,7 @@ pair<bool, int> switchEncoding(odocstream & os, BufferParams const & bparams,
|
||||
// * with useNonTeXFonts: "utf8plain",
|
||||
// * with XeTeX and TeX fonts: "ascii" (inputenc fails),
|
||||
// * with LuaTeX and TeX fonts: only one encoding accepted by luainputenc.
|
||||
if (runparams.isFullUnicode())
|
||||
if (runparams.isFullUnicode() || newEnc.name() == "inherit")
|
||||
return make_pair(false, 0);
|
||||
|
||||
Encoding const & oldEnc = *runparams.encoding;
|
||||
|
Loading…
Reference in New Issue
Block a user