mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
Account for babel's bidi option (#12866)
bidi=bidi-{r,l} load the bidi package
This commit is contained in:
parent
a6b83b7444
commit
315c2f132a
@ -2948,6 +2948,33 @@ bool BufferParams::isLiterate() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool BufferParams::hasPackageOption(string const package, string const opt) const
|
||||||
|
{
|
||||||
|
for (auto const & p : documentClass().packageOptions())
|
||||||
|
if (package == p.first && opt == p.second)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool BufferParams::useBidiPackage(OutputParams const & rp) const
|
||||||
|
{
|
||||||
|
return (rp.use_polyglossia
|
||||||
|
// as of babel 3.29, bidi=bidi-* is supported by babel
|
||||||
|
// So we check whether we use a respective version and
|
||||||
|
// whethert bidi-r or bidi-l have been requested either via class
|
||||||
|
// or package options
|
||||||
|
|| (rp.use_babel
|
||||||
|
&& LaTeXFeatures::isAvailableAtLeastFrom("babel", 2019, 4, 3)
|
||||||
|
&& (hasPackageOption("babel", "bidi-r")
|
||||||
|
|| hasPackageOption("babel", "bidi-l")
|
||||||
|
|| contains(options, "bidi-r")
|
||||||
|
|| contains(options, "bidi-l")))
|
||||||
|
)
|
||||||
|
&& rp.flavor == Flavor::XeTeX;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BufferParams::readPreamble(Lexer & lex)
|
void BufferParams::readPreamble(Lexer & lex)
|
||||||
{
|
{
|
||||||
if (lex.getString() != "\\begin_preamble")
|
if (lex.getString() != "\\begin_preamble")
|
||||||
|
@ -49,6 +49,7 @@ class LayoutFile;
|
|||||||
class LayoutFileIndex;
|
class LayoutFileIndex;
|
||||||
class Length;
|
class Length;
|
||||||
class Lexer;
|
class Lexer;
|
||||||
|
class OutputParams;
|
||||||
class otexstream;
|
class otexstream;
|
||||||
class PDFOptions;
|
class PDFOptions;
|
||||||
class Spacing;
|
class Spacing;
|
||||||
@ -194,6 +195,10 @@ public:
|
|||||||
bool isLatex() const;
|
bool isLatex() const;
|
||||||
/// returns \c true if the buffer contains a Wed document
|
/// returns \c true if the buffer contains a Wed document
|
||||||
bool isLiterate() const;
|
bool isLiterate() const;
|
||||||
|
/// Is this package option requested?
|
||||||
|
bool hasPackageOption(std::string const package, std::string const opt) const;
|
||||||
|
/// Do we use the bidi package (which does some reordering and stuff)?
|
||||||
|
bool useBidiPackage(OutputParams const & rp) const;
|
||||||
|
|
||||||
/// return the format of the buffer on a string
|
/// return the format of the buffer on a string
|
||||||
std::string bufferFormat() const;
|
std::string bufferFormat() const;
|
||||||
|
@ -426,7 +426,7 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
|
|||||||
// the numbers are written Left-to-Right. ArabTeX package
|
// the numbers are written Left-to-Right. ArabTeX package
|
||||||
// and bidi (polyglossia with XeTeX) reorder the number automatically
|
// and bidi (polyglossia with XeTeX) reorder the number automatically
|
||||||
// but the packages used for Hebrew and Farsi (Arabi) do not.
|
// but the packages used for Hebrew and Farsi (Arabi) do not.
|
||||||
if (!runparams.useBidiPackage()
|
if (!bparams.useBidiPackage(runparams)
|
||||||
&& !runparams.pass_thru
|
&& !runparams.pass_thru
|
||||||
&& bits_.number() == FONT_ON
|
&& bits_.number() == FONT_ON
|
||||||
&& prev.fontInfo().number() != FONT_ON
|
&& prev.fontInfo().number() != FONT_ON
|
||||||
@ -604,7 +604,7 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
|
|||||||
// the numbers are written Left-to-Right. ArabTeX package
|
// the numbers are written Left-to-Right. ArabTeX package
|
||||||
// and bidi (polyglossia with XeTeX) reorder the number automatically
|
// and bidi (polyglossia with XeTeX) reorder the number automatically
|
||||||
// but the packages used for Hebrew and Farsi (Arabi) do not.
|
// but the packages used for Hebrew and Farsi (Arabi) do not.
|
||||||
if (!runparams.useBidiPackage()
|
if (!bparams.useBidiPackage(runparams)
|
||||||
&& !runparams.pass_thru
|
&& !runparams.pass_thru
|
||||||
&& bits_.number() == FONT_ON
|
&& bits_.number() == FONT_ON
|
||||||
&& next.fontInfo().number() != FONT_ON
|
&& next.fontInfo().number() != FONT_ON
|
||||||
|
@ -51,10 +51,4 @@ bool OutputParams::isFullUnicode() const
|
|||||||
|| flavor == Flavor::XeTeX;
|
|| flavor == Flavor::XeTeX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool OutputParams::useBidiPackage() const
|
|
||||||
{
|
|
||||||
return use_polyglossia && flavor == Flavor::XeTeX;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
@ -83,8 +83,6 @@ public:
|
|||||||
bool isLaTeX() const;
|
bool isLaTeX() const;
|
||||||
/// does this flavour support full unicode?
|
/// does this flavour support full unicode?
|
||||||
bool isFullUnicode() const;
|
bool isFullUnicode() const;
|
||||||
/// Do we use the bidi package (which does some reordering and stuff)?
|
|
||||||
bool useBidiPackage() const;
|
|
||||||
|
|
||||||
/// Same, but for math output, which only matter is XHTML output.
|
/// Same, but for math output, which only matter is XHTML output.
|
||||||
MathFlavor math_flavor = NotApplicable;
|
MathFlavor math_flavor = NotApplicable;
|
||||||
|
@ -2055,7 +2055,7 @@ char_type Paragraph::getUChar(BufferParams const & bparams,
|
|||||||
// or if we use poylglossia/bidi (XeTeX)
|
// or if we use poylglossia/bidi (XeTeX)
|
||||||
// or with babel and Xe/LuaTeX.
|
// or with babel and Xe/LuaTeX.
|
||||||
if (!getFontSettings(bparams, pos).isRightToLeft()
|
if (!getFontSettings(bparams, pos).isRightToLeft()
|
||||||
|| rp.useBidiPackage()
|
|| bparams.useBidiPackage(rp)
|
||||||
|| (rp.use_babel && rp.isFullUnicode()))
|
|| (rp.use_babel && rp.isFullUnicode()))
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
@ -2548,7 +2548,7 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams,
|
|||||||
// RTL in classic (PDF)LaTeX (without the Bidi package)
|
// RTL in classic (PDF)LaTeX (without the Bidi package)
|
||||||
// Luabibdi (used by LuaTeX) behaves like classic
|
// Luabibdi (used by LuaTeX) behaves like classic
|
||||||
bool const rtl_classic = owner_->getParLanguage(bparams)->rightToLeft()
|
bool const rtl_classic = owner_->getParLanguage(bparams)->rightToLeft()
|
||||||
&& !runparams.useBidiPackage();
|
&& !bparams.useBidiPackage(runparams);
|
||||||
|
|
||||||
switch (curAlign) {
|
switch (curAlign) {
|
||||||
case LYX_ALIGN_NONE:
|
case LYX_ALIGN_NONE:
|
||||||
@ -2612,7 +2612,7 @@ bool Paragraph::Private::endTeXParParams(BufferParams const & bparams,
|
|||||||
// RTL in classic (PDF)LaTeX (without the Bidi package)
|
// RTL in classic (PDF)LaTeX (without the Bidi package)
|
||||||
// Luabibdi (used by LuaTeX) behaves like classic
|
// Luabibdi (used by LuaTeX) behaves like classic
|
||||||
bool const rtl_classic = owner_->getParLanguage(bparams)->rightToLeft()
|
bool const rtl_classic = owner_->getParLanguage(bparams)->rightToLeft()
|
||||||
&& !runparams.useBidiPackage();
|
&& !bparams.useBidiPackage(runparams);
|
||||||
|
|
||||||
switch (curAlign) {
|
switch (curAlign) {
|
||||||
case LYX_ALIGN_NONE:
|
case LYX_ALIGN_NONE:
|
||||||
|
@ -543,7 +543,7 @@ bool InsetCitation::forceLTR(OutputParams const & rp) const
|
|||||||
// We have to force LTR for numeric references
|
// We have to force LTR for numeric references
|
||||||
// [= bibliography, plain BibTeX, numeric natbib
|
// [= bibliography, plain BibTeX, numeric natbib
|
||||||
// and biblatex]. Except for XeTeX/bidi. See #3005.
|
// and biblatex]. Except for XeTeX/bidi. See #3005.
|
||||||
if (rp.useBidiPackage())
|
if (buffer().masterParams().useBidiPackage(rp))
|
||||||
return false;
|
return false;
|
||||||
return (buffer().masterParams().citeEngine() == "basic"
|
return (buffer().masterParams().citeEngine() == "basic"
|
||||||
|| buffer().masterParams().citeEngineType() == ENGINE_TYPE_NUMERICAL);
|
|| buffer().masterParams().citeEngineType() == ENGINE_TYPE_NUMERICAL);
|
||||||
|
@ -611,7 +611,7 @@ bool InsetRef::forceLTR(OutputParams const & rp) const
|
|||||||
// * Parentheses are automatically swapped with XeTeX/bidi
|
// * Parentheses are automatically swapped with XeTeX/bidi
|
||||||
// [not with LuaTeX/luabidi] (see #11626).
|
// [not with LuaTeX/luabidi] (see #11626).
|
||||||
// FIXME: Re-Audit all other RTL cases.
|
// FIXME: Re-Audit all other RTL cases.
|
||||||
if (rp.useBidiPackage())
|
if (buffer().masterParams().useBidiPackage(rp))
|
||||||
return false;
|
return false;
|
||||||
return (getCmdName() != "nameref" || !buffer().masterParams().useNonTeXFonts);
|
return (getCmdName() != "nameref" || !buffer().masterParams().useNonTeXFonts);
|
||||||
}
|
}
|
||||||
|
@ -3180,7 +3180,7 @@ void Tabular::TeXRow(otexstream & os, row_type row,
|
|||||||
// Luabibdi (used by LuaTeX) behaves like classic
|
// Luabibdi (used by LuaTeX) behaves like classic
|
||||||
bool const bidi_rtl =
|
bool const bidi_rtl =
|
||||||
runparams.local_font->isRightToLeft()
|
runparams.local_font->isRightToLeft()
|
||||||
&& runparams.useBidiPackage();
|
&& buffer().params().useBidiPackage(runparams);
|
||||||
bool const ct = !buffer().params().output_changes;
|
bool const ct = !buffer().params().output_changes;
|
||||||
idx_type lastcell =
|
idx_type lastcell =
|
||||||
bidi_rtl ? getFirstCellInRow(row, ct) : getLastCellInRow(row, ct);
|
bidi_rtl ? getFirstCellInRow(row, ct) : getLastCellInRow(row, ct);
|
||||||
@ -3352,7 +3352,7 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const
|
|||||||
// order for RTL (#9686). Thus we use this list.
|
// order for RTL (#9686). Thus we use this list.
|
||||||
bool const bidi_rtl =
|
bool const bidi_rtl =
|
||||||
runparams.local_font->isRightToLeft()
|
runparams.local_font->isRightToLeft()
|
||||||
&& runparams.useBidiPackage();
|
&& buffer().params().useBidiPackage(runparams);
|
||||||
list<col_type> columns;
|
list<col_type> columns;
|
||||||
list<col_type> logical_columns;
|
list<col_type> logical_columns;
|
||||||
for (col_type cl = 0; cl < ncols(); ++cl) {
|
for (col_type cl = 0; cl < ncols(); ++cl) {
|
||||||
|
Loading…
Reference in New Issue
Block a user