/// whether the bibinfo cache is valid
mutable bool bibinfo_cache_valid_;
+ ///
+ mutable bool need_update;
+
private:
int word_count_;
int char_count_;
internal_buffer(false), read_only(readonly_), file_fully_loaded(false),
need_format_backup(false), ignore_parent(false), macro_lock(false),
externally_modified_(false), bibinfo_cache_valid_(false),
- word_count_(0), char_count_(0), blank_count_(0)
+ need_update(false), word_count_(0), char_count_(0), blank_count_(0)
{
refreshFileMonitor();
if (!cloned_buffer_) {
// The clone needs its own DocumentClass, since running updateBuffer() will
// modify it, and we would otherwise be sharing it with the original Buffer.
buffer_clone->params().makeDocumentClass(true);
- ErrorList el;
cap::switchBetweenClasses(
params().documentClassPtr(), buffer_clone->params().documentClassPtr(),
- static_cast<InsetText &>(buffer_clone->inset()), el);
+ static_cast<InsetText &>(buffer_clone->inset()));
bufmap[this] = buffer_clone;
clones->insert(buffer_clone);
// The clone needs its own DocumentClass, since running updateBuffer() will
// modify it, and we would otherwise be sharing it with the original Buffer.
buffer_clone->params().makeDocumentClass(true);
- ErrorList el;
cap::switchBetweenClasses(
params().documentClassPtr(), buffer_clone->params().documentClassPtr(),
- static_cast<InsetText &>(buffer_clone->inset()), el);
+ static_cast<InsetText &>(buffer_clone->inset()));
clones->insert(buffer_clone);
buffer_clone->d->clone_list_ = clones;
params().biblatex_citestyle.erase();
params().multibib.erase();
params().lineno_opts.clear();
+ params().spellignore().clear();
for (int i = 0; i < 4; ++i) {
params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i];
<< token << '\'');
string const result =
- params().readToken(lex, token, d->filename.onlyPath());
+ params().readToken(lex, token, d->filename);
if (!result.empty()) {
if (token == "\\textclass") {
d->layout_position = result;
OutputParams runparams = runparams_in;
string const encoding = runparams.encoding->iconvName();
- LYXERR(Debug::LATEX, "makeLaTeXFile encoding: " << encoding << ", fname=" << fname.realPath());
+ LYXERR(Debug::OUTFILE, "makeLaTeXFile encoding: " << encoding << ", fname=" << fname.realPath());
ofdocstream ofs;
try { ofs.reset(encoding); }
BufferEncodings::initUnicodeMath(*this);
// validate the buffer.
- LYXERR(Debug::LATEX, " Validating buffer...");
+ LYXERR(Debug::OUTFILE, " Validating buffer...");
LaTeXFeatures features(*this, params(), runparams);
validate(features);
// This is only set once per document (in master)
runparams.use_hyperref = features.isRequired("hyperref");
runparams.use_CJK = features.mustProvide("CJK");
}
- LYXERR(Debug::LATEX, " Buffer validation done.");
+ LYXERR(Debug::OUTFILE, " Buffer validation done.");
bool const output_preamble =
output == FullSource || output == OnlyPreamble;
if (output_preamble) {
os << "\\end{document}\n";
- LYXERR(Debug::LATEX, "makeLaTeXFile...done");
+ LYXERR(Debug::OUTFILE, "makeLaTeXFile...done");
} else {
- LYXERR(Debug::LATEX, "LaTeXFile for inclusion made.");
+ LYXERR(Debug::OUTFILE, "LaTeXFile for inclusion made.");
}
runparams_in.encoding = runparams.encoding;
OutputParams const & runparams,
OutputWhat output) const
{
- LYXERR(Debug::LATEX, "makeDocBookFile...");
+ LYXERR(Debug::OUTFILE, "makeDocBookFile...");
ofdocstream ofs;
if (!openFileWrite(ofs, fname))
updateBuffer();
updateMacroInstances(OutputUpdate);
- ExportStatus const retval =
- writeDocBookSource(ofs, runparams, output);
+ ExportStatus const retval = writeDocBookSource(ofs, runparams, output);
if (retval == ExportKilled)
return ExportKilled;
bool const output_preamble =
output == FullSource || output == OnlyPreamble;
bool const output_body =
- output == FullSource || output == OnlyBody || output == IncludedFile;
+ output == FullSource || output == OnlyBody || output == IncludedFile;
if (output_preamble) {
// XML preamble, no doctype needed.
<< "<!-- This DocBook file was created by LyX " << lyx_version
<< "\n See https://www.lyx.org/ for more information -->\n";
+ // Prepare the name space declaration for MathML depending on document preferences.
+ string mathmlNamespace;
+ if (params().docbook_mathml_prefix != BufferParams::NoPrefix) {
+ string mathmlPrefix;
+ if (params().docbook_mathml_prefix == BufferParams::MPrefix)
+ mathmlPrefix = "m";
+ else if (params().docbook_mathml_prefix == BufferParams::MMLPrefix)
+ mathmlPrefix = "mml";
+ mathmlNamespace = + " xmlns:" + mathmlPrefix + "=\"http://www.w3.org/1998/Math/MathML\"";
+ }
+
// 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\""
- + " xmlns:m=\"http://www.w3.org/1998/Math/MathML\""
+ + mathmlNamespace
+ " xmlns:xi=\"http://www.w3.org/2001/XInclude\""
+ " version=\"5.2\"";
Buffer::ExportStatus Buffer::makeLyXHTMLFile(FileName const & fname,
OutputParams const & runparams) const
{
- LYXERR(Debug::LATEX, "makeLyXHTMLFile...");
+ LYXERR(Debug::OUTFILE, "makeLyXHTMLFile...");
ofdocstream ofs;
if (!openFileWrite(ofs, fname))
for (Paragraph const & p : paragraphs())
p.validate(features);
- if (lyxerr.debugging(Debug::LATEX)) {
+ if (lyxerr.debugging(Debug::OUTFILE)) {
features.showStruct();
}
}
-void Buffer::getLabelList(vector<docstring> & list) const
+void Buffer::getLabelList(vector<std::pair<docstring, docstring>> & list) const
{
// If this is a child document, use the master's list instead.
if (parent()) {
shared_ptr<Toc> toc = d->toc_backend.toc("label");
for (auto const & tocit : *toc) {
if (tocit.depth() == 0)
- list.push_back(tocit.str());
+ list.push_back(make_pair(tocit.str(), tocit.asString()));
}
}
undo().recordUndoBufferParams(CursorData());
branch_list.add(branch_name);
branch = branch_list.find(branch_name);
- string x11hexname;
- string const bcolor = branch->color();
- if (bcolor.size() == 7 && bcolor[0] == '#')
- x11hexname = bcolor;
- else {
- bool const darkmode = theApp() ? theApp()->isInDarkMode() : false;
- x11hexname = lcolor.getX11HexName(lcolor.getFromLyXName(bcolor), darkmode);
- }
- docstring const str = branch_name + ' ' + from_ascii(x11hexname);
- lyx::dispatch(FuncRequest(LFUN_SET_COLOR, str));
+ if (branch)
+ // needed to update the color table for dark mode
+ branch->setColors("background", "background");
dr.setError(false);
dr.screenUpdate(Update::Force);
}
// FIXME (Abdel), I don't understand why we pass 'it' here
// instead of 'macroTemplate' defined above... is this correct?
macros[macroTemplate.name()][it] =
- Impl::ScopeMacro(scope, MacroData(const_cast<Buffer *>(owner_), it));
+ Impl::ScopeMacro(scope, MacroData(owner_, it));
}
// next paragraph
void Buffer::setMathFlavor(OutputParams & op) const
{
+ // Passes the way to generate formulae to the XHTML output code.
+ // In particular, this function has no impact on the DocBook code, as it
+ // uses another mechanism to handle math flavours.
switch (params().html_math_output) {
case BufferParams::MathML:
op.math_flavor = OutputParams::MathAsMathML;
Converters converters = theConverters();
bool need_nice_file = false;
if (find(backs.begin(), backs.end(), format) == backs.end()) {
- // Get shortest path to format
+ // Get the shortest path to format
converters.buildGraph();
Graph::EdgePath path;
for (string const & sit : backs) {
result_file = changeExtension(d->exportFileName().absFileName(), ext);
else
result_file = dest_filename;
- // We need to copy referenced files (e. g. included graphics
+ // We need to copy referenced files (e.g. included graphics
// if format == "dvi") to the result dir.
vector<ExportedFile> const extfiles =
runparams.exportdata->externalFiles(format);
"%1$s exists.\n\nRecover emergency save?"), file);
int const load_emerg = Alert::prompt(_("Load emergency save?"), text,
- 0, 2, _("&Recover"), _("&Load Original"), _("&Cancel"));
+ 0, 3, _("&Recover"), _("&Load Original"), _("&Only show difference"), _("&Cancel"));
switch (load_emerg)
{
return ReadOriginal;
}
+ case 2: {
+ string const f1 = d->filename.absFileName();
+ string const f2 = emergencyFile.absFileName();
+ if (loadThisLyXFile(d->filename) != ReadSuccess)
+ return ReadCancel;
+ string const par = "compare run-blocking " + quoteName(f1) + " " + quoteName(f2);
+ LYXERR(Debug::FILES, par << "\n");
+ lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, par));
+
+ //release the emergency buffer loaded by compare
+ Buffer * emerBuffer = theBufferList().getBuffer(emergencyFile);
+ if (emerBuffer)
+ theBufferList().release(emerBuffer);
+
+ return ReadCancel; //Release the buffer of Original immediatelly
+ }
default:
break;
}
}
+void Buffer::updateBuffer() const
+{
+ updateBuffer(UpdateMaster, InternalUpdate);
+ d->need_update = false;
+}
+
+
void Buffer::updateBuffer(UpdateScope scope, UpdateType utype) const
{
LBUFERR(!text().paragraphs().empty());
cbuf.tocBackend().update(true, utype);
if (scope == UpdateMaster)
cbuf.structureChanged();
+
+ d->need_update = false;
}
switch(layout.labeltype) {
case LABEL_ITEMIZE: {
- // At some point of time we should do something more
- // clever here, like:
- // par.params().labelString(
- // bp.user_defined_bullet(par.itemdepth).getText());
- // for now, use a simple hardcoded label
- docstring itemlabel;
- switch (par.itemdepth) {
- case 0:
- // • U+2022 BULLET
- itemlabel = char_type(0x2022);
- break;
- case 1:
- // – U+2013 EN DASH
- itemlabel = char_type(0x2013);
- break;
- case 2:
- // ∗ U+2217 ASTERISK OPERATOR
- itemlabel = char_type(0x2217);
- break;
- case 3:
- // · U+00B7 MIDDLE DOT
- itemlabel = char_type(0x00b7);
- break;
- }
- par.params().labelString(itemlabel);
+ par.params().labelString(
+ bp.user_defined_bullet(par.itemdepth).getUnicode());
break;
}
}
+void Buffer::forceUpdate() const
+{
+ d->need_update = true;
+}
+
+
+bool Buffer::needUpdate() const
+{
+ return d->need_update;
+}
+
+
int Buffer::spellCheck(DocIterator & from, DocIterator & to,
WordLangTuple & word_lang, docstring_list & suggestions) const
{
}
+void Buffer::requestSpellcheck()
+{
+ ParagraphList::iterator pit = paragraphs().begin();
+ ParagraphList::iterator pend = paragraphs().end();
+ for (; pit != pend; ++pit)
+ pit->requestSpellCheck();
+}
+
+
void Buffer::Impl::updateStatistics(DocIterator & from, DocIterator & to, bool skipNoOutput)
{
bool inword = false;