]> git.lyx.org Git - features.git/commitdiff
IfStyle and IfCounter tags for layout. Docs to follow.
authorRichard Heck <rgheck@comcast.net>
Wed, 12 Aug 2009 14:50:01 +0000 (14:50 +0000)
committerRichard Heck <rgheck@comcast.net>
Wed, 12 Aug 2009 14:50:01 +0000 (14:50 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30989 a592a061-630c-0410-9148-cb99ea01b6c8

lib/scripts/layout2layout.py
src/Counters.cpp
src/Counters.h
src/TextClass.cpp

index 4680c1f1be022f417c5930132b1d6aea696b069b..edc7db2c1c321444bc8c195f24789c49109a0e4d 100644 (file)
@@ -67,7 +67,7 @@ import os, re, string, sys
 # Do not forget to document format change in Customization
 # Manual (section "Declaring a new text class").
 
-currentFormat = 16
+currentFormat = 17
 
 
 def usage(prog_name):
@@ -256,7 +256,7 @@ def convert(lines):
             continue
 
         # This just involved new features, not any changes to old ones
-        if format == 14 or format == 15:
+        if format == 14 or format == 15 or format == 16:
           i += 1
           continue
 
index b7e473a2a2f28d5e48ce53b5099e80f9779ab332..a0f1d139d7cce2f0819eb31949629c7f1f26caf4 100644 (file)
@@ -171,18 +171,20 @@ bool Counters::hasCounter(docstring const & c) const
 }
 
 
-bool Counters::read(Lexer & lex, docstring const & name)
+bool Counters::read(Lexer & lex, docstring const & name, bool makenew)
 {
        if (hasCounter(name)) {
                LYXERR(Debug::TCLASS, "Reading existing counter " << to_utf8(name));
                return counterList_[name].read(lex);
        }
+
        LYXERR(Debug::TCLASS, "Reading new counter " << to_utf8(name));
        Counter cnt;
        bool success = cnt.read(lex);
-       if (success)
+       // if makenew is false, we will just discard what we read
+       if (success && makenew)
                counterList_[name] = cnt;
-       else
+       else if (!success)
                LYXERR0("Error reading counter `" << name << "'!");
        return success;
 }
index fdae212a262ee9947b82abfea786f09ea85abf1c..e081ad21bbc8e8939ca2f22aa54309b49c850052 100644 (file)
@@ -99,8 +99,10 @@ public:
        /// Checks whether the given counter exists.
        bool hasCounter(docstring const & c) const;
        /// reads the counter name
+       /// \param makeNew whether to make a new counter if one 
+       ///        doesn't already exist
        /// \return true on success
-       bool read(Lexer & lex, docstring const & name);
+       bool read(Lexer & lex, docstring const & name, bool makenew);
        ///
        void set(docstring const & ctr, int val);
        ///
index 0a349e85720d3935faa1593a9d928c9a589bb722..4102a345c2ab77f6e1aa734816d021a188b37866 100644 (file)
@@ -62,7 +62,7 @@ private:
 };
 
 // Keep the changes documented in the Customization manual. 
-int const FORMAT = 16;
+int const FORMAT = 17;
 
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
@@ -164,6 +164,7 @@ enum TextClassTags {
        TC_OUTPUTFORMAT,
        TC_INPUT,
        TC_STYLE,
+       TC_IFSTYLE,
        TC_DEFAULTSTYLE,
        TC_INSETLAYOUT,
        TC_NOSTYLE,
@@ -182,6 +183,7 @@ enum TextClassTags {
        TC_RIGHTMARGIN,
        TC_FLOAT,
        TC_COUNTER,
+       TC_IFCOUNTER,
        TC_NOFLOAT,
        TC_TITLELATEXNAME,
        TC_TITLELATEXTYPE,
@@ -209,6 +211,8 @@ namespace {
                { "float",             TC_FLOAT },
                { "format",            TC_FORMAT },
                { "htmlpreamble",      TC_HTMLPREAMBLE },
+               { "ifcounter",         TC_IFCOUNTER },
+               { "ifstyle",           TC_IFSTYLE },
                { "input",             TC_INPUT },
                { "insetlayout",       TC_INSETLAYOUT },
                { "leftmargin",        TC_LEFTMARGIN },
@@ -352,6 +356,10 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        break;
                }
 
+               // used below to track whether we are in an IfStyle or IfCounter tag.
+               bool ifstyle    = false;
+               bool ifcounter  = false;
+
                switch (static_cast<TextClassTags>(le)) {
 
                case TC_FORMAT:
@@ -404,6 +412,9 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        }
                        break;
 
+               case TC_IFSTYLE:
+                       ifstyle = true;
+                       // fall through
                case TC_STYLE: {
                        if (!lexrc.next()) {
                                lexrc.printError("No name given for style: `$$Token'.");
@@ -423,7 +434,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        } else if (hasLayout(name)) {
                                Layout & lay = operator[](name);
                                error = !readStyle(lexrc, lay);
-                       } else {
+                       } else if (!ifstyle) {
                                Layout layout;
                                layout.setName(name);
                                error = !readStyle(lexrc, layout);
@@ -436,6 +447,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                        defaultlayout_ = name;
                                }
                        }
+                       else {
+                               // scan the rest and discard it
+                               Layout lay;
+                               readStyle(lexrc, lay);
+                               error = false;
+                       }
+
+                       // reset flag
+                       ifstyle = false;
                        break;
                }
 
@@ -605,6 +625,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                        readFloat(lexrc);
                        break;
 
+               case TC_IFCOUNTER:
+                       ifcounter = true;
                case TC_COUNTER:
                        if (lexrc.next()) {
                                docstring const name = lexrc.getDocString();
@@ -617,12 +639,14 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                        // and discard it.
                                        c.read(lexrc);
                                } else
-                                       error = !counters_.read(lexrc, name);
+                                       error = !counters_.read(lexrc, name, !ifcounter);
                        }
                        else {
                                lexrc.printError("No name given for style: `$$Token'.");
                                error = true;
                        }
+                       // reset flag
+                       ifcounter = false;
                        break;
 
                case TC_TITLELATEXTYPE: