From a41d589e851a956ff27235841e6330bab552c0fe Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sun, 15 Jul 2018 20:56:55 +0200 Subject: [PATCH] Proper logos with RTL Fixes #10423 (cherry picked from commit e5a9244bef8b7d86ae86fa2d180adbd0c47b70f1) --- src/LaTeXFeatures.cpp | 17 +++++++++++++++++ src/LaTeXFeatures.h | 2 ++ src/insets/InsetSpecialChar.cpp | 22 +++++++++++++++++----- status.23x | 2 ++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 6b047bf775..f325d9447b 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -65,6 +65,10 @@ namespace lyx { static docstring const lyx_def = from_ascii( "\\providecommand{\\LyX}{L\\kern-.1667em\\lower.25em\\hbox{Y}\\kern-.125emX\\@}"); +static docstring const lyx_rtl_def = from_ascii( + "\\let\\@@LyX\\LyX\n" + "\\def\\LyX{\\@ensure@LTR{\\@@LyX}}"); + static docstring const lyx_hyperref_def = from_ascii( "\\providecommand{\\LyX}{\\texorpdfstring%\n" " {L\\kern-.1667em\\lower.25em\\hbox{Y}\\kern-.125emX\\@}\n" @@ -908,6 +912,17 @@ void LaTeXFeatures::getFontEncodings(vector & encodings) const } } + +bool LaTeXFeatures::hasRTLLanguage() const +{ + if (params_.language->rightToLeft()) + return true; + for (auto const & lang : UsedLanguages_) + if (lang->rightToLeft()) + return true; + return false; +} + namespace { char const * simplefeatures[] = { @@ -1359,6 +1374,8 @@ TexString LaTeXFeatures::getMacros() const macros << lyx_hyperref_def << '\n'; else macros << lyx_def << '\n'; + if (runparams_.use_polyglossia && hasRTLLanguage()) + macros << lyx_rtl_def << '\n'; } if (mustProvide("noun")) diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h index 72451ad8ee..137f5d7ebf 100644 --- a/src/LaTeXFeatures.h +++ b/src/LaTeXFeatures.h @@ -182,6 +182,8 @@ private: /// void useLayout(docstring const &, int); /// + bool hasRTLLanguage() const; + /// std::list usedLayouts_; /// std::list usedInsetLayouts_; diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp index 1267a75b37..e9153cd900 100644 --- a/src/insets/InsetSpecialChar.cpp +++ b/src/insets/InsetSpecialChar.cpp @@ -16,6 +16,7 @@ #include "Dimension.h" #include "Font.h" +#include "Language.h" #include "LaTeXFeatures.h" #include "Lexer.h" #include "MetricsInfo.h" @@ -416,6 +417,17 @@ void InsetSpecialChar::read(Lexer & lex) void InsetSpecialChar::latex(otexstream & os, OutputParams const & rp) const { + bool const rtl = rp.local_font->isRightToLeft(); + string lswitch = ""; + string lswitche = ""; + if (rtl && !rp.use_polyglossia) { + lswitch = "\\L{"; + lswitche = "}"; + if (rp.local_font->language()->lang() == "arabic_arabi" + || rp.local_font->language()->lang() == "farsi") + lswitch = "\\textLR{"; + } + switch (kind_) { case HYPHENATION: os << "\\-"; @@ -433,7 +445,7 @@ void InsetSpecialChar::latex(otexstream & os, os << "\\ldots" << termcmd; break; case MENU_SEPARATOR: - if (rp.local_font->isRightToLeft()) + if (rtl) os << "\\lyxarrow*"; else os << "\\lyxarrow"; @@ -450,22 +462,22 @@ void InsetSpecialChar::latex(otexstream & os, case PHRASE_LYX: if (rp.moving_arg) os << "\\protect"; - os << "\\LyX" << termcmd; + os << lswitch << "\\LyX" << termcmd << lswitche; break; case PHRASE_TEX: if (rp.moving_arg) os << "\\protect"; - os << "\\TeX" << termcmd; + os << lswitch << "\\TeX" << termcmd << lswitche; break; case PHRASE_LATEX2E: if (rp.moving_arg) os << "\\protect"; - os << "\\LaTeXe" << termcmd; + os << lswitch << "\\LaTeXe" << termcmd << lswitche; break; case PHRASE_LATEX: if (rp.moving_arg) os << "\\protect"; - os << "\\LaTeX" << termcmd; + os << lswitch << "\\LaTeX" << termcmd << lswitche; break; } } diff --git a/status.23x b/status.23x index 02edc3f16e..c68179ce40 100644 --- a/status.23x +++ b/status.23x @@ -19,6 +19,8 @@ What's new - Support rotated table cells with linebreaks (bug 8085). +- Add support for LyX logo in RTL output (bug 10423). + * MISCELLANEOUS -- 2.39.5