]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Fix some group boxes.
[lyx.git] / src / TextClass.cpp
index f33dc18a88270f8fca118e51bc76194fc5df5a5b..566ac7a8e36ebee667a38836567d355fa2a9d701 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 = 68; //spitz: New layout tag AddToCiteEngine
+int const LAYOUT_FORMAT = 72; // spitz: TableStyle
 
 
 // Layout format for the current lyx file format. Controls which format is
@@ -151,9 +151,9 @@ TextClass::TextClass()
        : loaded_(false), tex_class_avail_(false),
          opt_enginetype_("authoryear|numerical"), opt_fontsize_("10|11|12"),
          opt_pagestyle_("empty|plain|headings|fancy"), pagestyle_("default"),
-         columns_(1), sides_(OneSide), secnumdepth_(3), tocdepth_(3),
-         outputType_(LATEX), outputFormat_("latex"), has_output_format_(false),
-         defaultfont_(sane_font),
+         tablestyle_("default"), columns_(1), sides_(OneSide), secnumdepth_(3),
+         tocdepth_(3), outputType_(LATEX), outputFormat_("latex"),
+         has_output_format_(false), defaultfont_(sane_font), 
          titletype_(TITLE_COMMAND_AFTER), titlename_("maketitle"),
          min_toclevel_(0), max_toclevel_(0), maxcitenames_(2),
          cite_full_author_list_(true)
@@ -226,7 +226,8 @@ enum TextClassTags {
        TC_MAXCITENAMES,
        TC_DEFAULTBIBLIO,
        TC_FULLAUTHORLIST,
-       TC_OUTLINERNAME
+       TC_OUTLINERNAME,
+       TC_TABLESTYLE
 };
 
 
@@ -279,6 +280,7 @@ LexerKeyword textClassTags[] = {
        { "secnumdepth",       TC_SECNUMDEPTH },
        { "sides",             TC_SIDES },
        { "style",             TC_STYLE },
+       { "tablestyle",        TC_TABLESTYLE },
        { "titlelatexname",    TC_TITLELATEXNAME },
        { "titlelatextype",    TC_TITLELATEXTYPE },
        { "tocdepth",          TC_TOCDEPTH }
@@ -863,6 +865,11 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                case TC_OUTLINERNAME:
                        error = !readOutlinerName(lexrc);
                        break;
+
+               case TC_TABLESTYLE:
+                       lexrc.next();
+                       tablestyle_ = rtrim(lexrc.getString());
+                       break;
                } // end of switch
        }
 
@@ -1036,7 +1043,7 @@ void TextClass::readClassOptions(Lexer & lexrc)
 }
 
 
-vector<CitationStyle> const & TextClass::citeStyles(
+vector<CitationStyle> const & TextClass::getCiteStyles(
        CiteEngineType const & type) const
 {
        static vector<CitationStyle> empty;
@@ -1050,21 +1057,31 @@ vector<CitationStyle> const & TextClass::citeStyles(
 bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
 {
        int const type = readCiteEngineType(lexrc);
-       CiteEngineType cetype = ENGINE_TYPE_DEFAULT;
-       if (type & ENGINE_TYPE_AUTHORYEAR)
-               cetype = ENGINE_TYPE_AUTHORYEAR;
-       else if (type & ENGINE_TYPE_NUMERICAL)
-               cetype = ENGINE_TYPE_NUMERICAL;
+       bool authoryear = (type & ENGINE_TYPE_AUTHORYEAR);
+       bool numerical = (type & ENGINE_TYPE_NUMERICAL);
+       bool defce = (type & ENGINE_TYPE_DEFAULT);
 
-       if (rt == CITE_ENGINE && !citeStyles(cetype).empty())
+       if (rt == CITE_ENGINE) {
                // The cite engines are not supposed to overwrite
                // CiteStyle defined by the class or a module.
-               return true;
+               if (authoryear)
+                       authoryear = getCiteStyles(ENGINE_TYPE_AUTHORYEAR).empty();
+               if (numerical)
+                       numerical = getCiteStyles(ENGINE_TYPE_NUMERICAL).empty();
+               if (defce)
+                       defce = getCiteStyles(ENGINE_TYPE_DEFAULT).empty();
+       }
 
-       if (rt != CITE_ENGINE && !add)
+       if (rt != CITE_ENGINE && !add) {
                // Reset if we defined CiteStyle
                // from the class or a module
-               cite_styles_[cetype].clear();
+               if (authoryear)
+                       cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear();
+               if (numerical)
+                       cite_styles_[ENGINE_TYPE_NUMERICAL].clear();
+               if (defce)
+                       cite_styles_[ENGINE_TYPE_DEFAULT].clear();
+       }
 
        string def;
        bool getout = false;
@@ -1156,33 +1173,64 @@ bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
                        cs.stardesc = stardescs[0];
                if (size > 1)
                        cs.startooltip = stardescs[1];
-               if (add)
-                       class_cite_styles_[cetype].push_back(cs);
-               else
-                       cite_styles_[cetype].push_back(cs);
+               if (add) {
+                       if (authoryear)
+                               class_cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs);
+                       if (numerical)
+                               class_cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs);
+                       if (defce)
+                               class_cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs);
+               } else {
+                       if (authoryear)
+                               cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs);
+                       if (numerical)
+                               cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs);
+                       if (defce)
+                               cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs);
+               }
        }
-       // Stop here if we do AddToCiteEngine,
+       // If we do AddToCiteEngine, do not apply yet,
        // except if we have already a style to add something to
-       if (add && citeStyles(cetype).empty())
-               return getout;
+       bool apply_ay = !add;
+       bool apply_num = !add;
+       bool apply_def = !add;
+       if (add) {
+               if (type & ENGINE_TYPE_AUTHORYEAR)
+                       apply_ay = !getCiteStyles(ENGINE_TYPE_AUTHORYEAR).empty();
+               if (type & ENGINE_TYPE_NUMERICAL)
+                       apply_num = !getCiteStyles(ENGINE_TYPE_NUMERICAL).empty();
+               if (type & ENGINE_TYPE_DEFAULT)
+                       apply_def = !getCiteStyles(ENGINE_TYPE_DEFAULT).empty();
+       }
 
        // Add the styles from AddToCiteEngine to the class' styles
        // (but only if they are not yet defined)
        for (auto const cis : class_cite_styles_) {
                // Only consider the current CiteEngineType
-               if (cis.first != cetype)
+               if (!(type & cis.first))
                        continue;
                for (auto const ciss : cis.second) {
                        bool defined = false;
                        // Check if the style "name" is already def'ed
-                       for (auto const av : citeStyles(cis.first))
+                       for (auto const av : getCiteStyles(cis.first))
                                if (av.name == ciss.name)
                                        defined = true;
-                       if (!defined)
-                               cite_styles_[cis.first].push_back(ciss);
+                       if (!defined) {
+                               if (cis.first == ENGINE_TYPE_AUTHORYEAR && apply_ay)
+                                       cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(ciss);
+                               else if (cis.first == ENGINE_TYPE_NUMERICAL && apply_num)
+                                       cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(ciss);
+                               else if (cis.first == ENGINE_TYPE_DEFAULT && apply_def)
+                                       cite_styles_[ENGINE_TYPE_DEFAULT].push_back(ciss);
+                       }
                }
        }
-       class_cite_styles_[cetype].clear();
+       if (type & ENGINE_TYPE_AUTHORYEAR && apply_ay)
+               class_cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear();
+       if (type & ENGINE_TYPE_NUMERICAL && apply_num)
+               class_cite_styles_[ENGINE_TYPE_NUMERICAL].clear();
+       if (type & ENGINE_TYPE_DEFAULT && apply_def)
+               class_cite_styles_[ENGINE_TYPE_DEFAULT].clear();
        return getout;
 }
 
@@ -1213,12 +1261,6 @@ int TextClass::readCiteEngineType(Lexer & lexrc) const
 bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
 {
        int const type = readCiteEngineType(lexrc);
-       CiteEngineType cetype = ENGINE_TYPE_DEFAULT;
-       if (type & ENGINE_TYPE_AUTHORYEAR)
-               cetype = ENGINE_TYPE_AUTHORYEAR;
-       else if (type & ENGINE_TYPE_NUMERICAL)
-               cetype = ENGINE_TYPE_NUMERICAL;
-
        string etype;
        string definition;
        // Cite engine definitions do not overwrite existing
@@ -1240,24 +1282,36 @@ bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
                        bool defined = false;
                        // Check if the macro is already def'ed
                        for (auto const cm : cite_macros_) {
-                               if (cm.first != cetype)
+                               if (!(type & cm.first))
                                        continue;
                                if (cm.second.find(etype) != cm.second.end())
                                        defined = true;
                        }
-                       if (!defined || overwrite)
-                               cite_macros_[cetype][etype] = definition;
+                       if (!defined || overwrite) {
+                               if (type & ENGINE_TYPE_AUTHORYEAR)
+                                       cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
+                               if (type & ENGINE_TYPE_NUMERICAL)
+                                       cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition;
+                               if (type & ENGINE_TYPE_DEFAULT)
+                                       cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition;
+                       }
                } else {
                        bool defined = false;
                        // Check if the format is already def'ed
                        for (auto const cm : cite_formats_) {
-                               if (cm.first != cetype)
+                               if (!(type & cm.first))
                                        continue;
                                if (cm.second.find(etype) != cm.second.end())
                                        defined = true;
                        }
-                       if (!defined || overwrite)
-                               cite_formats_[cetype][etype] = definition;
+                       if (!defined || overwrite){
+                               if (type & ENGINE_TYPE_AUTHORYEAR)
+                                       cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
+                               if (type & ENGINE_TYPE_NUMERICAL)
+                                       cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition;
+                               if (type & ENGINE_TYPE_DEFAULT)
+                                       cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition;
+                       }
                }
        }
        return true;