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;
}
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())
}
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_;
}
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())
if (xrefit != end())
xrefptrs.push_back(&(xrefit->second));
}
- return data.getInfo(xrefptrs, buf, ci, format);
+ return data.getInfo(xrefptrs, buf, ci, format, for_xhtml);
}
/// \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,
/// 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,
}
-docstring Encodings::convertLaTeXCommands(docstring const & str)
+docstring Encodings::convertLaTeXCommands(docstring const & str, bool const for_xhtml)
{
docstring val = str;
docstring ret;
// 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 == '\\')
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 {
///
// 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();