]> git.lyx.org Git - features.git/commitdiff
Implement auto-nesting.
authorJuergen Spitzmueller <spitz@lyx.org>
Mon, 1 Jan 2018 11:27:08 +0000 (12:27 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 1 Jan 2018 11:30:34 +0000 (12:30 +0100)
Now layouts can specify other layouts that should be nested in and
after the current one (if the layout is switched from the current one
and if it follows a paragraph in the current one).

This is particularly useful for things such as the beamer frames, where
particular layouts are practically always nested.

This is a backport from master, including all fixes.

12 files changed:
lib/doc/Customization.lyx
lib/doc/de/Customization.lyx
lib/doc/es/Customization.lyx
lib/doc/fr/Customization.lyx
lib/doc/ja/Customization.lyx
lib/layouts/beamer.layout
lib/scripts/layout2layout.py
src/Layout.cpp
src/Layout.h
src/LyXAction.cpp
src/Text3.cpp
src/TextClass.cpp

index 02f3d92d20c68042eec551a5c9229c74b8b494bd..462a374e19ff436b1b1019d1197f4b4322b9e722 100644 (file)
@@ -124,11 +124,12 @@ logicalmkup
 \papercolumns 1
 \papersides 2
 \paperpagestyle headings
-\tracking_changes false
+\tracking_changes true
 \output_changes false
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict true
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -12160,6 +12161,61 @@ Argument item:1
 \end_layout
 
 \end_deeper
+\begin_layout Description
+
+\change_inserted -712698321 1514539256
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514534780
+AutoNests
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names that should be nested in
+ and after the current one.
+ Only makes sense for nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514538124
+EndAutoNests
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514539161
+IsAutoNestedBy
+\change_unchanged
+
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
 \begin_layout Description
 \begin_inset Flex Code
 status collapsed
@@ -12889,6 +12945,63 @@ TitleLatexName
 \end_inset
 
  global entries).
+\change_inserted -712698321 1514539171
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1514539282
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514539190
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names after which this one should
+ be nested.
+ Only makes sense with regard to nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514539279
+EndIsAutoNestedBy
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710776
+AutoNests
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
index ff2d57019473f89c518e79037f1986805ddea4a5..08ae129f9a98ae413df79aef41e4e5dd3b357e96 100644 (file)
@@ -10615,6 +10615,43 @@ Argument item:1
 \begin_inset Flex Code
 status collapsed
 
+\begin_layout Plain Layout
+AutoNests
+\end_layout
+
+\end_inset
+
+ beinhaltet eine mit Kommata separierte Liste von Layoutnamen, welche in
+ und nach der aktuellen automatisch eingebettet werden sollen.
+ Dies ist nur für Layouts sinnvoll, die auch einbetten können (etwa Umgebungen).
+ Muss mit 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+EndAutoNests
+\end_layout
+
+\end_inset
+
+ beendet werden.
+ Siehe auch 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
 \begin_layout Plain Layout
 BabelPreamble
 \end_layout
@@ -11401,6 +11438,44 @@ TitleLatexName
 \begin_inset Flex Code
 status collapsed
 
+\begin_layout Plain Layout
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ beinhaltet eine mit Kommata separierte Liste von Layoutnamen, nach welchen
+ Absätze mit dem aktuellen Layout automatisch eingebettet werden sollen.
+ Sinnvolle Layouts für diese Liste sind nur solche, die auch einbetten können
+ (etwa Umgebungen).
+ Muss mit 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+EndIsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ beendet werden.
+ Siehe auch 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+AutoNests
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
 \begin_layout Plain Layout
 IsTocCaption
 \end_layout
index fbe53b51fe35752bc808d4bc0b58c51e3d6d10bb..ccfa52e70f5fa3f0ae0cfb35f2cca8856ce1ba1e 100644 (file)
@@ -123,11 +123,12 @@ logicalmkup
 \papercolumns 1
 \papersides 2
 \paperpagestyle headings
-\tracking_changes false
+\tracking_changes true
 \output_changes false
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict true
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -11816,6 +11817,69 @@ Argument item:1
 \end_layout
 
 \end_deeper
+\begin_layout Description
+
+\change_inserted -712698321 1514710560
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710560
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names that should be nested in
+ and after the current one.
+ Only makes sense for nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710560
+
+\lang english
+EndAutoNests
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710560
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
+\end_layout
+
 \begin_layout Description
 \begin_inset Flex Code
 status collapsed
@@ -12600,6 +12664,71 @@ TitleLatexName
 \end_inset
 
 ).
+\change_inserted -712698321 1514710606
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1514710606
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710606
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names after which this one should
+ be nested.
+ Only makes sense with regard to nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710606
+
+\lang english
+EndIsAutoNestedBy
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710757
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
index 042316c7cf30b030cecd4cd4f08425df437206ef..c1c8f8b75a836da04e65f87ef77e590c3fd1571c 100644 (file)
@@ -123,11 +123,12 @@ logicalmkup
 \papercolumns 1
 \papersides 2
 \paperpagestyle headings
-\tracking_changes false
+\tracking_changes true
 \output_changes false
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict false
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -12540,6 +12541,69 @@ Argument item:1
 \end_deeper
 \begin_layout Description
 
+\change_inserted -712698321 1514710551
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710551
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names that should be nested in
+ and after the current one.
+ Only makes sense for nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710551
+
+\lang english
+EndAutoNests
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710551
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
+\end_layout
+
+\begin_layout Description
+
 \lang english
 \begin_inset Flex Code
 status collapsed
@@ -13388,6 +13452,71 @@ TitleLatexName
 \end_inset
 
  dans les paramètres généraux).
+\change_inserted -712698321 1514710619
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1514710619
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710619
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names after which this one should
+ be nested.
+ Only makes sense with regard to nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710619
+
+\lang english
+EndIsAutoNestedBy
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710764
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
index f90386764886a383ae6ee664a956fe71d75a1a33..9940b4149569772b2f6103b9c0bcf7a26266bbfd 100644 (file)
@@ -172,6 +172,7 @@ End
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict true
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -10616,6 +10617,69 @@ Argument item:1
 \end_layout
 
 \end_deeper
+\begin_layout Description
+
+\change_inserted -712698321 1514710543
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710543
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names that should be nested in
+ and after the current one.
+ Only makes sense for nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710543
+
+\lang english
+EndAutoNests
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710543
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
+\end_layout
+
 \begin_layout Description
 \begin_inset Flex Code
 status collapsed
@@ -11276,6 +11340,71 @@ TitleLatexName
 \end_inset
 
 も参照).
+\change_inserted -712698321 1514710627
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1514710627
+
+\lang english
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710627
+
+\lang english
+IsAutoNestedBy
+\end_layout
+
+\end_inset
+
+ Includes a comma-separated list of layout names after which this one should
+ be nested.
+ Only makes sense with regard to nestable layouts (such as environments).
+ Must be ended by 
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710627
+
+\lang english
+EndIsAutoNestedBy
+\end_layout
+
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ See also 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1514710769
+
+\lang english
+AutoNests
+\end_layout
+
+\end_inset
+
+.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
index 14e4549d54c34f2fdbf65e9bf3119720bc58e08b..a9c8bcf70387efceb437e15de2104f3dd9568bb9 100644 (file)
@@ -6,7 +6,7 @@
 #   Richard Heck <rgheck@lyx.org>, Martin Vermeer <martin.vermeer@hut.fi> and probably others.
 
 
-Format 65
+Format 66
 
 #
 # GLOBAL SETTINGS
@@ -487,6 +487,12 @@ Style Frame
     AutoInsert     1
     IsTocCaption   1
   EndArgument
+  AutoNests 
+       Standard,Itemize,Enumerate,Description,FrameTitle,FrameSubtitle,Column,
+       Columns,ColumnsCenterAligned,ColumnsTopAligned,Pause,Overprint,OverlayArea,Only,Block,
+       ExampleBlock,AlertBlock,Bibliography,Quotation,Quote,Verse,Corollary,Definition,Definitions,
+       Example,Examples,Fact,Lemma,Proof,Theorem,LyX-Code
+  EndAutoNests
 End
 
 Style PlainFrame
@@ -670,6 +676,11 @@ Style Columns
     Family         Roman
     Color          latex
   EndFont
+  AutoNests 
+       Standard,Itemize,Enumerate,Description,Pause,Overprint,OverlayArea,Only,Block,
+       ExampleBlock,AlertBlock,Bibliography,Quotation,Quote,Verse,Corollary,Definition,Definitions,
+       Example,Examples,Fact,Lemma,Proof,Theorem,LyX-Code
+  EndAutoNests
 End
 
 Style ColumnsCenterAligned
@@ -890,6 +901,10 @@ Style Block
     EndFont
     AutoInsert     1
   EndArgument
+  AutoNests 
+       Standard,Itemize,Enumerate,Description,Pause,Overprint,OverlayArea,Only,Quotation,
+       Quote,Verse,Corollary,Definition,Definitions,Example,Examples,Fact,Lemma,Proof,Theorem,LyX-Code
+  EndAutoNests
 End
 
 Style ExampleBlock
@@ -1233,6 +1248,9 @@ Style Corollary
     LabelString    "Additional Theorem Text"
     Tooltip        "Additional text appended to the theorem header"
   EndArgument
+  AutoNests 
+       Standard,Itemize,Enumerate,Description,Pause,Overprint,OverlayArea,Only,LyX-Code
+  EndAutoNests
 End
 
 Style Definition
index 2cf54c5e1490b2736570cdb723e80a708478f034..d13f8bf1052082991daad7932cbe6b062a729756 100644 (file)
@@ -11,7 +11,7 @@
 # This script will update a .layout file to current format
 
 # The latest layout format is also defined in src/TextClass.cpp
-currentFormat = 65
+currentFormat = 66
 
 
 # Incremented to format 4, 6 April 2007, lasgouttes
@@ -220,6 +220,10 @@ currentFormat = 65
 # Incremented to format 65, 16 October 2017 by spitz
 # Color collapsable -> collapsible
 
+# Incremented to format 66, 28 December 2017 by spitz
+# New Layout tags "AutoNests ... EndAutoNests" and
+# "IsAutoNestedBy ... EndIsAutoNestedBy"
+
 # Do not forget to document format change in Customization
 # Manual (section "Declaring a new text class").
 
@@ -469,6 +473,11 @@ def convert(lines, end_format):
                 i += 1
             continue
 
+        if format == 65:
+            # nothing to do.
+            i += 1
+            continue
+
         if format == 64:
             match = re.compile(b'(\\s*Color\\s+)(\\w+)', re.IGNORECASE).match(lines[i])
             if not match:
index ec23e57f1eadcbda44d8d2ac2533bc97601b017f..0a783d0aad1542fb5e2124be8c62521dd2716b3c 100644 (file)
@@ -40,6 +40,8 @@ enum LayoutTags {
        LT_ALIGN = 1,
        LT_ALIGNPOSSIBLE,
        LT_ARGUMENT,
+       LT_AUTONESTS,
+       LT_AUTONESTEDBY,
        LT_MARGIN,
        LT_BOTTOMSEP,
        LT_CATEGORY,
@@ -191,6 +193,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "align",          LT_ALIGN },
                { "alignpossible",  LT_ALIGNPOSSIBLE },
                { "argument",       LT_ARGUMENT },
+               { "autonests",      LT_AUTONESTS },
                { "babelpreamble",  LT_BABELPREAMBLE },
                { "bottomsep",      LT_BOTTOMSEP },
                { "category",       LT_CATEGORY },
@@ -217,6 +220,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "innertag",       LT_INNERTAG },
                { "inpreamble",     LT_INPREAMBLE },
                { "intitle",        LT_INTITLE },
+               { "isautonestedby", LT_AUTONESTEDBY },
                { "istoccaption",   LT_ISTOCCAPTION },
                { "itemcommand",    LT_ITEMCOMMAND },
                { "itemsep",        LT_ITEMSEP },
@@ -592,6 +596,30 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        break;
                }
 
+               case LT_AUTONESTS: {
+                       docstring const autonest =
+                               subst(subst(subst(lex.getLongString(from_ascii("EndAutoNests")),
+                                                 from_ascii("\n"), docstring()),
+                                           from_ascii(" "), docstring()),
+                                     from_ascii("\t"), docstring());
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest);
+                       autonests_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
+               case LT_AUTONESTEDBY: {
+                       docstring const autonest =
+                               subst(subst(subst(lex.getLongString(from_ascii("EndIsAutoNestedBy")),
+                                                 from_ascii("\n"), docstring()),
+                                           from_ascii(" "), docstring()),
+                                     from_ascii("\t"), docstring());
+                       vector<docstring> const autonests =
+                               getVectorFromString(autonest);
+                       autonested_by_.insert(autonests.begin(), autonests.end());
+                       break;
+               }
+
                case LT_REFPREFIX: {
                        docstring arg;
                        lex >> arg;
@@ -1387,6 +1415,26 @@ void Layout::write(ostream & os) const
                }
                os << '\n';
        }
+       if (!autonests_.empty()) {
+               os << "\tAutoNests\n\t";
+               for (set<docstring>::const_iterator it = autonests_.begin();
+                    it != autonests_.end(); ++it) {
+                       if (it != autonests_.begin())
+                               os << ',';
+                       os << to_utf8(*it);
+               }
+               os << "\n\tEndAutoNests\n";
+       }
+       if (!autonested_by_.empty()) {
+               os << "\tIsAutoNestedBy\n\t";
+               for (set<docstring>::const_iterator it = autonested_by_.begin();
+                    it != autonested_by_.end(); ++it) {
+                       if (it != autonested_by_.begin())
+                               os << ',';
+                       os << to_utf8(*it);
+               }
+               os << "\n\tIsAutoNestedBy\n";
+       }
        if (refprefix.empty())
                os << "\tRefPrefix OFF\n";
        else
index 90d1b2e8edf5ff87dc7501aae47f45331c82d546..04f184f3a4d7d263824b39935c8aa25f2d88dd0d 100644 (file)
@@ -149,6 +149,10 @@ public:
        ///
        std::set<std::string> const & requires() const { return requires_; }
        ///
+       std::set<docstring> const & autonests() const { return autonests_; }
+       ///
+       std::set<docstring> const & isAutonestedBy() const { return autonested_by_; }
+       ///
        std::string const & latexparam() const { return latexparam_; }
        ///
        docstring leftdelim() const { return leftdelim_; }
@@ -468,6 +472,10 @@ private:
        bool par_group_;
        /// Packages needed for this layout
        std::set<std::string> requires_;
+       /// Layouts that are by default nested after this one
+       std::set<docstring> autonests_;
+       /// Layouts that by auto-nest this one
+       std::set<docstring> autonested_by_;
        ///
        LaTeXArgMap latexargs_;
        ///
index 29052d24689223d8f8eb8f83851682d7b54ced8b..952602821e4ee65e2eb00fea6845511a66fafb76 100644 (file)
@@ -2300,8 +2300,9 @@ void LyXAction::init()
 /*!
  * \var lyx::FuncCode lyx::LFUN_LAYOUT
  * \li Action: Sets the layout (that is, environment) for the current paragraph.
- * \li Syntax: layout <LAYOUT>
- * \li Params: <LAYOUT>: the layout to use
+ * \li Syntax: layout <LAYOUT> [ignorenests]
+ * \li Params: <LAYOUT>: the layout to use\n
+               ignorenests: If specified, nesting advices will be ignored.
  * \endvar
  */
                { LFUN_LAYOUT, "layout", Noop, Layout },
index 4b2f90af4b230d98d5f66a161f6abe3a6dae1f4c..999b960fc4cbdbcad7041677eaa6ea919f0cc885 100644 (file)
@@ -1407,7 +1407,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_LAYOUT: {
-               docstring layout = cmd.argument();
+               bool const ignoreautonests = cmd.getArg(1) == "ignoreautonests";
+               docstring layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : cmd.argument();
                LYXERR(Debug::INFO, "LFUN_LAYOUT: (arg) " << to_utf8(layout));
 
                Paragraph const & para = cur.paragraph();
@@ -1461,8 +1462,18 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        }
                }
 
-               if (change_layout)
+               if (change_layout) {
                        setLayout(cur, layout);
+                       if (cur.pit() > 0 && !ignoreautonests) {
+                               set<docstring> const & autonests =
+                                               pars_[cur.pit() - 1].layout().autonests();
+                               set<docstring> const & autonested =
+                                               pars_[cur.pit()].layout().isAutonestedBy();
+                               if (autonests.find(layout) != autonests.end()
+                                               || autonested.find(old_layout) != autonested.end())
+                                       lyx::dispatch(FuncRequest(LFUN_DEPTH_INCREMENT));
+                       }
+               }
 
                Layout::LaTeXArgMap args = tclass[layout].args();
                Layout::LaTeXArgMap::const_iterator lait = args.begin();
@@ -3141,7 +3152,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
 
        case LFUN_LAYOUT: {
                DocumentClass const & tclass = cur.buffer()->params().documentClass();
-               docstring layout = cmd.argument();
+               bool const ignoreautonests = cmd.getArg(1) == "ignoreautonests";
+               docstring layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : cmd.argument();
                if (layout.empty())
                        layout = tclass.defaultLayoutName();
                enable = !owner_->forcePlainLayout() && tclass.hasLayout(layout);
index f63632471c87be80a433f49adae7c9dc9c84d14a..d4b7d813708b6f2ad30b2fd0b42f773db6b4de63 100644 (file)
@@ -62,7 +62,7 @@ namespace lyx {
 // You should also run the development/tools/updatelayouts.py script,
 // to update the format of all of our layout files.
 //
-int const LAYOUT_FORMAT = 65; //spitz: Color collapsable -> collapsible.
+int const LAYOUT_FORMAT = 66; //spitz: New layout tag AutoNests
 
 
 // Layout format for the current lyx file format. Controls which format is