]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Added distribution of a missing file used by tests.
[lyx.git] / src / LaTeXFeatures.cpp
index b4de991828759ce450e5be43c1cd5cb045a4894a..55db95350386506ffdbb6673b4f19ef90854dbcf 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"
@@ -591,8 +600,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 +1098,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 +1326,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';
        }
@@ -1568,7 +1581,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();