// You should also run the development/tools/updatelayouts.py script,
// to update the format of all of our layout files.
//
-int const LAYOUT_FORMAT = 62; //spitz PassThru for arguments.
+int const LAYOUT_FORMAT = 63; //spitz: new tags CiteFramework, MaxCiteNames, extended InsetCite syntax.
// Layout format for the current lyx file format. Controls which format is
outputType_(LATEX), outputFormat_("latex"),
defaultfont_(sane_font),
titletype_(TITLE_COMMAND_AFTER), titlename_("maketitle"),
- min_toclevel_(0), max_toclevel_(0),
+ min_toclevel_(0), max_toclevel_(0), maxcitenames_(2),
cite_full_author_list_(true)
{
}
TC_CITEENGINETYPE,
TC_CITEFORMAT,
TC_CITEFRAMEWORK,
+ TC_MAXCITENAMES,
TC_DEFAULTBIBLIO,
TC_FULLAUTHORLIST,
TC_OUTLINERNAME
{ "input", TC_INPUT },
{ "insetlayout", TC_INSETLAYOUT },
{ "leftmargin", TC_LEFTMARGIN },
+ { "maxcitenames", TC_MAXCITENAMES },
{ "modifystyle", TC_MODIFYSTYLE },
{ "nocounter", TC_NOCOUNTER },
{ "nofloat", TC_NOFLOAT },
case TC_INPUT: // Include file
if (lexrc.next()) {
+ FileName tmp;
string const inc = lexrc.getString();
- FileName tmp = libFileSearch("layouts", inc,
+ if (!path().empty() && (prefixIs(inc, "./") ||
+ prefixIs(inc, "../")))
+ tmp = fileSearch(path(), inc, "layout");
+ else
+ tmp = libFileSearch("layouts", inc,
"layout");
if (tmp.empty()) {
// Either way, we just scan the rest and discard it
else {
Layout lay;
- // false positive from coverity
- // coverity[CHECKED_RETURN]
- readStyle(lexrc, lay);
+ // signal to coverity that we do not care about the result
+ (void)readStyle(lexrc, lay);
}
break;
}
citeframework_ = rtrim(lexrc.getString());
break;
+ case TC_MAXCITENAMES:
+ lexrc.next();
+ maxcitenames_ = size_t(lexrc.getInteger());
+ break;
+
case TC_DEFAULTBIBLIO:
if (lexrc.next()) {
vector<string> const dbs =
vector<string>::const_iterator it = dbs.begin();
vector<string>::const_iterator end = dbs.end();
for (; it != end; ++it) {
- if (!contains(*it, ':'))
- cite_default_biblio_style_[opt_enginetype_] = *it;
- else {
+ if (!contains(*it, ':')) {
+ vector<string> const enginetypes =
+ getVectorFromString(opt_enginetype_, "|");
+ for (string const &s: enginetypes)
+ cite_default_biblio_style_[s] = *it;
+ } else {
string eng;
string const db = split(*it, eng, ':');
cite_default_biblio_style_[eng] = db;
getout = true;
continue;
}
- string cmd;
CitationStyle cs;
char ichar = def[0];
if (ichar == '#')
continue;
- if (ichar == 'C') {
+ if (isUpperCase(ichar)) {
cs.forceUpperCase = true;
- def[0] = 'c';
+ def[0] = lowercase(ichar);
}
+ /** For portability reasons (between different
+ * cite engines such as natbib and biblatex),
+ * we distinguish between:
+ * 1. The LyX name as output in the LyX file
+ * 2. Possible aliases that might fall back to
+ * the given LyX name in the current engine
+ * 3. The actual LaTeX command that is output
+ * (2) and (3) are optional.
+ * Also, the GUI string for the starred version can
+ * be changed
+ * The syntax is:
+ * LyXName|alias,nextalias*<!stardesc!stardesctooltip>[][]=latexcmd
+ */
+ enum ScanMode {
+ LyXName,
+ Alias,
+ LaTeXCmd,
+ StarDesc
+ };
+
+ ScanMode mode = LyXName;
+ ScanMode oldmode = LyXName;
+ string lyx_cmd;
+ string alias;
+ string latex_cmd;
+ string stardesc;
size_t const n = def.size();
for (size_t i = 0; i != n; ++i) {
ichar = def[i];
- if (ichar == '*')
- cs.fullAuthorList = true;
+ if (ichar == '|')
+ mode = Alias;
+ else if (ichar == '=')
+ mode = LaTeXCmd;
+ else if (ichar == '<') {
+ oldmode = mode;
+ mode = StarDesc;
+ } else if (ichar == '>')
+ mode = oldmode;
+ else if (mode == LaTeXCmd)
+ latex_cmd += ichar;
+ else if (mode == StarDesc)
+ stardesc += ichar;
+ else if (ichar == '$')
+ cs.hasQualifiedList = true;
+ else if (ichar == '*')
+ cs.hasStarredVersion = true;
else if (ichar == '[' && cs.textAfter)
cs.textBefore = true;
else if (ichar == '[')
cs.textAfter = true;
- else if (ichar != ']')
- cmd += ichar;
+ else if (ichar != ']') {
+ if (mode == Alias)
+ alias += ichar;
+ else
+ lyx_cmd += ichar;
+ }
}
-
- cs.cmd = cmd;
+ cs.name = lyx_cmd;
+ cs.cmd = latex_cmd.empty() ? lyx_cmd : latex_cmd;
+ if (!alias.empty()) {
+ vector<string> const aliases = getVectorFromString(alias);
+ for (string const &s: aliases)
+ cite_command_aliases_[s] = lyx_cmd;
+ }
+ vector<string> const stardescs = getVectorFromString(stardesc, "!");
+ int size = stardesc.size();
+ if (size > 0)
+ cs.stardesc = stardescs[0];
+ if (size > 1)
+ cs.startooltip = stardescs[1];
if (type & ENGINE_TYPE_AUTHORYEAR)
cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs);
if (type & ENGINE_TYPE_NUMERICAL)
}
-docstring TextClass::outlinerName(std::string const & type) const
-{
- std::map<std::string,docstring>::const_iterator const it
- = outliner_names_.find(type);
- if (it == outliner_names_.end()) {
- LYXERR0("Missing OutlinerName for " << type << "!");
- return from_utf8(type);
- } else
- return it->second;
-}
-
-
string const & TextClass::prerequisites(string const & sep) const
{
if (contains(prerequisites_, ',')) {
}
-string const & DocumentClass::getCiteFormat(CiteEngineType const & type,
- string const & entry, string const & fallback) const
+string const DocumentClass::getCiteFormat(CiteEngineType const & type,
+ string const & entry, bool const punct, string const & fallback) const
{
- static string default_format = "{%author%[[%author%, ]][[{%editor%[[%editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!<i>!}%journal%{!</i>!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}.";
+ string default_format = "{%fullnames:author%[[%fullnames:author%, ]][[{%fullnames:editor%[[%fullnames:editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!<i>!}%journal%{!</i>!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}";
+ if (punct)
+ default_format += ".";
map<CiteEngineType, map<string, string> >::const_iterator itype = cite_formats_.find(type);
if (itype == cite_formats_.end())
it = itype->second.find(fallback);
if (it == itype->second.end())
return default_format;
+ if (punct)
+ return it->second + ".";
return it->second;
}
vector<string> cmds;
for (; it != end; ++it) {
CitationStyle const cite = *it;
- cmds.push_back(cite.cmd);
+ cmds.push_back(cite.name);
}
return cmds;
}