]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Account for old versions of Pygments
[lyx.git] / src / LaTeXFeatures.cpp
index b4de991828759ce450e5be43c1cd5cb045a4894a..54cf237eb5a822441d2142240b81a8fd514a5964 100644 (file)
@@ -79,6 +79,15 @@ static docstring const lyxarrow_def = from_ascii(
        "{\\leavevmode\\,$\\triangleleft$\\,\\allowbreak}\n"
        "{\\leavevmode\\,$\\triangleright$\\,\\allowbreak}}");
 
+// ZERO WIDTH SPACE (ZWSP) is actually not a space character
+// but marks a line break opportunity. Several commands provide a
+// line break opportunity. They differ in side-effects:
+// \allowbreak prevents hyphenation after hyphen or dash + ZWSP
+// \linebreak[<n>] takes an optional argument denoting "urgency".
+// The \LyXZeroWidthSpace wrapper allows customization in the preamble.
+static docstring const lyxZWSP_def = from_ascii(
+       "\\newcommand*\\LyXZeroWidthSpace{\\hspace{0pt}}");
+
 // for quotes without babel. This does not give perfect results, but
 // anybody serious about non-english quotes should use babel (JMarc).
 
@@ -123,19 +132,19 @@ static docstring const textquotedbl_def = from_ascii(
 
 static docstring const textquotedblp_xetex_def = from_ascii(
        "\\providecommand\\textquotedblplain{%\n"
-       "  \\bgroup\\addfontfeatures{Mapping=}\\textquotedbl\\egroup}");
+       "  \\bgroup\\addfontfeatures{Mapping=}\\char34\\egroup}");
 
 static docstring const textquotedblp_luatex_def = from_ascii(
        "\\providecommand\\textquotedblplain{%\n"
-       "  \\bgroup\\addfontfeatures{RawFeature=-tlig}\\textquotedbl\\egroup}");
+       "  \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char34\\egroup}");
 
 static docstring const textquotesinglep_xetex_def = from_ascii(
        "\\providecommand\\textquotesingleplain{%\n"
-       "  \\bgroup\\addfontfeatures{Mapping=}\\textquotesingle\\egroup}");
+       "  \\bgroup\\addfontfeatures{Mapping=}\\char39\\egroup}");
 
 static docstring const textquotesinglep_luatex_def = from_ascii(
        "\\providecommand\\textquotesingleplain{%\n"
-       "  \\bgroup\\addfontfeatures{RawFeature=-tlig}\\textquotesingle\\egroup}");
+       "  \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char39\\egroup}");
 
 static docstring const paragraphleftindent_def = from_ascii(
        "\\newenvironment{LyXParagraphLeftIndent}[1]%\n"
@@ -410,6 +419,19 @@ static docstring const rtloutputdblcol_def = from_ascii(
        "}\n"
        "\\@mparswitchtrue\n");
 
+static docstring const lyxmintcaption_def = from_ascii(
+       "\\long\\def\\lyxmintcaption[#1]#2{%\n"
+       "  \\ifx#1t\\vskip\\baselineskip\\fi%\n"
+       "  \\refstepcounter{listing}\\noindent%\n"
+       "  \\addcontentsline{lol}{listing}%\n"
+       "  {\\protect\\numberline{\\thelisting}{\\ignorespaces #2}}%\n"
+       "  \\setbox\\@tempboxa\\hbox{\\listingscaption~\\thelisting: #2}%\n"
+       "  \\ifdim \\wd\\@tempboxa >\\linewidth%\n"
+       "  \\parbox[t]{\\linewidth}{\\unhbox\\@tempboxa}\\else%\n"
+       "  \\hbox to\\linewidth{\\hfil\\box\\@tempboxa\\hfil}\\fi%\n"
+       "  \\ifx#1b\\vskip\\baselineskip\\fi\n"
+       "}\n");
+
 
 /////////////////////////////////////////////////////////////////////
 //
@@ -591,8 +613,8 @@ bool LaTeXFeatures::isProvided(string const & name) const
        if (params_.useNonTeXFonts)
                return params_.documentClass().provides(name);
 
-       bool const ot1 = (params_.font_encoding() == "default"
-               || params_.font_encoding() == "OT1");
+       bool const ot1 = (params_.main_font_encoding() == "default"
+               || params_.main_font_encoding() == "OT1");
        bool const complete = (params_.fontsSans() == "default"
                && params_.fontsTypewriter() == "default");
        bool const nomath = (params_.fontsMath() == "default");
@@ -1089,7 +1111,8 @@ string const LaTeXFeatures::getPackages() const
        // if fontspec or newtxmath is used, AMS packages have to be loaded
        // before fontspec (in BufferParams)
        string const amsPackages = loadAMSPackages();
-       bool const ot1 = (params_.font_encoding() == "default" || params_.font_encoding() == "OT1");
+       bool const ot1 = (params_.main_font_encoding() == "default"
+                         || params_.main_font_encoding() == "OT1");
        bool const use_newtxmath =
                theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage(
                        ot1, false, false) == "newtxmath";
@@ -1316,16 +1339,19 @@ TexString LaTeXFeatures::getMacros() const
        if (mustProvide("lyxarrow"))
                macros << lyxarrow_def << '\n';
 
+       if (mustProvide("lyxzerowidthspace"))
+               macros << lyxZWSP_def << '\n';
+
        if (!usePolyglossia() && mustProvide("textgreek")) {
            // ensure LGR font encoding is defined also if fontenc is not loaded by LyX
-               if (params_.font_encoding() == "default")
+               if (params_.main_font_encoding() == "default")
                        macros << textgreek_LGR_def;
                macros << textgreek_def << '\n';
        }
 
        if (!usePolyglossia() && mustProvide("textcyr")) {
                // ensure T2A font encoding is set up also if fontenc is not loaded by LyX
-               if (params_.font_encoding() == "default")
+               if (params_.main_font_encoding() == "default")
                        macros << textcyr_T2A_def;
                macros << textcyr_def << '\n';
        }
@@ -1478,6 +1504,9 @@ TexString LaTeXFeatures::getMacros() const
        if (mustProvide("rtloutputdblcol"))
                macros << rtloutputdblcol_def;
 
+       if (mustProvide("lyxmintcaption"))
+               macros << lyxmintcaption_def;
+
        return macros.release();
 }
 
@@ -1568,7 +1597,10 @@ docstring const LaTeXFeatures::getTClassPreamble() const
        list<docstring>::const_iterator cit = usedLayouts_.begin();
        list<docstring>::const_iterator end = usedLayouts_.end();
        for (; cit != end; ++cit)
-               tcpreamble << tclass[*cit].preamble();
+               // For InPreamble layouts, we output the preamble stuff earlier
+               // (before the layouts). See Paragraph::Private::validate.
+               if (!tclass[*cit].inpreamble)
+                       tcpreamble << tclass[*cit].preamble();
 
        cit = usedInsetLayouts_.begin();
        end = usedInsetLayouts_.end();
@@ -1741,7 +1773,8 @@ docstring const i18npreamble(docstring const & templ, Language const * lang,
 }
 
 
-docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel, bool use_polyglossia) const
+docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel,
+                               bool use_polyglossia, bool use_minted) const
 {
        DocumentClass const & tclass = params_.documentClass();
        // collect preamble snippets in a set to prevent multiple identical
@@ -1823,8 +1856,9 @@ docstring const LaTeXFeatures::getTClassI18nPreamble(bool use_babel, bool use_po
                // need to force a fixed width encoding for
                // \lstlistlistingname and \lstlistingname (bug 9382).
                // This needs to be consistent with InsetListings::latex().
-               bool const need_fixedwidth = !runparams_.isFullUnicode() &&
-                               it->second.fixedwidthpreambleencoding();
+               bool const need_fixedwidth = !use_minted &&
+                                       !runparams_.isFullUnicode() &&
+                                       it->second.fixedwidthpreambleencoding();
                // language dependent commands (once per document)
                snippets.insert(i18npreamble(it->second.langpreamble(),
                                                buffer().language(),