On Thu, Aug 22, 2002 at 08:34:40AM +0200, Juergen Vigna wrote:

> > 
> > A dirty fix for now would be to put code on the menu emitting a sequence
> > "begin-paragraph; option-insert;" (pseudocode). 
> 
> I think this could be fixed for now quite easily. We just have to
> draw OptInset as the first thing in LyXText (so WYSISYG is always
> given!), 

Not easy IMHO. 

> then we should write them to the LyXFile first so that
> in the next read they outtomagically are at the first positions,
> which then won't give conflictls later when we find a better
> solution, 

That, together with my above dirty fix.

> would that be a plan? IMO this can be realized quite and
> also in a more or less clean way.

Hmmm, not very clean, but a compromise that will prevent "wrong" document
files being easily created or living on forever. Yes.

> (Obviously first we would have to commit this patch then we can
> try to do the above, if you give the go I may even find the time
> to have a go ;)

Martin


PS just tried it. It isn't so hard. I have in insetoptarg.C:


void InsetOptArg::write(Buffer const * buf, ostream & os) const
{
    os << "\n\\begin_inset OptArg" << "\n";
    InsetCollapsable::write(buf, os);
    os << "\n\\end_inset \n\n";
}


and then in paragraph.C:


@@ -241,6 +254,13 @@ void Paragraph::writeFile(Buffer const *
    if (bibkey)
        bibkey->write(buf, os);

+   // Put Optional Argument inset always at start:
+   InsetOptArg * ioa = optArgInset(*this);
+   if (layout()->optionalargs == 1) {
+       if (ioa != 0)
+           ioa->write(buf, os);
+   }
+
    LyXFont font1(LyXFont::ALL_INHERIT, bparams.language);

    int column = 0;
@@ -274,10 +294,13 @@ void Paragraph::writeFile(Buffer const *
                    // the file
                    inset->write(buf, os);
                } else {
-                   os << "\n\\begin_inset ";
-                   inset->write(buf, os);
-                   os << "\n\\end_inset \n\n";
-                   column = 0;
+                   // Suppress writing opt arg in middle:
+                   if (inset != ioa) {
+                       os << "\n\\begin_inset ";
+                       inset->write(buf, os);
+                       os << "\n\\end_inset \n\n";
+                       column = 0;
+                   }
                }
        }
        break;


...and this works. It even has the added benefit of silently dropping
optional insets in illegal places...

Martin

Attachment: msg43373/pgp00000.pgp
Description: PGP signature

Reply via email to