Dynamically set final punctuation of bib entries

Fullcite does not need the punct.
This commit is contained in:
Juergen Spitzmueller 2017-01-07 17:55:38 +01:00
parent 53654b430e
commit dbbefcd321
4 changed files with 20 additions and 13 deletions

View File

@ -2,7 +2,7 @@
#
# Author: Richard Heck <rgheck@comcast.net>
Format 62
Format 63
CiteFormat default
# translatable bits
@ -12,7 +12,7 @@ CiteFormat default
_numtext no.
_in in
# macros
# Macros
!pages {%pages%[[, %_pptext% %pages%]]}
!authoredit {%author%[[%author%, ]][[{%editor%[[%editor%, %_edtext%, ]]}]]}
!volnum {%volume%[[ %_voltext% %volume%, {%number%[[%_numtext% %number%]]}]]}
@ -21,11 +21,13 @@ CiteFormat default
!emphjournal {!<i>!}{%journal%[[%journal%]][[{%journaltitle%[[%journaltitle%]]}]]}{!</i>!}
!location {%address%[[%address%: ]][[{%location%[[%location%: ]]}]]}
!insomething %author%, %!quotetitle%, %_in%{%editor%[[ %editor%, %_edtext%,]]} {!<i>!}%booktitle%{!</i>!}%!volnum%{%edition%[[ %edition%]]} (%!location%%publisher%, %year%)%!pages%.{%note%[[ %note%]]}
# Entry types. Note that final punctuation will be added later, if needed.
article %author%, %!quotetitle%, %!emphjournal% {%volume%[[ %volume%{%number%[[, %number%]]}]]} (%year%)%!pages%.{%note%[[ %note%]]}
!insomething %author%, %!quotetitle%, %_in%{%editor%[[ %editor%, %_edtext%,]]} {!<i>!}%booktitle%{!</i>!}%!volnum%{%edition%[[ %edition%]]} (%!location%%publisher%, %year%)%!pages%{%note%[[. %note%]]}
!booklike %!authoredit%%!emphtitle%%!volnum%{%edition%[[ %edition%]]} (%!location%%publisher%, %year%).{%note%[[ %note%]]}
article %author%, %!quotetitle%, %!emphjournal% {%volume%[[ %volume%{%number%[[, %number%]]}]]} (%year%)%!pages%{%note%[[. %note%]]}
!booklike %!authoredit%%!emphtitle%%!volnum%{%edition%[[ %edition%]]} (%!location%%publisher%, %year%){%note%[[. %note%]]}
book %!booklike%
collection %!booklike%
proceedings %!booklike%
@ -33,7 +35,7 @@ CiteFormat default
incollection %!insomething%
inproceedings %!insomething%
!theses %author%, %title% (%!location%{%school%[[%school%]][[%institution%]]}, %year%).{%note%[[ %note%]]}
!theses %author%, %title% (%!location%{%school%[[%school%]][[%institution%]]}, %year%){%note%[[. %note%]]}
thesis %!theses%
phdthesis %!theses%
mastersthesis %!theses%

View File

@ -788,7 +788,7 @@ docstring BibTeXInfo::getValueForKey(string const & oldkey, Buffer const & buf,
CiteEngineType const engine_type = buf.params().citeEngineType();
DocumentClass const & dc = buf.params().documentClass();
docstring const & format =
from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_)));
from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_), false));
int counter = 0;
ret = expandFormat(format, xrefs, counter, buf, ci, false, false);
} else if (key == "textbefore")
@ -1000,7 +1000,7 @@ docstring const BiblioInfo::getLabel(vector<docstring> keys,
CiteEngineType const engine_type = buf.params().citeEngineType();
DocumentClass const & dc = buf.params().documentClass();
docstring const & format = from_utf8(dc.getCiteFormat(engine_type, style, "cite"));
docstring const & format = from_utf8(dc.getCiteFormat(engine_type, style, true, "cite"));
docstring ret = format;
vector<docstring>::const_iterator key = keys.begin();
vector<docstring>::const_iterator ken = keys.end();

View File

@ -1815,10 +1815,12 @@ Layout const & DocumentClass::htmlTOCLayout() const
}
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 = "{%author%[[%author%, ]][[{%editor%[[%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())
@ -1828,6 +1830,8 @@ string const & DocumentClass::getCiteFormat(CiteEngineType const & type,
it = itype->second.find(fallback);
if (it == itype->second.end())
return default_format;
if (punct)
return it->second + ".";
return it->second;
}

View File

@ -485,8 +485,9 @@ public:
/// returns true if the class has a ToC structure
bool hasTocLevels() const;
///
std::string const & getCiteFormat(CiteEngineType const & type,
std::string const & entry, std::string const & fallback = "") const;
std::string const getCiteFormat(CiteEngineType const & type,
std::string const & entry, bool const punct = true,
std::string const & fallback = "") const;
///
std::string const & getCiteMacro(CiteEngineType const & type,
std::string const & macro) const;