]> git.lyx.org Git - lyx.git/commitdiff
mathed58.diff
authorLars Gullik Bjønnes <larsbj@gullik.org>
Thu, 15 Mar 2001 14:11:13 +0000 (14:11 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Thu, 15 Mar 2001 14:11:13 +0000 (14:11 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1771 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/array.C
src/mathed/math_parser.C
src/mathed/math_rowst.h

index 234384cf798626b22e2311ceb862cea1340fca5d..bc5b02596d7fb8a7704f6c016ce97a8cbc988018 100644 (file)
@@ -14,7 +14,6 @@
 using std::ostream;
 using std::endl;
 
-// Is this still needed? (Lgb)
 static inline
 void * my_memcpy(void * ps_in, void const * pt_in, size_t n)
 {
index 68bc7bff671f4d52d47864d46814896006b1f2df..698215e802b07f451419cc6c7f7e3c3d80c91455 100644 (file)
@@ -424,9 +424,6 @@ void mathed_parse(MathedArray & array, unsigned flags = 0,
        int acc_brace = 0;
        int acc_braces[8];
        MathParInset * mt = (mtx) ? *mtx : 0;
-       MathedRowContainer::iterator crow;
-       if (mt)
-               crow = mt->getRowSt().begin();
 
        ++plevel;
        MathedIter data(&array);
@@ -604,8 +601,7 @@ void mathed_parse(MathedArray & array, unsigned flags = 0,
                case LM_TK_NEWLINE:
                        if (mt && (flags & FLAG_END)) {
                                if (mt->Permit(LMPF_ALLOW_CR)) {
-                                       mt->getRowSt().insert(crow);
-                                       ++crow;
+                                       mt->getRowSt().push_back();
                                        data.insert('K', LM_TC_CR);
                                } else 
                                        mathPrintError("Unexpected newline");
@@ -757,8 +753,11 @@ void mathed_parse(MathedArray & array, unsigned flags = 0,
                        break;
                        
                case LM_TK_NONUM:
-                       if (crow)
-                               crow->setNumbered(false);
+                       if (mt) {
+                               if (!mt->getRowSt().data_.size())
+                                       mt->getRowSt().push_back();
+                               mt->getRowSt().back().setNumbered(false);
+                       }
                        break;
                
                case LM_TK_PMOD:
@@ -869,7 +868,6 @@ void mathed_parse(MathedArray & array, unsigned flags = 0,
                                        }
                                        mt->SetStyle(size);
                                        mt->SetType(mathed_env);
-                                       crow = mt->getRowSt().begin();
                                }
                                
                                lyxerr[Debug::MATHED] << "MATH BEGIN[" << mathed_env << "]" << endl;
@@ -914,8 +912,8 @@ void mathed_parse(MathedArray & array, unsigned flags = 0,
                                panic = true;
                                break;
                        } 
-                       if (crow) {
-                               crow->setLabel(yytext.data());
+                       if (mt) {
+                               mt->getRowSt().back().setLabel(yytext.data());
                        } else {
                                mathed_label = yytext.data();
                        }
index 0eeb0810814272f5f774a9a81ae9d75e5b90248e..b4f1c3432cb23dcc2c88f58a7e7256ba049af205 100644 (file)
@@ -44,10 +44,8 @@ public:
        void setNumbered(bool nf);
        ///
        void setTab(unsigned int i, int t);
-       ///
-       friend class MathedRowSt;
 protected:
-       /// Vericals 
+       /// verticals 
        int asc_;
        ///
        int desc_;
@@ -62,11 +60,9 @@ protected:
 };
 
 
-// The idea is to change this  MathedRowContainer  to mimic the behaviour
-// of std::list<MathedRowStruct> in several small steps.  In the end it
-// could be replaced by such a list and MathedRowSt can go as well. 
  
-struct MathedRowContainer {
+class MathedRowContainer {
+private:
        ///
        struct iterator {
                ///
@@ -79,9 +75,9 @@ struct MathedRowContainer {
                ///
                MathedRowStruct & operator*() { Assert(st_); return st_->data_[pos_]; }
                ///
-               MathedRowStruct * operator->() { return &st_->data_[pos_]; }
+               MathedRowStruct * operator->() { Assert(st_); return &st_->data_[pos_]; }
                ///
-               MathedRowStruct const * operator->() const { return &st_->data_[pos_]; }
+               MathedRowStruct const * operator->() const { Assert(st_); return &st_->data_[pos_]; }
                ///
                void operator++() { Assert(st_); ++pos_; }
                ///
@@ -92,27 +88,44 @@ struct MathedRowContainer {
 
        //private:
                ///
+               friend class MathedRowContainer;
+
+               /// pointer to the container to which we belong
                MathedRowContainer * st_;
-               ///
+               /// position in this container, e.g. row number
                unsigned int pos_;
        };
 
-       ///
+public:
+       /// 
        iterator begin() { return iterator(this); }
        ///
        bool empty() const { return data_.size() == 0; }
 
-       /// insert 'item' before 'iterator'
+       /// insert item before 'it'
        void insert(iterator const & it) {
                Assert(it.st_ == this);
                data_.insert(data_.begin() + it.pos_, MathedRowStruct());
        }
                        
+       /// erase item pointed to by 'it'
        void erase(iterator & it) {
                Assert(it.st_ == this);
                data_.erase(data_.begin() + it.pos_);
        }
 
+       /// access to last item
+       MathedRowStruct & back() {
+               Assert(data_.size());
+               return data_.back();
+       }
+       
+       /// append empty element
+       void push_back() {
+               data_.push_back(MathedRowStruct());
+       }
+       
+
        ///
        std::vector<MathedRowStruct> data_;