]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Differentiate backups from autosave files (#12659)
[lyx.git] / src / Buffer.cpp
index 94f4dd477c4fc86b0f2b2cf7bd697313d87515e0..4d7adc3534bc4e1b41f6268605458f49e17d7ddc 100644 (file)
@@ -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";
                        }