the optional argument patch from martin

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5079 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2002-08-23 09:05:32 +00:00
parent f1d753f3c2
commit 11953d3734
20 changed files with 242 additions and 6 deletions

View File

@ -252,6 +252,7 @@
Gnome frontend Gnome frontend
@bMartin Vermeer @bMartin Vermeer
@iE-mail: martin.vermeer@hut.fi @iE-mail: martin.vermeer@hut.fi
support for optional argument in sections/captions
svjour/svjog, egs and llncs document classes svjour/svjog, egs and llncs document classes
Lot of bug hunting (and fixing!) Lot of bug hunting (and fixing!)
@bJuergen Vigna @bJuergen Vigna

View File

@ -1,4 +1,15 @@
2002-08-23 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
* ui/default.ui: add menu entry for optional-insert
* CREDITS: update Martin's entry
2002-08-20 Martin Vermeer <martin.vermeer@hut.fi>
* layouts/stdlayouts.inc:
* layouts/stdsections.inc:
* layouts/stdstarsections.inc: aded OptionalArgs tags to the
relevant layouts
2002-08-21 André Pönitz <poenitz@gmx.net> 2002-08-21 André Pönitz <poenitz@gmx.net>

View File

@ -92,10 +92,13 @@ Style Caption
Align Center Align Center
AlignPossible Center AlignPossible Center
LabelType Sensitive LabelType Sensitive
LabelString Caption LabelString Caption
OptionalArgs 1
# label font definition # label font definition
LabelFont LabelFont
Series Bold Series Bold
EndFont EndFont
End End

View File

@ -49,6 +49,7 @@ Style Chapter
LabelType Counter_Chapter LabelType Counter_Chapter
LabelString "Chapter " LabelString "Chapter "
LabelStringAppendix "Appendix " LabelStringAppendix "Appendix "
OptionalArgs 1
# standard font definition # standard font definition
Font Font
@ -73,6 +74,7 @@ Style Section
Align Block Align Block
AlignPossible Block, Left AlignPossible Block, Left
LabelType Counter_Section LabelType Counter_Section
OptionalArgs 1
# standard font definition # standard font definition
Font Font
@ -97,6 +99,7 @@ Style Subsection
Align Block Align Block
AlignPossible Block, Left AlignPossible Block, Left
LabelType Counter_Subsection LabelType Counter_Subsection
OptionalArgs 1
# standard font definition # standard font definition
Font Font
@ -121,6 +124,7 @@ Style Subsubsection
Align Block Align Block
AlignPossible Block, Left AlignPossible Block, Left
LabelType Counter_SubSubSection LabelType Counter_SubSubSection
OptionalArgs 1
# standard font definition # standard font definition
Font Font
@ -145,6 +149,7 @@ Style Paragraph
Align Block Align Block
AlignPossible Block, Left AlignPossible Block, Left
LabelType Counter_Paragraph LabelType Counter_Paragraph
OptionalArgs 1
# standard font definition # standard font definition
Font Font
@ -170,6 +175,7 @@ Style Subparagraph
Align Block Align Block
AlignPossible Block, Left AlignPossible Block, Left
LabelType Counter_SubParagraph LabelType Counter_SubParagraph
OptionalArgs 1
# standard font definition # standard font definition
Font Font

View File

@ -22,6 +22,7 @@ Style Chapter*
Margin Static Margin Static
LatexName chapter* LatexName chapter*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End
# Section* style definition # Section* style definition
@ -30,6 +31,7 @@ Style Section*
Margin Static Margin Static
LatexName section* LatexName section*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End
# Subsection* style definition # Subsection* style definition
@ -38,6 +40,7 @@ Style Subsection*
Margin Static Margin Static
LatexName subsection* LatexName subsection*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End
# Subsubsection* style definition # Subsubsection* style definition
@ -46,6 +49,7 @@ Style Subsubsection*
Margin Static Margin Static
LatexName subsubsection* LatexName subsubsection*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End
# Paragraph* style definition # Paragraph* style definition
@ -54,6 +58,7 @@ Style Paragraph*
Margin Static Margin Static
LatexName paragraph* LatexName paragraph*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End
# Subparagraph* style definition # Subparagraph* style definition
@ -62,5 +67,6 @@ Style Subparagraph*
Margin Static Margin Static
LatexName subparagraph* LatexName subparagraph*
LabelType No_Label LabelType No_Label
OptionalArgs 0
End End

View File

@ -174,6 +174,7 @@ Menuset
Item "Label...|L" "label-insert" Item "Label...|L" "label-insert"
Item "Footnote|F" "footnote-insert" Item "Footnote|F" "footnote-insert"
Item "Marginal Note|M" "marginalnote-insert" Item "Marginal Note|M" "marginalnote-insert"
Item "Short title" "optional-insert"
Item "Index Entry|I" "index-insert" Item "Index Entry|I" "index-insert"
Item "URL...|U" "url-insert" Item "URL...|U" "url-insert"
Item "Note|N" "note-insert" Item "Note|N" "note-insert"

View File

@ -8,6 +8,7 @@ src/converter.C
src/CutAndPaste.C src/CutAndPaste.C
src/debug.C src/debug.C
src/exporter.C src/exporter.C
src/ext_l10n.h
src/FloatList.C src/FloatList.C
src/frontends/controllers/biblio.C src/frontends/controllers/biblio.C
src/frontends/controllers/ButtonController.h src/frontends/controllers/ButtonController.h
@ -133,6 +134,7 @@ src/insets/insetlist.C
src/insets/insetmarginal.C src/insets/insetmarginal.C
src/insets/insetminipage.C src/insets/insetminipage.C
src/insets/insetnote.C src/insets/insetnote.C
src/insets/insetoptarg.C
src/insets/insetparent.C src/insets/insetparent.C
src/insets/insetref.C src/insets/insetref.C
src/insets/insettabular.C src/insets/insettabular.C

View File

@ -61,6 +61,7 @@
#include "insets/insetminipage.h" #include "insets/insetminipage.h"
#include "insets/insetfloat.h" #include "insets/insetfloat.h"
#include "insets/insettabular.h" #include "insets/insettabular.h"
#include "insets/insetoptarg.h"
#if 0 #if 0
#include "insets/insettheorem.h" #include "insets/insettheorem.h"
#include "insets/insetlist.h" #include "insets/insetlist.h"
@ -1662,6 +1663,10 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev)
insertAndEditInset(new InsetNote(buffer_->params)); insertAndEditInset(new InsetNote(buffer_->params));
break; break;
case LFUN_INSET_OPTARG:
insertAndEditInset(new InsetOptArg(buffer_->params));
break;
case LFUN_INSET_FLOAT: case LFUN_INSET_FLOAT:
// check if the float type exist // check if the float type exist
if (floatList.typeExist(ev.argument)) { if (floatList.typeExist(ev.argument)) {

View File

@ -1,3 +1,23 @@
2002-08-22 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
* lyxfunc.C (getStatus): handle LFUN_INSET_OPTARG
2002-08-20 Martin Vermeer <martin.vermeer@hut.fi>
* BufferView_pimpl.C:
* LyXAction.C:
* buffer.C:
* commandtags.h:
* lyxfunc.C:
* paragraph.[Ch]:
* text2.C:
* insets/insetoptarg.[Ch]: Added "optional argument" collapsible
inset and code to make it work with the paragraph code. The inset
can be anywhere in the paragraph, but will only do the expected
thing in LaTeX if the layout file contains the parameter line
OptionalArgs 1
(or more generally, a nonzero value) for that layout.
2002-08-22 Lars Gullik Bjønnes <larsbj@gullik.net> 2002-08-22 Lars Gullik Bjønnes <larsbj@gullik.net>
* paragraph.h: remove the declaration of undefined counters class * paragraph.h: remove the declaration of undefined counters class

View File

@ -247,6 +247,8 @@ void LyXAction::init()
ReadOnly }, ReadOnly },
{ LFUN_INSERT_LABEL, "label-insert", N_("Insert Label"), { LFUN_INSERT_LABEL, "label-insert", N_("Insert Label"),
Noop }, Noop },
{ LFUN_INSET_OPTARG, "optional-insert", N_("Insert Optional Argument"),
Noop },
{ LFUN_LANGUAGE, "language", N_("Change language"), Noop }, { LFUN_LANGUAGE, "language", N_("Change language"), Noop },
{ LFUN_LATEX_LOG, "latex-view-log", N_("View LaTeX log"), { LFUN_LATEX_LOG, "latex-view-log", N_("View LaTeX log"),
ReadOnly }, ReadOnly },

View File

@ -73,6 +73,7 @@
#include "insets/insetgraphics.h" #include "insets/insetgraphics.h"
#include "insets/insetfoot.h" #include "insets/insetfoot.h"
#include "insets/insetmarginal.h" #include "insets/insetmarginal.h"
#include "insets/insetoptarg.h"
#include "insets/insetminipage.h" #include "insets/insetminipage.h"
#include "insets/insetfloat.h" #include "insets/insetfloat.h"
#include "insets/insettabular.h" #include "insets/insettabular.h"
@ -1115,6 +1116,8 @@ void Buffer::readInset(LyXLex & lex, Paragraph *& par,
inset = new InsetFoot(params); inset = new InsetFoot(params);
} else if (tmptok == "Marginal") { } else if (tmptok == "Marginal") {
inset = new InsetMarginal(params); inset = new InsetMarginal(params);
} else if (tmptok == "OptArg") {
inset = new InsetOptArg(params);
} else if (tmptok == "Minipage") { } else if (tmptok == "Minipage") {
inset = new InsetMinipage(params); inset = new InsetMinipage(params);
} else if (tmptok == "Float") { } else if (tmptok == "Float") {

View File

@ -282,6 +282,7 @@ enum kb_action {
LFUN_FORKS_SHOW, // Angus 16 Feb 2002 LFUN_FORKS_SHOW, // Angus 16 Feb 2002
LFUN_FORKS_KILL, // Angus 16 Feb 2002 LFUN_FORKS_KILL, // Angus 16 Feb 2002
LFUN_TOOLTIPS_TOGGLE, // Angus 8 Mar 2002 LFUN_TOOLTIPS_TOGGLE, // Angus 8 Mar 2002
LFUN_INSET_OPTARG, // Martin 12 Aug 2002
LFUN_MOUSE_PRESS, // André 9 Aug 2002 LFUN_MOUSE_PRESS, // André 9 Aug 2002
LFUN_MOUSE_MOTION, // André 9 Aug 2002 LFUN_MOUSE_MOTION, // André 9 Aug 2002
LFUN_MOUSE_RELEASE, // André 9 Aug 2002 LFUN_MOUSE_RELEASE, // André 9 Aug 2002

View File

@ -63,6 +63,8 @@ libinsets_la_SOURCES = \
insetminipage.h \ insetminipage.h \
insetnote.C \ insetnote.C \
insetnote.h \ insetnote.h \
insetoptarg.C \
insetoptarg.h \
insetparent.C \ insetparent.C \
insetparent.h \ insetparent.h \
insetquotes.C \ insetquotes.C \

View File

@ -115,7 +115,9 @@ public:
/// ///
FLOAT_LIST_CODE, FLOAT_LIST_CODE,
/// ///
INDEX_PRINT_CODE INDEX_PRINT_CODE,
///
OPTARG_CODE
}; };
/// ///

84
src/insets/insetoptarg.C Normal file
View File

@ -0,0 +1,84 @@
/* This file is part of
* ======================================================
*
* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
* Copyright 1995-2001 The LyX Team.
*
* ====================================================== */
#include <config.h>
#ifdef __GNUG__
#pragma implementation
#endif
#include "debug.h"
#include "insetoptarg.h"
#include "support/LOstream.h"
#include "frontends/Alert.h"
#include "support/lstrings.h" //frontStrip, strip
#include "lyxtext.h"
#include "buffer.h"
#include "gettext.h"
#include "BufferView.h"
#include "support/lstrings.h"
using std::ostream;
using std::vector;
using std::pair;
/* OptArg. Used to insert a short version of sectioning header etc.
* automatically, or other optional LaTeX arguments */
InsetOptArg::InsetOptArg(BufferParams const & ins)
: InsetCollapsable(ins, true)
{
LyXFont font(LyXFont::ALL_SANE);
font.setColor(LColor::collapsable);
setLabelFont(font);
setLabel(_("opt"));
}
InsetOptArg::InsetOptArg(InsetOptArg const & in, bool same_id)
: InsetCollapsable(in, same_id)
{
LyXFont font(LyXFont::ALL_SANE);
font.setColor(LColor::collapsable);
setLabelFont(font);
setLabel(_("opt"));
}
Inset * InsetOptArg::clone(Buffer const &, bool same_id) const
{
return new InsetOptArg(*this, same_id);
}
string const InsetOptArg::editMessage() const
{
return _("Opened Optional Argument Inset");
}
void InsetOptArg::write(Buffer const * buf, ostream & os) const
{
os << "OptArg" << "\n";
InsetCollapsable::write(buf, os);
}
int InsetOptArg::latex(Buffer const *, ostream &, bool, bool) const
{
return 0;
}
int InsetOptArg::latexOptional(Buffer const * buf, ostream & os,
bool, bool fp) const
{
os << '[';
int const i = inset.latex(buf, os, false, fp);
os << ']';
return i + 2;
}

45
src/insets/insetoptarg.h Normal file
View File

@ -0,0 +1,45 @@
// -*- C++ -*-
/* This file is part of*
* ======================================================
*
* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
* Copyright 1995-2001 The LyX Team
*
* ====================================================== */
#ifndef INSETOPTARG_H
#define INSETOPTARG_H
#ifdef __GNUG__
#pragma interface
#endif
#include "insettext.h"
#include "insetcollapsable.h"
class InsetOptArg : public InsetCollapsable {
public:
InsetOptArg(BufferParams const &);
///
InsetOptArg(InsetOptArg const &, bool same_id = false);
Inset * clone(Buffer const &, bool same_id = false) const;
///
EDITABLE editable() const { return IS_EDITABLE; }
///
Inset::Code lyxCode() const { return Inset::OPTARG_CODE; }
///
string const editMessage() const;
/// Standard LaTeX output -- short-circuited
int latex(Buffer const *, std::ostream &,
bool fragile, bool fp) const;
/// Outputting the optional parameter of a LaTeX command
int latexOptional(Buffer const *, std::ostream &,
bool fragile, bool fp) const;
///
void write(Buffer const * buf, ostream & os) const;
};
#endif

View File

@ -361,6 +361,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
break; break;
} }
case LFUN_INSET_OPTARG:
disable = (TEXT(false)->cursor.par()->layout()->optionalargs == 0);
break;
case LFUN_TABULAR_FEATURE: case LFUN_TABULAR_FEATURE:
if (mathcursor) { if (mathcursor) {
#if 0 #if 0
@ -527,6 +531,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
case LFUN_INSERT_LABEL: case LFUN_INSERT_LABEL:
code = Inset::LABEL_CODE; code = Inset::LABEL_CODE;
break; break;
case LFUN_INSET_OPTARG:
code = Inset::OPTARG_CODE;
break;
case LFUN_REF_INSERT: case LFUN_REF_INSERT:
code = Inset::REF_CODE; code = Inset::REF_CODE;
break; break;
@ -577,9 +584,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
default: default:
break; break;
} }
if (code != Inset::NO_CODE && tli && !tli->insetAllowed(code)) { if (code != Inset::NO_CODE && tli && !tli->insetAllowed(code))
disable = true; disable = true;
}
if (disable) if (disable)
flag.disabled(true); flag.disabled(true);

View File

@ -59,6 +59,7 @@ enum LayoutTags {
LT_ENDLABELTYPE, LT_ENDLABELTYPE,
LT_LATEXNAME, LT_LATEXNAME,
LT_LATEXPARAM, LT_LATEXPARAM,
LT_OPTARGS,
LT_LATEXTYPE, LT_LATEXTYPE,
LT_LEFTMARGIN, LT_LEFTMARGIN,
LT_NEED_PROTECT, LT_NEED_PROTECT,
@ -83,6 +84,7 @@ LyXLayout::LyXLayout ()
margintype = MARGIN_STATIC; margintype = MARGIN_STATIC;
latextype = LATEX_PARAGRAPH; latextype = LATEX_PARAGRAPH;
intitle = false; intitle = false;
optionalargs = 0;
needprotect = false; needprotect = false;
keepempty = false; keepempty = false;
font = LyXFont(LyXFont::ALL_INHERIT); font = LyXFont(LyXFont::ALL_INHERIT);
@ -146,6 +148,7 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
{ "newline", LT_NEWLINE }, { "newline", LT_NEWLINE },
{ "nextnoindent", LT_NEXTNOINDENT }, { "nextnoindent", LT_NEXTNOINDENT },
{ "obsoletedby", LT_OBSOLETEDBY }, { "obsoletedby", LT_OBSOLETEDBY },
{ "optionalargs", LT_OPTARGS },
{ "parindent", LT_PARINDENT }, { "parindent", LT_PARINDENT },
{ "parsep", LT_PARSEP }, { "parsep", LT_PARSEP },
{ "parskip", LT_PARSKIP }, { "parskip", LT_PARSKIP },
@ -245,6 +248,10 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
intitle = lexrc.next() && lexrc.getInteger(); intitle = lexrc.next() && lexrc.getInteger();
break; break;
case LT_OPTARGS:
optionalargs = lexrc.next() && lexrc.getInteger();
break;
case LT_NEED_PROTECT: case LT_NEED_PROTECT:
needprotect = lexrc.next() && lexrc.getInteger(); needprotect = lexrc.next() && lexrc.getInteger();
break; break;

View File

@ -188,6 +188,9 @@ public:
LYX_LATEX_TYPES latextype; LYX_LATEX_TYPES latextype;
/// Does this object belong in the title part of the document? /// Does this object belong in the title part of the document?
bool intitle; bool intitle;
/// Does this layout allow for an optional parameter?
int optionalargs;
private: private:
/// Name of the layout/paragraph environment /// Name of the layout/paragraph environment
string name_; string name_;

View File

@ -32,6 +32,7 @@
#include "insets/insetinclude.h" #include "insets/insetinclude.h"
#include "insets/insetbib.h" #include "insets/insetbib.h"
#include "insets/insettext.h" #include "insets/insettext.h"
#include "insets/insetoptarg.h"
#include "support/filetools.h" #include "support/filetools.h"
#include "support/lstrings.h" #include "support/lstrings.h"
@ -955,6 +956,23 @@ int Paragraph::getPositionOfInset(Inset const * inset) const
return -1; return -1;
} }
namespace {
InsetOptArg * optArgInset(Paragraph const & par)
{
// Find the entry.
InsetList::iterator it = par.insetlist.begin();
InsetList::iterator end = par.insetlist.end();
for (; it != end; ++it) {
Inset * ins = it.getInset();
if (ins->lyxCode() == Inset::OPTARG_CODE) {
return static_cast<InsetOptArg *>(ins);
}
}
return 0;
}
} // end namespace
Paragraph * Paragraph::TeXOnePar(Buffer const * buf, Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
BufferParams const & bparams, BufferParams const & bparams,
@ -1053,8 +1071,16 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
switch (style->latextype) { switch (style->latextype) {
case LATEX_COMMAND: case LATEX_COMMAND:
os << '\\' os << '\\'
<< style->latexname() << style->latexname();
<< style->latexparam();
// Separate handling of optional argument inset.
if (style->optionalargs == 1) {
InsetOptArg * it = optArgInset(*this);
if (it != 0)
it->latexOptional(buf, os, false, false);
}
else
os << style->latexparam();
break; break;
case LATEX_ITEM_ENVIRONMENT: case LATEX_ITEM_ENVIRONMENT:
if (bibkey) { if (bibkey) {