// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-int const LYX_FORMAT = 370; // uwestoehr: option to suppress default date
+int const LYX_FORMAT = 373; // jspitzm: merge g-brief class
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
// read main text
bool const res = text().read(lex, errorList, d->inset);
+ usermacros.clear();
updateMacros();
updateMacroInstances();
return res;
{
LaTeXFeatures features(*this, params(), runparams);
validate(features);
+ updateLabels(UpdateMaster, true);
d->texrow.reset();
if (!only_body) {
- os << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"" <<
- " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+ os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ os << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd\">\n";
// FIXME Language should be set properly.
- os << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
+ os << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
// FIXME Header
os << "<head>\n";
// FIXME Presumably need to set this right
// FIXME Get this during validation? What about other meta-data?
os << "<title>TBA</title>\n";
- os << features.getTClassHTMLPreamble();
-
- os << '\n';
+ os << "\n<!-- Text Class Preamble -->\n"
+ << features.getTClassHTMLPreamble()
+ << "\n<!-- Premable Snippets -->\n"
+ << from_utf8(features.getPreambleSnippets());
+ os << "\n<!-- Layout-provided Styles -->\n";
docstring const styleinfo = features.getTClassHTMLStyles();
if (!styleinfo.empty()) {
- os << "<style type='text/css'>\n";
- os << styleinfo;
- os << "</style>\n";
+ os << "<style type='text/css'>\n"
+ << styleinfo
+ << "</style>\n";
}
os << "</head>\n<body>\n";
}
+ XHTMLStream xs(os);
params().documentClass().counters().reset();
- xhtmlParagraphs(text(), *this, os, runparams);
+ xhtmlParagraphs(text(), *this, xs, runparams);
if (!only_body)
os << "</body>\n</html>\n";
}
lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto"));
break;
}
- doExport(argument, false);
bool success = doExport(argument, false);
dr.setError(success);
if (!success)
LYXERR(Debug::MACROS, "updateMacroInstances for "
<< d->filename.onlyFileName());
DocIterator it = doc_iterator_begin(this);
- DocIterator end = doc_iterator_end(this);
- for (; it != end; it.forwardPos()) {
- // look for MathData cells in InsetMathNest insets
- Inset * inset = it.nextInset();
- if (!inset)
- continue;
-
- InsetMath * minset = inset->asInsetMath();
+ it.forwardInset();
+ DocIterator const end = doc_iterator_end(this);
+ for (; it != end; it.forwardInset()) {
+ // look for MathData cells in InsetMathNest insets
+ InsetMath * minset = it.nextInset()->asInsetMath();
if (!minset)
continue;
int AutoSaveBuffer::generateChild()
{
+#if defined(__APPLE__)
+ /* FIXME fork() is not usable for autosave on Mac OS X 10.6 (snow leopard)
+ * We should use something else like threads.
+ *
+ * Since I do not know how to determine at run time what is the OS X
+ * version, I just disable forking altogether for now (JMarc)
+ */
+ pid_t const pid = -1;
+#else
// tmp_ret will be located (usually) in /tmp
// will that be a problem?
// Note that this calls ForkedCalls::fork(), so it's
// you should set pid to -1, and comment out the fork.
if (pid != 0 && pid != -1)
return pid;
+#endif
// pid = -1 signifies that lyx was unable
// to fork. But we will do the save
updateMacroInstances();
// Plain text backend
- if (backend_format == "text")
+ if (backend_format == "text") {
+ runparams.flavor = OutputParams::TEXT;
writePlaintextFile(*this, FileName(filename), runparams);
+ }
// HTML backend
else if (backend_format == "xhtml") {
runparams.flavor = OutputParams::HTML;
vector<Format const *> Buffer::exportableFormats(bool only_viewable) const
{
- vector<string> backs = backends();
+ vector<string> const backs = backends();
vector<Format const *> result =
theConverters().getReachable(backs[0], only_viewable, true);
for (vector<string>::const_iterator it = backs.begin() + 1;
vector<string> Buffer::backends() const
{
vector<string> v;
- if (params().baseClass()->isTeXClassAvailable()) {
- v.push_back(bufferFormat());
- // FIXME: Don't hardcode format names here, but use a flag
- if (v.back() == "latex")
- v.push_back("pdflatex");
- }
- v.push_back("text");
+ v.push_back(bufferFormat());
+ // FIXME: Don't hardcode format names here, but use a flag
+ if (v.back() == "latex")
+ v.push_back("pdflatex");
v.push_back("xhtml");
+ v.push_back("text");
v.push_back("lyx");
return v;
}
}
-void Buffer::updateLabels(UpdateScope scope) const
+void Buffer::updateLabels(UpdateScope scope, bool out) const
{
// Use the master text class also for child documents
Buffer const * const master = masterBuffer();
// If this is a child document start with the master
if (master != this) {
bufToUpdate.insert(this);
- master->updateLabels();
+ master->updateLabels(UpdateMaster, out);
// Do this here in case the master has no gui associated with it. Then,
// the TocModel is not updated and TocModel::toc_ is invalid (bug 5699).
if (!master->gui_)
// do the real work
ParIterator parit = cbuf.par_iterator_begin();
- updateLabels(parit);
+ updateLabels(parit, out);
if (master != this)
// TocBackend update will be done later.
// set the label of a paragraph. This includes the counters.
-static void setLabel(Buffer const & buf, ParIterator & it)
+void Buffer::setLabel(ParIterator & it) const
{
- BufferParams const & bp = buf.masterBuffer()->params();
+ BufferParams const & bp = this->masterBuffer()->params();
DocumentClass const & textclass = bp.documentClass();
Paragraph & par = it.paragraph();
Layout const & layout = par.layout();
if (par.params().startOfAppendix()) {
// FIXME: only the counter corresponding to toplevel
- // sectionning should be reset
+ // sectioning should be reset
counters.reset();
counters.appendix(true);
}
string const & type = counters.current_float();
docstring full_label;
if (type.empty())
- full_label = buf.B_("Senseless!!! ");
+ full_label = this->B_("Senseless!!! ");
else {
- docstring name = buf.B_(textclass.floats().getType(type).name());
+ docstring name = this->B_(textclass.floats().getType(type).name());
if (counters.hasCounter(from_utf8(type))) {
string const & lang = par.getParLanguage(bp)->code();
counters.step(from_utf8(type));
}
-void Buffer::updateLabels(ParIterator & parit) const
+void Buffer::updateLabels(ParIterator & parit, bool out) const
{
LASSERT(parit.pit() == 0, /**/);
maxdepth = parit->getMaxDepthAfter();
// set the counter for this paragraph
- setLabel(*this, parit);
+ setLabel(parit);
// Now the insets
InsetList::const_iterator iit = parit->insetList().begin();
InsetList::const_iterator end = parit->insetList().end();
for (; iit != end; ++iit) {
parit.pos() = iit->pos;
- iit->inset->updateLabels(parit);
+ iit->inset->updateLabels(parit, out);
}
}
}
DocIterator const end = doc_iterator_end(this);
for (; from != end; from.forwardPos()) {
// We are only interested in text so remove the math CursorSlice.
- while (from.inMathed())
- from.forwardInset();
+ while (from.inMathed()) {
+ from.pop_back();
+ from.pos()++;
+ }
+ // If from is at the end of the document (which is possible
+ // when leaving the mathed) LyX will crash later.
+ if (from == end)
+ break;
to = from;
if (from.paragraph().spellCheck(from.pos(), to.pos(), wl, suggestions)) {
word_lang = wl;
break;
}
- from = to;
- ++progress;
+
+ // Do not increase progress when from == to, otherwise the word
+ // count will be wrong.
+ if (from != to) {
+ from = to;
+ ++progress;
+ }
}
return progress;
}