#include "LaTeXFeatures.h"
#include "LyXAction.h"
#include "Lexer.h"
-#include "LyXText.h"
+#include "Text.h"
+#include "LyX.h"
#include "LyXRC.h"
#include "LyXVC.h"
#include "Messages.h"
namespace {
-int const LYX_FORMAT = 265;
+int const LYX_FORMAT = 271;
} // namespace anon
*/
bool file_fully_loaded;
- /// our LyXText that should be wrapped in an InsetText
+ /// our Text that should be wrapped in an InsetText
InsetText inset;
///
}
-LyXText & Buffer::text() const
+Text & Buffer::text() const
{
- return const_cast<LyXText &>(pimpl_->inset.text_);
+ return const_cast<Text &>(pimpl_->inset.text_);
}
params().headheight.erase();
params().headsep.erase();
params().footskip.erase();
+ params().listings_params.clear();
for (int i = 0; i < 4; ++i) {
params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i];
params().temp_bullet(i) = ITEMIZE_DEFAULTS[i];
BOOST_ASSERT(paragraphs().empty());
readHeader(lex);
- if (!params().getLyXTextClass().load(filePath())) {
- string theclass = params().getLyXTextClass().name();
+ if (!params().getTextClass().load(filePath())) {
+ string theclass = params().getTextClass().name();
Alert::error(_("Can't load document class"), bformat(
_("Using the default document class, because the "
"class %1$s could not be loaded."), from_utf8(theclass)));
params().textclass = 0;
}
+ if (params().outputChanges) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (!dvipost && !xcolorsoul) {
+ Alert::warning(_("Changes not shown in LaTeX output"),
+ _("Changes will not be highlighted in LaTeX output, "
+ "because neither dvipost nor xcolor/soul are installed.\n"
+ "Please install these packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ } else if (!xcolorsoul) {
+ Alert::warning(_("Changes not shown in LaTeX output"),
+ _("Changes will not be highlighted in LaTeX output "
+ "when using pdflatex, because xcolor and soul are not installed.\n"
+ "Please install both packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ }
+ }
+
bool const res = text().read(*this, lex, errorList);
for_each(text().paragraphs().begin(),
text().paragraphs().end(),
// needed to insert the selection
void Buffer::insertStringAsLines(ParagraphList & pars,
pit_type & pit, pos_type & pos,
- LyXFont const & fn, docstring const & str, bool autobreakrows)
+ Font const & fn, docstring const & str, bool autobreakrows)
{
- LyXFont font = fn;
+ Font font = fn;
// insert the string, don't insert doublespace
bool space_inserted = true;
if (!openFileWrite(ofs, fname))
return false;
+ bool failed_export = false;
try {
writeLaTeXSource(ofs, original_path,
runparams, output_preamble, output_body);
}
- catch (iconv_codecvt_facet_exception &) {
- Alert::error(_("Encoding error"),
- _("Some characters of your document are not "
- "representable in the chosen encoding.\n"
- "Changing the document encoding to utf8 could help."));
- return false;
+ catch (iconv_codecvt_facet_exception & e) {
+ lyxerr << "Caught iconv exception: " << e.what() << endl;
+ failed_export = true;
+ }
+ catch (std::exception const & e) {
+ lyxerr << "Caught \"normal\" exception: " << e.what() << endl;
+ failed_export = true;
+ }
+ catch (...) {
+ lyxerr << "Caught some really weird exception..." << endl;
+ LyX::cref().emergencyCleanup();
+ abort();
}
ofs.close();
if (ofs.fail()) {
+ failed_export = true;
lyxerr << "File '" << fname << "' was not closed properly." << endl;
- Alert::error(_("Error closing file"),
- _("The output file could not be closed properly.\n"
- " Probably some characters of your document are not "
- "representable in the chosen encoding.\n"
- "Changing the document encoding to utf8 could help."));
+ }
+
+ if (failed_export) {
+ Alert::error(_("Encoding error"),
+ _("Some characters of your document are probably not "
+ "representable in the chosen encoding.\n"
+ "Changing the document encoding to utf8 could help."));
return false;
}
return true;
} // output_preamble
LYXERR(Debug::INFO) << "preamble finished, now the body." << endl;
- if (!lyxrc.language_auto_begin) {
+ if (!lyxrc.language_auto_begin &&
+ !params().language->babel().empty()) {
// FIXME UNICODE
os << from_utf8(subst(lyxrc.language_command_begin,
"$$lang",
texrow().newline();
}
+ Encoding const & encoding = params().encoding();
+ if (encoding.package() == Encoding::CJK) {
+ // Open a CJK environment, since in contrast to the encodings
+ // handled by inputenc the document encoding is not set in
+ // the preamble if it is handled by CJK.sty.
+ os << "\\begin{CJK}{" << from_ascii(encoding.latexName())
+ << "}{}\n";
+ texrow().newline();
+ }
+
// if we are doing a real file with body, even if this is the
// child of some other buffer, let's cut the link here.
// This happens for example if only a child document is printed.
os << endl;
texrow().newline();
- if (!lyxrc.language_auto_end) {
+ if (encoding.package() == Encoding::CJK) {
+ // Close the open CJK environment.
+ // latexParagraphs will have opened one even if the last text
+ // was not CJK.
+ os << "\\end{CJK}\n";
+ texrow().newline();
+ }
+
+ if (!lyxrc.language_auto_end &&
+ !params().language->babel().empty()) {
os << from_utf8(subst(lyxrc.language_command_end,
"$$lang",
params().language->babel()))
bool Buffer::isLatex() const
{
- return params().getLyXTextClass().outputType() == LATEX;
+ return params().getTextClass().outputType() == LATEX;
}
bool Buffer::isLiterate() const
{
- return params().getLyXTextClass().outputType() == LITERATE;
+ return params().getTextClass().outputType() == LITERATE;
}
bool Buffer::isDocBook() const
{
- return params().getLyXTextClass().outputType() == DOCBOOK;
+ return params().getTextClass().outputType() == DOCBOOK;
}
texrow().reset();
- LyXTextClass const & tclass = params().getLyXTextClass();
+ TextClass const & tclass = params().getTextClass();
string const top_element = tclass.latexname();
if (!only_body) {
<< " file was created by LyX " << lyx_version
<< "\n See http://www.lyx.org/ for more information -->\n";
- params().getLyXTextClass().counters().reset();
+ params().getTextClass().counters().reset();
sgml::openTag(os, top);
os << '\n';
void Buffer::validate(LaTeXFeatures & features) const
{
- LyXTextClass const & tclass = params().getLyXTextClass();
-
- if (features.isAvailable("dvipost") && params().outputChanges)
- features.require("dvipost");
+ TextClass const & tclass = params().getTextClass();
+
+ if (params().outputChanges) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (features.runparams().flavor == OutputParams::LATEX) {
+ if (dvipost) {
+ features.require("ct-dvipost");
+ features.require("dvipost");
+ } else if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ } else {
+ features.require("ct-none");
+ }
+ } else if (features.runparams().flavor == OutputParams::PDFLATEX ) {
+ if (xcolorsoul) {
+ features.require("ct-xcolor-soul");
+ features.require("soul");
+ features.require("xcolor");
+ features.require("pdfcolmk"); // improves color handling in PDF output
+ } else {
+ features.require("ct-none");
+ }
+ }
+ }
// AMS Style is at document level
if (params().use_amsmath == BufferParams::package_on
docstring const Buffer::B_(string const & l10n) const
{
- Language const * lang = pimpl_->params.language;
- if (lang)
- return getMessages(lang->code()).get(l10n);
-
- return _(l10n);
+ return params().B_(l10n);
}
if (!params().parentname.empty()
&& theBufferList().exists(params().parentname)) {
Buffer const * buf = theBufferList().getBuffer(params().parentname);
- if (buf)
+ //We need to check if the parent is us...
+ //FIXME RECURSIVE INCLUDE
+ //This is not sufficient, since recursive includes could be downstream.
+ if (buf && buf != this)
return buf->getMasterBuffer();
}
runparams.dryrun = true;
if (full_source) {
- os << "% Preview source code\n\n";
+ os << "% " << _("Preview source code") << "\n\n";
if (isLatex())
writeLaTeXSource(os, filePath(), runparams, true, true);
else {
runparams.par_begin = par_begin;
runparams.par_end = par_end;
if (par_begin + 1 == par_end)
- os << "% Preview source code for paragraph " << par_begin << "\n\n";
+ os << "% "
+ << bformat(_("Preview source code for paragraph %1$s"), par_begin)
+ << "\n\n";
else
- os << "% Preview source code from paragraph " << par_begin
- << " to " << par_end - 1 << "\n\n";
+ os << "% "
+ << bformat(_("Preview source code from paragraph %1$s to %2$s"),
+ convert<docstring>(par_begin),
+ convert<docstring>(par_end - 1))
+ << "\n\n";
// output paragraphs
if (isLatex()) {
texrow().reset();