]> git.lyx.org Git - lyx.git/commitdiff
amend 9291fc465b0d
authorJuergen Spitzmueller <spitz@lyx.org>
Wed, 24 Jul 2024 19:42:56 +0000 (21:42 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Wed, 24 Jul 2024 19:44:02 +0000 (21:44 +0200)
XHTML wants LaTeX math, nothing converted to unicode

src/BiblioInfo.cpp
src/BiblioInfo.h
src/Encoding.cpp
src/Encoding.h
src/insets/InsetBibtex.cpp

index d933bda4c966f65245567a5aed895c70b0a2df23..9458984f960ed895b05b5d3192cf90ca07cc11ef 100644 (file)
@@ -915,7 +915,8 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
 
 
 docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
-       Buffer const & buf, CiteItem const & ci, docstring const & format_in) const
+       Buffer const & buf, CiteItem const & ci, docstring const & format_in,
+       bool const for_xhtml) const
 {
        bool const richtext = ci.richtext;
 
@@ -933,7 +934,7 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
        }
 
        if (!richtext && !info_.empty()) {
-               info_ = Encodings::convertLaTeXCommands(processRichtext(info_, false));
+               info_ = Encodings::convertLaTeXCommands(processRichtext(info_, false), for_xhtml);
                return info_;
        }
        if (richtext && !info_richtext_.empty())
@@ -955,11 +956,11 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
        }
 
        if (richtext) {
-               info_richtext_ = Encodings::convertLaTeXCommands(processRichtext(info_, true));
+               info_richtext_ = Encodings::convertLaTeXCommands(processRichtext(info_, true), for_xhtml);
                return info_richtext_;
        }
 
-       info_ = Encodings::convertLaTeXCommands(processRichtext(info_, false));
+       info_ = Encodings::convertLaTeXCommands(processRichtext(info_, false), for_xhtml);
        return info_;
 }
 
@@ -1376,7 +1377,7 @@ docstring const BiblioInfo::getYear(docstring const & key, Buffer const & buf, b
 
 
 docstring const BiblioInfo::getInfo(docstring const & key,
-       Buffer const & buf, CiteItem const & ci, docstring const & format) const
+       Buffer const & buf, CiteItem const & ci, docstring const & format, bool const for_xhtml) const
 {
        BiblioInfo::const_iterator it = find(key);
        if (it == end())
@@ -1388,7 +1389,7 @@ docstring const BiblioInfo::getInfo(docstring const & key,
                if (xrefit != end())
                        xrefptrs.push_back(&(xrefit->second));
        }
-       return data.getInfo(xrefptrs, buf, ci, format);
+       return data.getInfo(xrefptrs, buf, ci, format, for_xhtml);
 }
 
 
index 6092894b40bc45b71e54e6dc15b783db9de6f38a..7b7a80e0581110adef983cb853a08739df714466 100644 (file)
@@ -81,7 +81,8 @@ public:
        /// \param vector of pointers to crossref/xdata information
        docstring const & getInfo(BibTeXInfoList const & xrefs,
                                  Buffer const & buf, CiteItem const & ci,
-                                 docstring const & format = docstring()) const;
+                                 docstring const & format = docstring(),
+                                 bool const for_xhtml = false) const;
        /// \return formatted BibTeX data for a citation label
        docstring const getLabel(BibTeXInfoList const & xrefs,
                Buffer const & buf, docstring const & format,
@@ -236,7 +237,8 @@ public:
        /// output any richtext tags marked in the citation format and escape < and >
        /// elsewhere, and the general output context.
        docstring const getInfo(docstring const & key, Buffer const & buf,
-                       CiteItem const & ci, docstring const & format = docstring()) const;
+                               CiteItem const & ci, docstring const & format = docstring(),
+                               bool const for_xhtml = false) const;
        /// \return formatted BibTeX data for citation labels.
        /// Citation labels can have more than one key.
        docstring const getLabel(std::vector<docstring> keys, Buffer const & buf,
index 54a5aebd150ca9dbe20975cf16e096376d51cddb..675834f63fe8875440e115c03f7079994b052d82 100644 (file)
@@ -614,7 +614,7 @@ docstring Encodings::fromLaTeXCommand(docstring const & cmd, int cmdtype,
 }
 
 
-docstring Encodings::convertLaTeXCommands(docstring const & str)
+docstring Encodings::convertLaTeXCommands(docstring const & str, bool const for_xhtml)
 {
        docstring val = str;
        docstring ret;
@@ -630,6 +630,20 @@ docstring Encodings::convertLaTeXCommands(docstring const & str)
                // if we're scanning math, we collect everything until we
                // find an unescaped $, and then try to convert this piecewise.
                if (scanning_math) {
+                       if (for_xhtml) {
+                               // with xhtml, we output everything until we
+                               // find an unescaped $, at which point we break out.
+                               if (escaped)
+                                       escaped = false;
+                               else if (ch == '\\')
+                                       escaped = true;
+                               else if (ch == '$')
+                                       scanning_math = false;
+                               ret += ch;
+                               val = val.substr(1);
+                               continue;
+                       }
+                       
                        if (escaped)
                                escaped = false;
                        else if (ch == '\\')
index 3177132514b23ab0784db3e0f2ef30df743dd8bd..1321a5ff617fbe786bd23e3ebdc3f538d2081e95 100644 (file)
@@ -351,7 +351,8 @@ public:
                        std::set<std::string> * req = nullptr);
        /// converts a string containing LaTeX commands into unicode
        /// for display.
-       static docstring convertLaTeXCommands(docstring const & str);
+       static docstring convertLaTeXCommands(docstring const & str,
+                                             bool const for_xhtml = false);
        ///
        enum LatexCmd {
                ///
index d452434ab5fe8b26810d9544b578fd852d880715..a6482d93153bf0b9d5f4bf7386fa57d446e8f1e6 100644 (file)
@@ -1075,7 +1075,7 @@ docstring InsetBibtex::xhtml(XMLStream & xs, OutputParams const &) const
                // entry, so there's a lot of repetition. This should be fixed.
                xs << xml::StartTag("span", "class='bibtexinfo'")
                   << XMLStream::ESCAPE_AND
-                  << bibinfo.getInfo(entry.key(), buffer(), ci)
+                  << bibinfo.getInfo(entry.key(), buffer(), ci, docstring(), true)
                   << xml::EndTag("span")
                   << xml::EndTag("div")
                   << xml::CR();