commit 947aaf7a5769318f6dfe4d263b02ee1822f15cf2
Author: Richard Heck <[email protected]>
Date: Mon Nov 30 17:25:03 2015 -0500
There does not appear to be any need to update the entire Buffer
after each entry into mathed. Instead, we just update the TOC for
anything the mathed happens to be inside.
diff --git a/src/Cursor.cpp b/src/Cursor.cpp
index c1458dc..09407a3 100644
--- a/src/Cursor.cpp
+++ b/src/Cursor.cpp
@@ -1303,7 +1303,7 @@ void Cursor::plainInsert(MathAtom const & t)
++pos();
inset().setBuffer(bv_->buffer());
inset().initView();
- forceBufferUpdate();
+ checkBufferStructure();
}
diff --git a/src/DocIterator.cpp b/src/DocIterator.cpp
index 352aa3a..a059ad1 100644
--- a/src/DocIterator.cpp
+++ b/src/DocIterator.cpp
@@ -226,6 +226,15 @@ CursorSlice const & DocIterator::innerTextSlice() const
}
+DocIterator DocIterator::getInnerText() const
+{
+ DocIterator texted = *this;
+ while (!texted.inTexted())
+ texted.pop_back();
+ return texted;
+}
+
+
pit_type DocIterator::lastpit() const
{
return inMathed() ? 0 : text()->paragraphs().size() - 1;
diff --git a/src/DocIterator.h b/src/DocIterator.h
index 74dd474..471f52d 100644
--- a/src/DocIterator.h
+++ b/src/DocIterator.h
@@ -167,6 +167,8 @@ public:
Paragraph & innerParagraph() const;
/// return the inner text slice.
CursorSlice const & innerTextSlice() const;
+ /// returns a DocIterator for the containing text inset
+ DocIterator getInnerText() const;
/// the first and last positions of a word at top cursor slice
/// \warning only works within text!
FontSpan locateWord(word_location const loc) const;
diff --git a/src/TocBackend.cpp b/src/TocBackend.cpp
index e47ca9b..5599e1f 100644
--- a/src/TocBackend.cpp
+++ b/src/TocBackend.cpp
@@ -17,6 +17,7 @@
#include "Buffer.h"
#include "BufferParams.h"
+#include "Cursor.h"
#include "FloatList.h"
#include "FuncRequest.h"
#include "InsetList.h"
@@ -266,8 +267,11 @@ shared_ptr<TocBuilder> TocBackend::builder(string const &
type)
// TocItem creation and update should be made in a dedicated function and
// updateItem should be rewritten to uniformly update the matching items from
// all TOCs.
-bool TocBackend::updateItem(DocIterator const & dit)
+bool TocBackend::updateItem(DocIterator const & dit_in)
{
+ // we need a text
+ DocIterator dit = dit_in.getInnerText();
+
if (dit.text()->getTocLevel(dit.pit()) == Layout::NOT_IN_TOC)
return false;