Re: [patch] LyXText::read

2003-12-02 Thread Andre Poenitz
On Tue, Dec 02, 2003 at 03:14:37PM +0100, Andre' Poenitz wrote:
> 
> Can anybody see anything wrogn with this?
> [It works, just asking...]
> 
> Counting the unknown tokes seems to be broken (before and after applying
> this patch)

Maybe two note on what I did _not_ change:


> + if (in_inset_) {
> +
> + if (token == "\\end_inset") {
> + the_end_read = true;
> + break;
> + }
> +
> + if (token == "\\end_document") {
> + lex.printError("\\end_document read in inset! Error in 
> document!");
> + return false;
> + }
> +
> + } else {
> +
> + if (token == "\\end_document") {
> + the_end_read = true;
> + continue;
> + }

Why should we read on after \\end_document?

> +
> + }
> +
> + // FIXME: ugly.
> + int unknown = 0;

And essentially unused...

Andre'


[patch] LyXText::read

2003-12-02 Thread Andre Poenitz

Can anybody see anything wrogn with this?
[It works, just asking...]

Counting the unknown tokes seems to be broken (before and after applying
this patch)

Andre'
Index: buffer.C
===
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.C,v
retrieving revision 1.547
diff -u -p -r1.547 buffer.C
--- buffer.C2 Dec 2003 12:39:10 -   1.547
+++ buffer.C2 Dec 2003 14:00:04 -
@@ -390,6 +390,7 @@ void unknownClass(string const & unknown
 
 } // anon
 
+
 int Buffer::readHeader(LyXLex & lex)
 {
int unknown_tokens = 0;
@@ -435,9 +436,8 @@ int Buffer::readHeader(LyXLex & lex)
 // if par = 0 normal behavior
 // else insert behavior
 // Returns false if "\end_document" is not read (Asger)
-bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator pit)
+bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator)
 {
-   Paragraph::depth_type depth = 0;
bool the_end_read = false;
 
if (paragraphs().empty()) {
@@ -458,67 +458,10 @@ bool Buffer::readBody(LyXLex & lex, Para
tmpbuf.readHeader(lex);
}
 
-   while (lex.isOK()) {
-   lex.nextToken();
-   string const token = lex.getString();
-
-   if (token.empty())
-   continue;
-
-   lyxerr[Debug::PARSER] << "Handling token: `"
- << token << '\'' << endl;
-
-   if (token == "\\end_document") {
-   the_end_read = true;
-   continue;
-   }
-
-   readParagraph(lex, token, paragraphs(), pit, depth);
-   }
+   if (text().read(*this, lex))
+   the_end_read = true;
 
return the_end_read;
-}
-
-
-int Buffer::readParagraph(LyXLex & lex, string const & token,
- ParagraphList & pars, ParagraphList::iterator & pit,
- lyx::depth_type & depth)
-{
-   static Change current_change;
-   int unknown = 0;
-
-   if (token == "\\begin_layout") {
-   lex.pushToken(token);
-
-   Paragraph par;
-   par.params().depth(depth);
-   if (params().tracking_changes)
-   par.trackChanges();
-   LyXFont f(LyXFont::ALL_INHERIT, params().language);
-   par.setFont(0, f);
-
-   // insert after
-   if (pit != pars.end())
-   ++pit;
-
-   pit = pars.insert(pit, par);
-
-   // FIXME: goddamn InsetTabular makes us pass a Buffer
-   // not BufferParams
-   ::readParagraph(*this, *pit, lex);
-
-   } else if (token == "\\begin_deeper") {
-   ++depth;
-   } else if (token == "\\end_deeper") {
-   if (!depth) {
-   lex.printError("\\end_deeper: " "depth is already null");
-   } else {
-   --depth;
-   }
-   } else {
-   ++unknown;
-   }
-   return unknown;
 }
 
 
Index: buffer.h
===
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.h,v
retrieving revision 1.174
diff -u -p -r1.174 buffer.h
--- buffer.h28 Nov 2003 15:08:38 -  1.174
+++ buffer.h2 Dec 2003 14:00:04 -
@@ -96,12 +96,6 @@ public:
*/
bool readBody(LyXLex &, ParagraphList::iterator pit);
 
-   /// This parses a single token
-   int readParagraph(LyXLex &, std::string const & token,
- ParagraphList & pars,
- ParagraphList::iterator & pit,
- lyx::depth_type & depth);
-
///
void insertStringAsLines(ParagraphList::iterator &, lyx::pos_type &,
 LyXFont const &, std::string const &);
Index: lyxtext.h
===
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v
retrieving revision 1.266
diff -u -p -r1.266 lyxtext.h
--- lyxtext.h   2 Dec 2003 12:39:11 -   1.266
+++ lyxtext.h   2 Dec 2003 14:00:04 -
@@ -393,6 +393,8 @@ public:
 
///
void write(Buffer const & buf, std::ostream & os) const;
+   /// returns whether we've seen our usual 'end' marker
+   bool read(Buffer const & buf, LyXLex & lex);
 
 public:
///
Index: paragraph_funcs.C
===
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_funcs.C,v
retrieving revision 1.90
diff -u -p -r1.90 paragraph_funcs.C
--- paragraph_funcs.C   28 Nov 2003 15:53:25 -  1.90
+++ paragraph_funcs.C   2 Dec 2003 14:00:04 -
@@ -303,7 +303,8 @@ int getEndLabel(ParagraphList::iterator 
 
 namespace {
 
-int readParToken(Buffer & buf, Paragraph & par, LyXLex & lex, string const & token)
+int readParToken(Buffer const & buf, Para