#include "output_latex.h"
#include "output_xhtml.h"
#include "output_plaintext.h"
-#include "paragraph_funcs.h"
#include "Paragraph.h"
#include "ParagraphParameters.h"
#include "ParIterator.h"
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-int const LYX_FORMAT = 362; // jspitzm: support applemac encoding
+int const LYX_FORMAT = 369; // vfr: add author ids to list of authors
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
string Buffer::latexName(bool const no_path) const
{
- FileName latex_name = makeLatexName(d->filename);
+ FileName latex_name =
+ makeLatexName(exportFileName());
return no_path ? latex_name.onlyFileName()
: latex_name.absFilename();
}
+FileName Buffer::exportFileName() const
+{
+ docstring const branch_suffix =
+ params().branchlist().getFilenameSuffix();
+ if (branch_suffix.empty())
+ return fileName();
+
+ string const name = fileName().onlyFileNameWithoutExt()
+ + to_utf8(branch_suffix);
+ FileName res(fileName().onlyPath().absFilename() + "/" + name);
+ res.changeExtension(fileName().extension());
+
+ return res;
+}
+
+
string Buffer::logName(LogType * type) const
{
string const filename = latexName(false);
}
// read main text
- bool const res = text().read(*this, lex, errorList, d->inset);
+ bool const res = text().read(lex, errorList, d->inset);
updateMacros();
updateMacroInstances();
}
-// needed to insert the selection
-void Buffer::insertStringAsLines(ParagraphList & pars,
- pit_type & pit, pos_type & pos,
- Font const & fn, docstring const & str, bool autobreakrows)
-{
- Font font = fn;
-
- // insert the string, don't insert doublespace
- bool space_inserted = true;
- for (docstring::const_iterator cit = str.begin();
- cit != str.end(); ++cit) {
- Paragraph & par = pars[pit];
- if (*cit == '\n') {
- if (autobreakrows && (!par.empty() || par.allowEmpty())) {
- breakParagraph(params(), pars, pit, pos,
- par.layout().isEnvironment());
- ++pit;
- pos = 0;
- space_inserted = true;
- } else {
- continue;
- }
- // do not insert consecutive spaces if !free_spacing
- } else if ((*cit == ' ' || *cit == '\t') &&
- space_inserted && !par.isFreeSpacing()) {
- continue;
- } else if (*cit == '\t') {
- if (!par.isFreeSpacing()) {
- // tabs are like spaces here
- par.insertChar(pos, ' ', font, params().trackChanges);
- ++pos;
- space_inserted = true;
- } else {
- par.insertChar(pos, *cit, font, params().trackChanges);
- ++pos;
- space_inserted = true;
- }
- } else if (!isPrintable(*cit)) {
- // Ignore unprintables
- continue;
- } else {
- // just insert the character
- par.insertChar(pos, *cit, font, params().trackChanges);
- ++pos;
- space_inserted = (*cit == ' ');
- }
-
- }
-}
-
-
bool Buffer::readString(string const & s)
{
params().compressed = false;
AuthorList::Authors::const_iterator a_it = params().authors().begin();
AuthorList::Authors::const_iterator a_end = params().authors().end();
for (; a_it != a_end; ++a_it)
- a_it->second.setUsed(false);
+ a_it->setUsed(false);
ParIterator const end = const_cast<Buffer *>(this)->par_iterator_end();
ParIterator it = const_cast<Buffer *>(this)->par_iterator_begin();
// write the text
ofs << "\n\\begin_body\n";
- text().write(*this, ofs);
+ text().write(ofs);
ofs << "\n\\end_body\n";
// Write marker that shows file is complete
sgml::openTag(os, top);
os << '\n';
- docbookParagraphs(paragraphs(), *this, os, runparams);
+ docbookParagraphs(text(), *this, os, runparams);
sgml::closeTag(os, top_element);
}
}
params().documentClass().counters().reset();
- xhtmlParagraphs(paragraphs(), *this, os, runparams);
+ xhtmlParagraphs(text(), *this, os, runparams);
if (!only_body)
os << "</body>\n</html>\n";
}
case LFUN_BRANCH_ACTIVATE:
case LFUN_BRANCH_DEACTIVATE: {
- BranchList const & branchList = params().branchlist();
- docstring const branchName = cmd.argument();
- flag.setEnabled(!branchName.empty()
+ BranchList const & branchList = params().branchlist();
+ docstring const branchName = cmd.argument();
+ flag.setEnabled(!branchName.empty()
&& branchList.find(branchName));
break;
}
}
case LFUN_BRANCHES_RENAME: {
+ if (func.argument().empty())
+ break;
+
docstring const oldname = from_utf8(func.getArg(0));
docstring const newname = from_utf8(func.getArg(1));
- renameBranches(oldname, newname);
+ InsetIterator it = inset_iterator_begin(inset());
+ InsetIterator const end = inset_iterator_end(inset());
+ bool success = false;
+ for (; it != end; ++it) {
+ if (it->lyxCode() == BRANCH_CODE) {
+ InsetBranch & ins = static_cast<InsetBranch &>(*it);
+ if (ins.branch() == oldname) {
+ undo().recordUndo(it);
+ ins.rename(newname);
+ success = true;
+ continue;
+ }
+ }
+ if (it->lyxCode() == INCLUDE_CODE) {
+ // get buffer of external file
+ InsetInclude const & ins =
+ static_cast<InsetInclude const &>(*it);
+ Buffer * child = ins.getChildBuffer();
+ if (!child)
+ continue;
+ child->dispatch(func, dr);
+ }
+ }
+
+ if (success)
+ dr.update(Update::Force);
break;
}
void Buffer::getUsedBranches(std::list<docstring> & result, bool const from_master) const
{
- // Iterate over buffer, starting with first paragraph
- // The scope must be bigger than any lookup DocIterator
- // later. For the global lookup, lastpit+1 is used, hence
- // we use lastpit+2 here.
- DocIterator it = par_iterator_begin();
- DocIterator scope = it;
- scope.pit() = scope.lastpit() + 2;
- pit_type lastpit = it.lastpit();
-
- while (it.pit() <= lastpit) {
- Paragraph & par = it.paragraph();
-
- // iterate over the insets of the current paragraph
- InsetList const & insets = par.insetList();
- InsetList::const_iterator iit = insets.begin();
- InsetList::const_iterator end = insets.end();
- for (; iit != end; ++iit) {
- it.pos() = iit->pos;
-
- if (iit->inset->lyxCode() == BRANCH_CODE) {
- // get buffer of external file
- InsetBranch const & br =
- static_cast<InsetBranch const &>(*iit->inset);
- docstring const name = br.branch();
- if (!from_master && !params().branchlist().find(name))
- result.push_back(name);
- else if (from_master && !masterBuffer()->params().branchlist().find(name))
- result.push_back(name);
+ InsetIterator it = inset_iterator_begin(inset());
+ InsetIterator const end = inset_iterator_end(inset());
+ for (; it != end; ++it) {
+ if (it->lyxCode() == BRANCH_CODE) {
+ InsetBranch & br = static_cast<InsetBranch &>(*it);
+ docstring const name = br.branch();
+ if (!from_master && !params().branchlist().find(name))
+ result.push_back(name);
+ else if (from_master && !masterBuffer()->params().branchlist().find(name))
+ result.push_back(name);
+ continue;
+ }
+ if (it->lyxCode() == INCLUDE_CODE) {
+ // get buffer of external file
+ InsetInclude const & ins =
+ static_cast<InsetInclude const &>(*it);
+ Buffer * child = ins.getChildBuffer();
+ if (!child)
continue;
- }
-
- // is it an external file?
- if (iit->inset->lyxCode() == INCLUDE_CODE) {
- // get buffer of external file
- InsetInclude const & inset =
- static_cast<InsetInclude const &>(*iit->inset);
- Buffer * child = inset.getChildBuffer();
- if (!child)
- continue;
- child->getUsedBranches(result, true);
- }
+ child->getUsedBranches(result, true);
}
- // next paragraph
- it.pit()++;
- it.pos() = 0;
}
// remove duplicates
result.unique();
}
-void Buffer::renameBranches(docstring const & oldname, docstring const & newname)
-{
- // Iterate over buffer, starting with first paragraph
- // The scope must be bigger than any lookup DocIterator
- // later. For the global lookup, lastpit+1 is used, hence
- // we use lastpit+2 here.
- DocIterator it = par_iterator_begin();
- DocIterator scope = it;
- scope.pit() = scope.lastpit() + 2;
- pit_type lastpit = it.lastpit();
-
- while (it.pit() <= lastpit) {
- Paragraph & par = it.paragraph();
-
- // iterate over the insets of the current paragraph
- InsetList const & insets = par.insetList();
- InsetList::const_iterator iit = insets.begin();
- InsetList::const_iterator end = insets.end();
- for (; iit != end; ++iit) {
- it.pos() = iit->pos;
-
- if (iit->inset->lyxCode() == BRANCH_CODE) {
- // get buffer of external file
- InsetBranch & br =
- static_cast<InsetBranch &>(*iit->inset);
- undo().recordUndo(it);
- if (br.branch() == oldname)
- br.rename(newname);
- continue;
- }
-
- // is it an external file?
- if (iit->inset->lyxCode() == INCLUDE_CODE) {
- // get buffer of external file
- InsetInclude const & inset =
- static_cast<InsetInclude const &>(*iit->inset);
- Buffer * child = inset.getChildBuffer();
- if (!child)
- continue;
- child->renameBranches(oldname, newname);
- }
- }
- // next paragraph
- it.pit()++;
- it.pos() = 0;
- }
-}
-
-
void Buffer::updateMacroInstances() const
{
LYXERR(Debug::MACROS, "updateMacroInstances for "
texrow.newline();
// output paragraphs
if (isDocBook())
- docbookParagraphs(paragraphs(), *this, os, runparams);
+ docbookParagraphs(text(), *this, os, runparams);
else
// latex or literate
latexParagraphs(*this, text(), os, texrow, runparams);
return true;
}
- result_file = changeExtension(absFileName(), ext);
+ result_file = changeExtension(exportFileName().absFilename(), ext);
// We need to copy referenced files (e. g. included graphics
// if format == "dvi") to the result dir.
vector<ExportedFile> const files =
_("&Recover"), _("&Load Original"),
_("&Cancel")))
{
- case 0:
+ case 0: {
// the file is not saved if we load the emergency file.
markDirty();
- return readFile(e);
+ docstring str;
+ bool res;
+
+ if ((res = readFile(e)) == success)
+ str = _("Document was successfully recovered.");
+ else
+ str = _("Document was NOT successfully recovered.");
+ str += "\n\n" + _("Remove emergency file now?");
+
+ if (!Alert::prompt(_("Delete emergency file?"), str, 1, 1,
+ _("&Remove"), _("&Keep it"))) {
+ e.removeFile();
+ if (res == success)
+ Alert::warning(_("Emergency file deleted"),
+ _("Do not forget to save your file now!"), true);
+ }
+ return res;
+ }
case 1:
+ if (!Alert::prompt(_("Delete emergency file?"),
+ _("Remove emergency file now?"), 1, 1,
+ _("&Remove"), _("&Keep it")))
+ e.removeFile();
break;
default:
return false;
if (layout.margintype == MARGIN_MANUAL
|| layout.latextype == LATEX_BIB_ENVIRONMENT) {
if (par.params().labelWidthString().empty())
- par.params().labelWidthString(par.translateIfPossible(layout.labelstring(), bp));
+ par.params().labelWidthString(par.expandLabel(layout, bp));
} else {
par.params().labelWidthString(docstring());
}
case LABEL_COUNTER:
if (layout.toclevel <= bp.secnumdepth
&& (layout.latextype != LATEX_ENVIRONMENT
- || isFirstInSequence(it.pit(), it.plist()))) {
+ || it.text()->isFirstInSequence(it.pit()))) {
counters.step(layout.counter);
par.params().labelString(
par.expandLabel(layout, bp));
counters.reset(enumcounter);
counters.step(enumcounter);
- par.params().labelString(counters.theCounter(enumcounter));
+ string const & lang = par.getParLanguage(bp)->code();
+ par.params().labelString(counters.theCounter(enumcounter, lang));
break;
}
else {
docstring name = buf.B_(textclass.floats().getType(type).name());
if (counters.hasCounter(from_utf8(type))) {
+ string const & lang = par.getParLanguage(bp)->code();
counters.step(from_utf8(type));
full_label = bformat(from_ascii("%1$s %2$s:"),
name,
- counters.theCounter(from_utf8(type)));
+ counters.theCounter(from_utf8(type), lang));
} else
full_label = bformat(from_ascii("%1$s #:"), name);
}
case LABEL_CENTERED_TOP_ENVIRONMENT:
case LABEL_STATIC:
case LABEL_BIBLIO:
- par.params().labelString(
- par.translateIfPossible(layout.labelstring(), bp));
+ par.params().labelString(par.expandLabel(layout, bp));
break;
}
}