]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Differentiate backups from autosave files (#12659)
[lyx.git] / src / Buffer.cpp
index 34291542e89191be1a1d6f5ec63079cced7358de..4d7adc3534bc4e1b41f6268605458f49e17d7ddc 100644 (file)
@@ -1966,7 +1966,7 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os,
                                        docdir = subst(docdir, "~", "\\string~");
                                bool const nonascii = !isAscii(from_utf8(docdir));
                                // LaTeX 2019/10/01 handles non-ascii path without detokenize
-                               bool const utfpathlatex = features.isAvailable("LaTeX-2019/10/01");
+                               bool const utfpathlatex = features.isAvailableAtLeastFrom("LaTeX", 2019, 10);
                                bool const detokenize = !utfpathlatex && nonascii;
                                bool const quote = contains(docdir, ' ');
                                if (utfpathlatex && nonascii)
@@ -2172,16 +2172,22 @@ Buffer::ExportStatus Buffer::writeDocBookSource(odocstream & os,
                        mathmlNamespace = + " xmlns:" + mathmlPrefix + "=\"http://www.w3.org/1998/Math/MathML\"";
                }
 
+               // XML-compatible language code: in lib/languages, language codes are
+               // given as dictionary file names; HTML5 expects to follow BCP47. This
+               // function implements a simple heuristic that does the conversion.
+               std::string htmlCode = params().language->code();
+               std::replace(htmlCode.begin(), htmlCode.end(), '_', '-');
+
                // Directly output the root tag, based on the current type of document.
-               string languageCode = params().language->code();
-               string params = "xml:lang=\"" + languageCode + '"'
-                                               + " xmlns=\"http://docbook.org/ns/docbook\""
-                                               + " xmlns:xlink=\"http://www.w3.org/1999/xlink\""
-                                               + mathmlNamespace
-                                               + " xmlns:xi=\"http://www.w3.org/2001/XInclude\""
-                                               + " version=\"5.2\"";
+               string attributes = "xml:lang=\"" + htmlCode + '"'
+                                                   + " xmlns=\"http://docbook.org/ns/docbook\""
+                                                   + " xmlns:xlink=\"http://www.w3.org/1999/xlink\""
+                                                   + mathmlNamespace
+                                                   + " xmlns:xi=\"http://www.w3.org/2001/XInclude\""
+                                                   + " version=\"5.2\"";
+               // Version 5.2 is required for formalgroup.
 
-               os << "<" << from_ascii(tclass.docbookroot()) << " " << from_ascii(params) << ">\n";
+               os << "<" << from_ascii(tclass.docbookroot()) << " " << from_ascii(attributes) << ">\n";
        }
 
        if (output_body) {
@@ -2239,14 +2245,16 @@ Buffer::ExportStatus Buffer::writeLyXHTMLSource(odocstream & os,
          output == FullSource || output == OnlyBody || output == IncludedFile;
 
        if (output_preamble) {
-               os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-                  << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd\">\n"
-                  // FIXME Language should be set properly.
-                  << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+               // HTML5-compatible language code: in lib/languages, language codes are
+               // given as dictionary file names; HTML5 expects to follow BCP47. This
+               // function implements a simple heuristic that does the conversion.
+               std::string htmlCode = params().language->code();
+               std::replace(htmlCode.begin(), htmlCode.end(), '_', '-');
+
+               os << "<!DOCTYPE html>\n"
+                  << "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"" << from_ascii(htmlCode) << "\">\n"
                   << "<head>\n"
-                  << "<meta name=\"GENERATOR\" content=\"" << PACKAGE_STRING << "\" />\n"
-                  // FIXME Presumably need to set this right
-                  << "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\" />\n";
+                  << "<meta name=\"generator\" content=\"" << PACKAGE_STRING << "\" />\n";
 
                docstring const & doctitle = features.htmlTitle();
                os << "<title>"
@@ -2306,7 +2314,7 @@ Buffer::ExportStatus Buffer::writeLyXHTMLSource(odocstream & os,
                        // we are here if the CSS is supposed to be written to the header
                        // or if we failed to write it to an external file.
                        if (!written) {
-                               os << "<style type='text/css'>\n"
+                               os << "<style>\n"
                                         << dstyles
                                         << "\n</style>\n";
                        }