X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=43abe6769bcedd67cd416217e6fe155c2df36eff;hb=71a57e0f4df9d2b860ec2d060cc30043206c335d;hp=f33dc18a88270f8fca118e51bc76194fc5df5a5b;hpb=da4e51a6c2987ef03d5f618f9cc43c87a2992fa4;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index f33dc18a88..43abe6769b 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -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 = 75; // spitz: FreeSpacing (Argument) // 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 const & TextClass::citeStyles( +vector const & TextClass::getCiteStyles( CiteEngineType const & type) const { static vector empty; @@ -1050,21 +1057,31 @@ vector 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; @@ -1151,38 +1168,69 @@ bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add) cite_command_aliases_[s] = lyx_cmd; } vector const stardescs = getVectorFromString(stardesc, "!"); - int size = stardesc.size(); + int size = int(stardesc.size()); if (size > 0) 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_) { + 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) { + 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 @@ -1238,26 +1280,60 @@ bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt) continue; if (initchar == '!' || initchar == '_' || prefixIs(etype, "B_")) { bool defined = false; + bool aydefined = false; + bool numdefined = false; // Check if the macro is already def'ed - for (auto const cm : cite_macros_) { - if (cm.first != cetype) + for (auto const & cm : cite_macros_) { + if (!(type & cm.first)) continue; - if (cm.second.find(etype) != cm.second.end()) - defined = true; + if (cm.second.find(etype) != cm.second.end()) { + if (type == cm.first) + // defined as default or specific type + defined = true; + if (cm.first == ENGINE_TYPE_AUTHORYEAR) + // defined for author-year + aydefined = true; + else if (cm.first == ENGINE_TYPE_NUMERICAL) + // defined for numerical + numdefined = true; + } + } + if (!defined || overwrite) { + if (type & ENGINE_TYPE_AUTHORYEAR && (type != ENGINE_TYPE_DEFAULT || !aydefined)) + cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; + if (type & ENGINE_TYPE_NUMERICAL && (type != ENGINE_TYPE_DEFAULT || !numdefined)) + cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type == ENGINE_TYPE_DEFAULT) + cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition; } - if (!defined || overwrite) - cite_macros_[cetype][etype] = definition; } else { bool defined = false; + bool aydefined = false; + bool numdefined = false; // Check if the format is already def'ed - for (auto const cm : cite_formats_) { - if (cm.first != cetype) + for (auto const & cm : cite_formats_) { + if (!(type & cm.first)) continue; - if (cm.second.find(etype) != cm.second.end()) - defined = true; + if (cm.second.find(etype) != cm.second.end()) { + if (type == cm.first) + // defined as default or specific type + defined = true; + if (cm.first == ENGINE_TYPE_AUTHORYEAR) + // defined for author-year + aydefined = true; + else if (cm.first == ENGINE_TYPE_NUMERICAL) + // defined for numerical + numdefined = true; + } + } + if (!defined || overwrite){ + if (type & ENGINE_TYPE_AUTHORYEAR && (type != ENGINE_TYPE_DEFAULT || !aydefined)) + cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; + if (type & ENGINE_TYPE_NUMERICAL && (type != ENGINE_TYPE_DEFAULT || !numdefined)) + cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type == ENGINE_TYPE_DEFAULT) + cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition; } - if (!defined || overwrite) - cite_formats_[cetype][etype] = definition; } } return true; @@ -1873,7 +1949,9 @@ Layout const & DocumentClass::htmlTOCLayout() const string const DocumentClass::getCiteFormat(CiteEngineType const & type, string const & entry, bool const punct, string const & fallback) const { - string default_format = "{%fullnames:author%[[%fullnames:author%, ]][[{%fullnames:editor%[[%fullnames:editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!!}%journal%{!!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}"; + string default_format = "{%fullnames:author%[[%fullnames:author%, ]][[{%fullnames:editor%[[%fullnames:editor%, ed., ]]}]]}" + "\"%title%\"{%journal%[[, {!!}%journal%{!!}]][[{%publisher%[[, %publisher%]]" + "[[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}"; if (punct) default_format += ".";