diff --git a/ANNOUNCE b/ANNOUNCE index 4ef2d125b5..7ebb35f580 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -33,6 +33,12 @@ http://www.lyx.org What's new in LyX 2.0.5 ======================= +The View>Source widget now allows you to select the backend to display, +e.g., LaTeX or XHTML, rather than the output format. The previous choice +really made no sense: You didn't see a PDF there if you chose one of the +PDF output formats, but rather LaTeX. This solves some long-standing issues +with View>Source. + What's new ========== diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 6560da7343..2ed74091c7 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -3225,6 +3225,12 @@ void Buffer::getSourceCode(odocstream & os, string const format, else if (runparams.flavor == OutputParams::HTML) { XHTMLStream xs(os); xhtmlParagraphs(text(), *this, xs, runparams); + } else if (runparams.flavor == OutputParams::TEXT) { + bool dummy; + // FIXME Handles only one paragraph, unlike the others. + // Probably should have some routine with a signature like them. + writePlaintextParagraph(*this, + text().paragraphs()[par_begin], os, runparams, dummy); } else { // latex or literate otexstream ots(os, texrow); diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index c64597c3a1..cb3d673b16 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -2130,17 +2130,24 @@ bool BufferParams::isExportableFormat(string const & format) const vector BufferParams::backends() const { vector v; - v.push_back(bufferFormat()); + string const buffmt = bufferFormat(); + // FIXME: Don't hardcode format names here, but use a flag - if (v.back() == "latex") { - v.push_back("pdflatex"); + if (buffmt == "latex") { + if (!useNonTeXFonts) { + v.push_back("pdflatex"); + v.push_back("latex"); + } v.push_back("luatex"); v.push_back("dviluatex"); v.push_back("xetex"); - } else if (v.back() == "xetex") { + } else if (buffmt == "xetex") { + v.push_back("xetex"); v.push_back("luatex"); v.push_back("dviluatex"); - } + } else + v.push_back(buffmt); + v.push_back("xhtml"); v.push_back("text"); v.push_back("lyx"); @@ -2162,6 +2169,8 @@ OutputParams::FLAVOR BufferParams::getOutputFlavor(string const format) const if (dformat == "xhtml") result = OutputParams::HTML; + else if (dformat == "text") + result = OutputParams::TEXT; else { // Try to determine flavor of default output format vector backs = backends(); diff --git a/src/BufferParams.h b/src/BufferParams.h index 2c4828e1c4..bb29f01d52 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -176,7 +176,8 @@ public: std::vector exportableFormats(bool only_viewable) const; /// bool isExportableFormat(std::string const & format) const; - /// + /// the backends appropriate for use with this document. + /// so, e.g., latex is excluded , if we're using non-TeX fonts std::vector backends() const; /// List of included children (for includeonly) diff --git a/src/frontends/qt4/GuiViewSource.cpp b/src/frontends/qt4/GuiViewSource.cpp index 8a2309d75d..6a49febd7d 100644 --- a/src/frontends/qt4/GuiViewSource.cpp +++ b/src/frontends/qt4/GuiViewSource.cpp @@ -197,19 +197,23 @@ void ViewSourceWidget::updateDefaultFormat() outputFormatCO->addItem(qt_("Default"), QVariant(QString("default"))); - int index = 0; - typedef vector Formats; - Formats formats = bv_->buffer().params().exportableFormats(true); - Formats::const_iterator cit = formats.begin(); - Formats::const_iterator end = formats.end(); - for (; cit != end; ++cit) { - QString const fname = toqstr((*cit)->name()); - outputFormatCO->addItem(qt_((*cit)->prettyname()), - QVariant(fname)); - if (fname == view_format_) - index = outputFormatCO->count() -1; + vector tmp = bv_->buffer().params().backends(); + vector::const_iterator it = tmp.begin(); + vector::const_iterator en = tmp.end(); + for (; it != en; ++it) { + string const format = *it; + Format const * fmt = formats.getFormat(format); + if (!fmt) + LYXERR0("Can't find format for backend " << format << "!"); + else if (fmt->name() == "lyx") + // we can't presently display the LyX format itself + continue; + + QString const pretty = + fmt ? qt_(fmt->prettyname()) : toqstr(format); + outputFormatCO->addItem(pretty, QVariant(toqstr(format))); } - outputFormatCO->setCurrentIndex(index); + outputFormatCO->blockSignals(false); } diff --git a/status.20x b/status.20x index 304a32972a..3de50eb3af 100644 --- a/status.20x +++ b/status.20x @@ -36,6 +36,7 @@ What's new * USER INTERFACE +- Show backends, not formats, in View>Source (bug #7652). * DOCUMENTATION AND LOCALIZATION