% mla.cbx, v1.5 2013/05/05 * compatible with biblatex 2.5
% Maintained at <https://github.com/jmclawson/biblatex-mla> by James Clawson.
%
% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements in formatting and MLA standards compliance back to James Clawson: <clawson@gmail.com>.
%
% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
%
% File is in constant progress. Things are messy. Ignore platypi.

\ProvidesFile{mla.bbx}[2013/05/05 v1.5 biblatex bibliography style]

\RequireBibliographyStyle{standard}
\DeclareLanguageMapping{american}{american-mla}
\DeclareLanguageMapping{english}{english-mla}

\NewBibliographyString{byserieseditor}
\NewBibliographyString{reviewof}
\NewBibliographyString{specissue}
\NewBibliographyString{phd}
\NewBibliographyString{dphil}
\NewBibliographyString{lic}
\NewBibliographyString{ma}
\NewBibliographyString{ms}
\NewBibliographyString{msc}
\NewBibliographyString{mphil}
\NewBibliographyString{mlitt}
\NewBibliographyString{manuscript}
\NewBibliographyString{typescript}
\NewBibliographyString{director}
\NewBibliographyString{screenplay}
\NewBibliographyString{adaptation}
\NewBibliographyString{adaptor}
\NewBibliographyString{performer}
\NewBibliographyString{performers}
\NewBibliographyString{composer}
\NewBibliographyString{composedby}
\NewBibliographyString{producer}
\NewBibliographyString{with}
\NewBibliographyString{proceedings}
\NewBibliographyString{compilerandeditor}%
\NewBibliographyString{bycompilerandeditor}%
\NewBibliographyString{transof}%
\NewBibliographyString{volstodate}%
\NewBibliographyString{supptotitle}%
\NewBibliographyString{print}%
\NewBibliographyString{web}%
\NewBibliographyString{generaleditor}%

\setlength{\bibitemsep}{0pt}
\renewcommand*{\mkbibnameaffix}[1]{\addcomma\addlowpenspace#1}

\DeclareNameFormat{mla:last}{#1}%
\DeclareNameAlias{author}{sortname}
\DeclareNameFormat{default}{%
  \iffirstinits
    {\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
    {\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}}%
  \usebibmacro{name:andothers}}

% \renewenvironment*{thebibliography}
%   {\list
%      {}
%      {\setlength{\leftmargin}{\bibhang}%
%       \setlength{\itemindent}{-\leftmargin}%
%       \setlength{\itemsep}{\bibitemsep}%
%       \setlength{\parsep}{\bibparsep}}}
%   {\endlist}
\defbibenvironment{bibliography}
  {\list
     {}
     {\setlength{\leftmargin}{\bibhang}%
      \setlength{\itemindent}{-\leftmargin}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}}}
  {\endlist}
  {\item}

\DeclareFieldFormat{title:article}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:online}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:inreference}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:book}{\mkbibemph{#1}}
\DeclareFieldFormat{title:booklet}{\mkbibemph{#1}}
\DeclareFieldFormat{title:collection}{\mkbibemph{#1}}
\DeclareFieldFormat{title:incollection}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:inbook}{\mkbibquote{#1}}%platypus 1.0
\DeclareFieldFormat{title:inproceedings}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:thesis}{\mkbibquote{#1}}%
\DeclareFieldFormat{title:reviewedbook}{\bibstring{reviewof}\addspace\mkbibemph{#1}}%
\DeclareFieldFormat{title:reference}{\mkbibemph{#1}}%
\DeclareFieldFormat{url}{$<$\url{#1}$>$}% suggested by Jay Savage <http://www.engatiki.org/2007/11/28/171>
\DeclareFieldFormat{isbn}{}
\DeclareFieldFormat{pages}{#1}%
\DeclareFieldFormat[review]{volume}{#1}%
\DeclareListFormat[article]{location}%
  {\unspace\mkbibbrackets{#1}\addspace}%
\DeclareFieldFormat[article]{version}{#1\isdot}%
\DeclareFieldFormat[incollection]{bibliography:origyear}{\openrangeformat{#1}\addperiod}%
\DeclareFieldFormat[video]{mla:publimedium}{\MakeCapital{film}}% 1.4.9 platypus don't forget to localize
\DeclareFieldFormat{mla:publimedium}{\MakeCapital{#1}}%
\DeclareFieldFormat{mla:capital}{\MakeCapital{#1}}%
\DeclareFieldFormat{mla:capital:web}{%
  \ifhyperref%
    {\href{#1}{\MakeCapital{\bibstring{web}}}}%
    {\MakeCapital{\bibstring{web}}}}%
\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
\DeclareFieldFormat{nameaddon}{\mkbibbrackets{#1}}%
\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
\DeclareFieldFormat{mla:newspaper:section}{\bibstring{section}\addspace#1}%
\DeclareFieldFormat{library}{#1\isdot}%
\DeclareFieldFormat{reviewededitor}{\bibstring{byeditor}\addspace#1}%
\DeclareFieldFormat{reviewedauthor}{\bibstring{byauthor}\addspace#1}%
\DeclareFieldFormat{title:suppbook}{\mkbibquote{#1}}
\DeclareFieldFormat{openrangevolumes}{#1~\bibstring{volstodate}}%
\DeclareFieldFormat{volumeof}{\bibstring{volume}~#1~\bibstring{ofseries}}%
\DeclareFieldFormat{mla:sentence-case}{\MakeSentenceCase{#1}}%
\DeclareFieldFormat{eprint:jstor}{%
  \ifhyperref%
    {\href{http://www.jstor.org/stable/#1}{\emph{JSTOR}}}%
    {\emph{JSTOR}}}%
\DeclareFieldFormat{eprint:googlebooks}{%
  \ifhyperref%
    {\href{http://books.google.com/books?id=#1}{\emph{Google Books}}}%
    {\emph{Google Books}}}
\DeclareFieldFormat{eprint:adelaide}{%
  \ifhyperref%
    {\href{#1}{\emph{eBooks@Adelaide}}}%
    {\emph{eBooks@Adelaide}}}
\DeclareFieldFormat{eprint:muse}{%5
  \ifhyperref%
    {\href{#1}{\emph{Project Muse}}}%
    {\emph{Project Muse}}}
\DeclareFieldFormat{urldate}{#1}%

\DeclareBibliographyAlias{booklet}{book}
\DeclareBibliographyAlias{bookinbook}{incollection}% platypus 1.5
\DeclareBibliographyAlias{collection}{book}
\DeclareBibliographyAlias{reference}{book}

\DeclareBibliographyAlias{inbook}{incollection}% platypus 1.0

\DeclareBibliographyAlias{manual}{customa}
\DeclareBibliographyAlias{misc}{customa}
\DeclareBibliographyAlias{online}{article}
\DeclareBibliographyAlias{patent}{customa}
\DeclareBibliographyAlias{report}{customa}
\DeclareBibliographyAlias{suppcollection}{suppbook}

\DeclareFieldAlias[online]{maintitle}{journaltitle}

\renewcommand*{\newunitpunct}{\addperiod\space}
\renewcommand*{\andothersdelim}{\ifcitation{}{\addcomma}\addspace}
\renewcommand*{\bibpagespunct}{\addperiod\space}
\renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\space}

\newboolean{bbx@mla-incollection}
\newbool{bbx@inset}

\DeclareBibliographyOption{dashed}[true]{% platypus 1.0 (from authortitle.bbx)
  \ifstrequal{#1}{true}
    {\ExecuteBibliographyOptions{pagetracker}%
     \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
    {\ExecuteBibliographyOptions{pagetracker=false}%
     \renewbibmacro*{bbx:savehash}{}}}

\newboolean{bbx@annotation}% same as biblatex-dw
\DeclareBibliographyOption{annotation}[true]{%
\setboolean{bbx@annotation}{#1}}

\newboolean{bbx@totalnames}
\DeclareEntryOption{totalnames}[true]{%
  \setboolean{bbx@totalnames}{#1}}

% for translated incollections where the collection has no shared translator
\newboolean{bbx@uniquetranslator}%
\DeclareEntryOption{uniquetranslator}[true]{%
  \setboolean{bbx@uniquetranslator}{#1}}

\newbool{bbx:gnoreminfo}%
\setboolean{bbx:gnoreminfo}{false}
\DeclareBibliographyOption{noremoteinfo}[true]{\setboolean{bbx:gnoreminfo}{#1}}

\newbool{bbx:lnoreminfo}%
\setboolean{bbx:lnoreminfo}{false}
\DeclareEntryOption{noremoteinfo}[true]{\setboolean{bbx:lnoreminfo}{#1}}

\newbool{bbx@publimedium}%
\setboolean{bbx@publimedium}{true}%
\DeclareBibliographyOption{showmedium}[true]{\setboolean{bbx@publimedium}{#1}}%

\newbool{bbx@guessmedium}%
\setboolean{bbx@guessmedium}{true}
\DeclareBibliographyOption{guessmedium}[true]{\setboolean{bbx@guessmedium}{#1}}%

\newboolean{bbx@nodate}%
\DeclareEntryOption{nodate}[true]{%
  \setboolean{bbx@nodate}{#1}}


% 0.7.1 for years with open range
\newrobustcmd{\openrangeformat}[1]{% 0.7.1
  \begingroup%
    \let\blx@org@rangedash=\bibrangedash%
    \def\bibrangedash{%
      \blx@org@rangedash%
      \futurelet\@let@token\blx@openrangeformat}%
    #1%
  \endgroup}

% 0.7.1 for years with open range
\newcommand*{\blx@openrangeformat}{% 0.7.1
  \ifx\@let@token\endgroup%
  \openrangemark%
  \fi}

% 0.7.1 for years with open range
\newcommand*{\openrangemark}{\mbox{ }}% 0.7.1

% % 0.9 - new commands for open year ranges
% \newrobustcmd*{\mkbibrangefull}[2]{%
%   \printtext{%
%     \csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
%     \iffieldundef{#2endyear}
%       {}
%       {\iffieldequalstr{#2endyear}{}
%          {\mbox{\bibdatedash}}
% 	 {\bibdatedash
% 	  \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}}

\newbibmacro*{bbx:savehash}{%
  \savefield{fullhash}{\bbx@lasthash}}

\renewcommand*{\bibnamedash}{% suggested by StackExchange user Audrey
  \mlanamedash%
  \iffieldundef{nameaddon}{\adddot}{\nopunct}}%

\newcommand*{\mlanamedash}{\textendash\textendash\textendash}

\renewbibmacro*{author}{%
  \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
    {\usebibmacro{bbx:dashcheck}% platypus 1.0 from authortitle.bbx
       {\bibnamedash}%
       {\ifbool{bbx@totalnames}%
         {\printnames[sortname][-\value{listtotal}]{author}}
         {\printnames{author}}%
       \usebibmacro{bbx:savehash}}%
     \iffieldundef{nameaddon}%
       {}%
       {\setunit{\addspace}%
        \printfield{nameaddon}}%
     \iffieldundef{authortype}%
       {}%
       {\setunit{\addcomma\space}%
        \usebibmacro{authorstrg}}}%
    {\global\undef\bbx@lasthash}}

\renewbibmacro*{editor}{%
  \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
    {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
                 \iffirstonpage}%
      {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
      {\ifbool{bbx@totalnames}%
        {\printnames[sortname][-\value{listtotal}]{editor}}%
        {\printnames{editor}}%
       \setunit{\addcomma\space}%
       \savefield{namehash}{\bbx@lasthash}}%
     \usebibmacro{editorstrg}\clearname{editor}}%
    {\global\undef\bbx@lasthash}}

\renewbibmacro*{editor+others}{%
  \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
    {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
                 \iffirstonpage}%
      {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
      {\ifbool{bbx@totalnames}%
        {\printnames[sortname][-\value{listtotal}]{editor}}%
        {\printnames[sortname]{editor}}%
       \setunit{\addcomma\space}%
       \savefield{namehash}{\bbx@lasthash}}%
     \usebibmacro{editor+othersstrg}\clearname{editor}}%
    {\global\undef\bbx@lasthash}}

\renewbibmacro*{translator}{%
  \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
    {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
               \iffirstonpage}%
      {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
      {\ifbool{bbx@totalnames}%
        {\printnames[sortname][-\value{listtotal}]{translator}}%
        {\printnames[sortname]{translator}}%
       \setunit{\addcomma\space}%
       \savefield{namehash}{\bbx@lasthash}}%
     \usebibmacro{translatorstrg}\clearname{translator}}%
    {\global\undef\bbx@lasthash}}

\renewbibmacro*{translator+others}{%
  \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
    {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
               \iffirstonpage}%
      {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
      {\ifbool{bbx@totalnames}%
        {\printnames[sortname][-\value{listtotal}]{translator}}%
        {\printnames[sortname]{translator}}%
       \setunit{\addcomma\space}%
       \savefield{namehash}{\bbx@lasthash}}%
     \usebibmacro{translator+othersstrg}\clearname{translator}}%
    {\global\undef\bbx@lasthash}}

\newbibmacro*{journal+issue+year+pages}{%
  \usebibmacro{journal+ser+vol+num}%
  \setunit{\addspace}%
  \printtext[parens]{%
    \iffieldundef{issue}%
      {\iffieldundef{month}%
         {\printfield{year}}%
         {\iffieldundef{day}%
            {\printfield{month}%
             \setunit{\addspace}%
             \printfield{year}}%
            {\printtext{\bibdate}}}}%
      {\printfield{issue}%
       \setunit{\addspace}%
       \printfield{year}}}%
  \addcolon\addspace
  \printfield{pages}}

\renewbibmacro*{date}{\printdate}%

\renewbibmacro*{url+urldate}{%
  \ifthenelse{\boolean{bbx@publimedium}\AND\NOT \(\iffieldundef{url} \AND \iffieldundef{eprint}\)}% 0.9 platypus - check the logic here! should it be and or or between url and eprint?
    {\printfield[mla:capital:web]{url}\newunit}%
    {\iffieldundef{urlyear}{}{\setunit{\addspace}}}%
  \iffieldundef{urlyear}%
    {}%
    {\printtext{\printurldate}%
     \setunit{\addspace}}% Suggested by Stephen Brumbaugh
  \ifthenelse{\boolean{bbx@publimedium}\AND\NOT\iffieldundef{url}}%
    {\ifthenelse{\boolean{bbx:gnoreminfo}}%
	  {}%
	  {\setunit{\newunitpunct}%
	   \printfield{url}}}%
    {\printfield{url}}%
  }

\DeclareBibliographyDriver{periodical}{%
  \usebibmacro{bibindex}%
  \usebibmacro{editor}%
  \setunit{\labelnamepunct}\newblock%
  \usebibmacro{mla:article:journal+issuetitle}%
  \newunit\newblock
  \printfield{note}%
  \setunit{\addcolon\addspace}\newblock
  \printfield{pages}%
  \newunit\newblock
  \usebibmacro{mla:isbn/issn+doi+eprint}%
  \newunit\newblock
  \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{article}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{title}%
  \newunit%
  \usebibmacro{bytranslator+others}%
  \newunit%
  \usebibmacro{mla:article:journal+issuetitle}%
  \newunit\newblock
  \printfield{note}%
  \setunit{\addcolon\addspace}\newblock
  \printfield{pages}%
  \newunit\newblock
  \usebibmacro{mla:isbn/issn+doi+eprint}%
  \newunit\newblock
  \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{maintitle+title}%
  \newunit\newblock%
  \usebibmacro{byeditor+others}%
  \newunit\newblock%
  \printfield{edition}\isdot%
  \newunit%
  \iffieldundef{maintitle}%
    {\printfield{volume}%
     \printfield{part}}%
    {}%
  \newunit%
  \iffieldundef{volume}%
    {\printfield{volumes}\clearfield{volumes}}%
    {}%%
  \newunit\newblock%
  \ifbool{bbx@publimedium}%
    {}%
    {\usebibmacro{series+number}}%
  \newunit\newblock%
  \printfield{note}%
  \newunit\newblock%
  \usebibmacro{publisher+location+date}%
  \newunit\newblock%
  \printfield{pages}%
  \newunit\newblock%
  \usebibmacro{mla:isbn/issn+doi+eprint}%
  \newunit\newblock%
  \iffieldundef{origtitle}%
    {}%
    {\ifbool{bbx@publimedium}%
      {}
      {\usebibmacro{mla:reprint}}}%
  \newunit\newblock%
  \iffieldundef{volumes}%
    {}%
    {\usebibmacro{mla:multivolumes}}%
  \newunit\newblock%
  \printfield[mla:sentence-case]{addendum}%
  \newunit\newblock%
  \usebibmacro{pageref}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\newbibmacro*{mla:reprint}{%
  \iffieldundef{origtitle}%
    {\newunit}%
    {\iffieldundef{origlanguage}
      {\setunit{\newunitpunct\bibstring{reprintof}\addspace}}%
      {\setunit{\newunitpunct\bibstring{transof}\addspace}}%
}%
  \printfield[title:\strfield{entrytype}]{origtitle}%
  \newunit\newblock%
  \printlist{origlocation}\clearlist{origlocation}%
  \setunit*{\addcolon\addspace}%
  \printlist{origpublisher}\clearlist{origpublisher}%
  \setunit*{\addcomma\addspace}%
  \ifbool{bbx@mla-incollection}%
    {\printfield[bibliography:origyear]{origyear}\clearfield{origyear}}%
    {\ifthenelse{\iffieldundef{volume}\OR\iffieldundef{volumes}}% 1.4.9 cleared up most spurious punct
      {\printorigdate\clearfield{origyear}}%
      {}%
	}%
}

\newbibmacro*{mla:multivolumes}{%
  \iffieldundef{maintitle}%
    {}%
    {\printfield[volumeof]{volume}%
     \setunit{\addspace}%
     \usebibmacro{maintitle}}%
  \usebibmacro{mla:generaleditor}%
  \iffieldequalstr{eventendyear}{}%
    {\printfield[openrangevolumes]{volumes}\clearfield{volumes}}%
    {\printfield{volumes}\clearfield{volumes}}%
  \newunit\newblock%
  \printeventdate\clearfield{eventyear}%
}


\renewbibmacro*{byeditorx}{%
  \usebibmacro{byeditorx:internal}{a}%
  \usebibmacro{byeditorx:internal}{b}%
  \usebibmacro{byeditorx:internal}{c}%
}

\newbibmacro*{byeditorx:internal}[1]{%
  \ifnameundef{editor#1}
    {}
    {\iffieldequalstr{editor#1type}{generaleditor}
      {}
      {\usebibmacro{bytypestrg}{editor#1}{editor}%
       \setunit{\addspace}%
       \printnames[byeditor#1]{editor#1}%
       \newunit}}%
}

\newbibmacro*{mla:generaleditor}{%
  \usebibmacro{mla:generaleditor:internal}{}%
  \usebibmacro{mla:generaleditor:internal}{a}%
  \usebibmacro{mla:generaleditor:internal}{b}%
  \usebibmacro{mla:generaleditor:internal}{c}%
}

\newbibmacro*{mla:generaleditor:internal}[1]{% 
  \iffieldequalstr{editor#1type}{generaleditor}%
    {\printnames{editor#1}%
      \setunit{\addcomma\addspace}%
      \bibstring{generaleditor}%
      \newunit}%
    {}%
}

\newbibmacro*{mla:isbn/issn+doi+eprint}{% 0.7.1 modeled after biblatex-apa, here just a proof of concept and work in progress, ignoring any of the URL hiding implemented by Philip Kime
  \ifthenelse{\boolean{bbx:gnoreminfo}\OR\boolean{bbx:lnoreminfo}}%
    {\global\boolfalse{bbx:lnoreminfo}}%
    {\printfield{isbn}\clearfield{isbn}%
     \newunit\newblock%
     \printfield{issn}\clearfield{issn}%
     \newunit\newblock%
     \printfield{isrn}\clearfield{isrn}%
     \newunit\newblock%
     \printfield{doi}\clearfield{doi}%
     \newunit\newblock%
     \usebibmacro{eprint}%
    }}

\DeclareBibliographyDriver{suppbook}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{maintitle+title}%
  \newunit\newblock
  \printfield[mla:capital]{entrysubtype}%
  \newunit\newblock
  \iffieldundef{crossref}%
    {\iffieldundef{xref}%
      {\usebibmacro{mla:incollection:internal}}%
      {\bbx@crossref{\thefield{xref}}%
      \setunit{\addspace}%
      \printfield{pages}}}%
    {\bbx@crossref{\thefield{crossref}}%
    \setunit{\addspace}%
    \printfield{pages}%
    \newunit}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareCiteCommand{\bbx@crossref}%
  {}
  {\ifsingletitle%
    {\printtext[bibhyperref]{\printnames{labelname}}%
     \setunit{\space}}%
    {\printnames{labelname}%
     \setunit{\addcomma\addspace}%
     \printtext[bibhyperref]{\printfield[citetitle:book]{labeltitle}}
     \setunit{\space}}}%
  {}%
  {}

\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \ifthenelse{%
    \iffieldequalstr{entrysubtype}{book}%
    \OR%
    \iffieldequalstr{entrysubtype}{play}%
	\OR%
	\iffieldequalstr{entrytype}{bookinbook}}% 1.5 platypus 
      {\usebibmacro{title:incollection:italics}}%
      {\setboolean{bbx@mla-incollection}{true}%
       \usebibmacro{title}%
       \setboolean{bbx@mla-incollection}{false}}%
  \newunit\newblock%
  \ifbool{bbx@uniquetranslator}%
    {\usebibmacro{bytranslator+others}\newunit}%
    {}%
  \newunit\newblock%
  \iffieldundef{crossref}%
    {\iffieldundef{xref}%
      {\usebibmacro{mla:incollection:internal}}%
      {\bbx@crossref{\thefield{xref}}%
      \setunit{\addspace}%
      \printfield{pages}}}%
    {\bbx@crossref{\thefield{crossref}}%
    \setunit{\addspace}%
    \printfield{pages}%
    \newunit}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\newbibmacro*{mla:incollection:internal}{%
  \setboolean{bbx@mla-incollection}{true}%
  \usebibmacro{maintitle+booktitle}%
  \ifthenelse{%
      \iffieldequalstr{entrytype}{suppbook}%
      \OR%
      \iffieldequalstr{entrytype}{suppcollection}}%
    {\setunit{\newunitpunct\bibstring{byauthor}\addspace}%
     \ifnamesequal{labelname}{bookauthor}%
       {\printnames[mla:last]{bookauthor}}%
       {\printnames[byauthor]{bookauthor}}}%
    {}%
  \newunit\newblock%
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{edition}\isdot%
  \newunit
  \iffieldundef{maintitle}%
    {\printfield{volume}\printfield{part}}%
    {}%
  \newunit
  \iffieldundef{volume}%
    {\printfield{volumes}\clearfield{volumes}}%
    {}%%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \usebibmacro{mla:isbn/issn+doi+eprint}%
  \newunit\newblock
  \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
  \newunit\newblock
  \iffieldundef{volumes}%
    {}%
    {\usebibmacro{mla:multivolumes}}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \setboolean{bbx@mla-incollection}{false}}

\DeclareBibliographyDriver{inproceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{title}%
  \newunit\newblock
  \usebibmacro{mla:proceedings:booktitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{proceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{mla:proceedings:booktitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{unpublished}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{title}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{mla:all:type}%
  \newunit\newblock
  \printfield{number}%
  \newunit\newblock
  \printfield{library}%
  \setunit{\addcomma\addspace}%
  \printlist{location}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{thesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{title}%
  \newunit\newblock%
  \usebibmacro{mla:thesis:type}%
  \newunit\newblock
  \printlist{institution}%
  \setunit*{\addcomma\space}%
  \iffieldequalstr{entrysubtype}{published}%
    {\printfield{origyear}\clearfield{origyear}}% 1.4.9 cleared origyear
    {\printfield{year}}%
  \newunit\newblock
  \iffieldequalstr{entrysubtype}{published}%
    {\ifbool{bbx@publimedium}%
        {}%
        {\usebibmacro{series+number}}%
      \newunit%
      \printlist{location}%
      \setunit{\addcolon\addspace}%
      \printlist{publisher}%
      \setunit{\addcomma\addspace}%
      \printfield{year}}%
    {}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{review}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author}%
  \usebibmacro{mlabelnamepunct}%
  \printfield[title:article]{title}%
  \newunit\newblock%
  \printfield[title:reviewedbook]{booktitle}%
  \setunit{\addcomma\space}%
  \ifnameundef{bookauthor}%
    {\printtext[reviewededitor]{\printnames[default]{editor}}}%
    {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
  \newunit\newblock
  \usebibmacro{journal}%
  \setunit*{\addspace}%
  \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
    {\printfield[brackets]{location}%
     \printtext{\printdate}%
     \newunit}%
    {\printfield{series}%
     \setunit{\addspace}%
     \printfield[default]{volume}%
     \setunit*{\adddot}%
     \printfield{number}\clearfield{number}%
     \setunit{\addcomma\space}%
     \printfield{eid}%
     \setunit{\addspace}%
     \usebibmacro{issue+date}%
     \newunit\newblock%
     \usebibmacro{issue}%
     \newunit}%
  \setunit{\addcolon\addspace}%
  \printfield{pages}%
  \newunit\newblock%
  \usebibmacro{publimedium}% 1.4.9 updated
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{inreference}{%
  \usebibmacro{bibindex}%
  \usebibmacro{author}%
  \usebibmacro{mlabelnamepunct}%
  \usebibmacro{title}%
  \newunit\newblock%
  \iffieldundef{crossref}%
    {\iffieldundef{xref}%
      {\newunit\newblock
      \usebibmacro{maintitle+booktitle}%
      \newunit\newblock
      \usebibmacro{byeditor+others}%
      \newunit\newblock
      \iffieldsequal{year}{edition}%
        {\printfield{year}~\bibstring{edition}\clearfield{year}}%
        {\printfield{edition}\isdot}%
      \newunit
      \iffieldundef{maintitle}%
        {\printfield{volume}%
         \printfield{part}}%
        {}%
      \newunit
      \printfield{volumes}%
      \newunit\newblock
      \usebibmacro{series+number}%
      \newunit\newblock
      \printfield{note}%
      \newunit\newblock
      \usebibmacro{publisher+location+date}%
      \newunit\newblock
      \usebibmacro{chapter+pages}%
      \newunit\newblock
      \usebibmacro{mla:isbn/issn+doi+eprint}%
      \newunit\newblock
      \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
      \newunit\newblock
      \printfield{addendum}%
      \newunit\newblock
      \usebibmacro{pageref}}%
      {}}%
    {\bbx@crossref{\thefield{crossref}}%
     \nopunct\unspace\printfield{pages}}%
  \newunit%
  \usebibmacro{publimedium}%
  \usebibmacro{finentry}}

\newbibmacro{mlabelnamepunct}{\setunit{\labelnamepunct}\newblock}

\newbibmacro{mla:video:localized:last-first}[1]{%
  \ifnameundef{#1}%
    {}%
    {\printnames{#1}\addcomma\addspace%
    \ifthenelse{\iffieldbibstring{#1type} \and \not %
    \iffieldundef{#1type}}%
      {\bibstring{\thefield{#1type}}}%
      {\iffieldundef{#1type}%
        {\bibstring{with}}%
        {\printfield[mla:lowercase]{#1type}}}}%
\iffootnote{\setunit{\addcomma\addspace}}{\newunit}}%

\newbibmacro{mla:video:name:first:footnote}[1]{%
  \ifnameundef{#1}%
    {}%
    {\printnames[byeditor]{#1}\addcomma\addspace%
    \ifthenelse{\iffieldbibstring{#1type} \and \not %
    \iffieldundef{#1type}}%
      {\bibstring{\thefield{#1type}}}%
      {\iffieldundef{#1type}%
        {\bibstring{with}}%
        {\printfield[mla:lowercase]{#1type}}}}%
  \clearname{#1}%
}

\newbibmacro{mla:video:localized:first-last}[1]{%
  \ifnameundef{#1}%
    {}%
    {\ifthenelse{\iffieldbibstring{#1type} \and \not %
    \iffieldundef{#1type} \and \not %
    \iffieldequalstr{#1type}{composer}}%
      {\bibstring{\thefield{#1type}}}%
      {\iffieldundef{#1type}%
        {\bibstring{with}}%
        {\iffieldequalstr{#1type}{composer}%
          {\bibstring{composedby}}%
          {\printfield[mla:capital]{#1type}}}}%
    \addspace\printnames[byeditor][-\value{listtotal}]{#1}}%
\newunit}%

\newbibmacro{mla:video:name:second:footnote}[1]{%
  \ifnameundef{#1}%
    {}%
    {\ifthenelse{\iffieldbibstring{#1type} \and \not %
     \iffieldundef{#1type} \and \not %
     \iffieldequalstr{#1type}{composer}}%
       {\bibstring{\thefield{#1type}}}%
       {\iffieldundef{#1type}%
         {\bibstring{with}}%
         {\iffieldequalstr{#1type}{composer}%
           {\bibstring{composedby}}%
           {\printfield[mla:lowercase]{#1type}}}}%
     \addspace\printnames[byeditor][-\value{listtotal}]{#1}%
    }}%

\DeclareBibliographyDriver{video}{%
  \ifnamesequal{labelname}{author}%
    {\usebibmacro{mla:video:localized:last-first}{author}}{}%
  \ifnamesequal{labelname}{editor}%
    {\usebibmacro{mla:video:localized:last-first}{editor}}{}%
  \printfield{title}%
  \setunit{\newunitpunct\bibstring{byauthor}\addspace}%
  \printnames[byeditor]{bookauthor}%
  \newunit%
  \ifthenelse{\NOT\ifnamesequal{author}{labelname}%
  \AND\NOT\ifnameundef{author}}%
    {\usebibmacro{mla:video:localized:first-last}{author}}%
    {}%
  \ifthenelse{\NOT\ifnamesequal{editor}{labelname}%
  \AND\NOT\ifnameundef{editor}}%
    {\usebibmacro{mla:video:localized:first-last}{editor}}%
    {}%
  \usebibmacro{mla:video:localized:first-last}{namea}%
  \usebibmacro{mla:video:localized:first-last}{nameb}%
  \usebibmacro{mla:video:localized:first-last}{namec}%
  \printfield{origyear}\clearfield{origyear}%
  \newunit\newblock%
  \printlist{publisher}%
  \setunit{\addcomma\addspace}%
  \printfield{year}%
  \newunit\newblock%
  \usebibmacro{publimedium}% 1.4.9 updated to most recent MLA format
  \usebibmacro{finentry}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% drivers to add eventually:
% * \DeclareBibliographyDriver{misc}
% * \DeclareBibliographyDriver{artwork}
% * \DeclareBibliographyDriver{audio}
% * \DeclareBibliographyDriver{image}
% * \DeclareBibliographyDriver{movie}
% * \DeclareBibliographyDriver{music}
% * \DeclareBibliographyDriver{performance}
% 
% Specifically important mainstay types to add for MLA users
% 0 support for multiple publishers? % can't do with bibtex
% * editorial
% * letter (to the editor, etc.)
% * interview

\newbibmacro*{mtitle+mstitle+vol+part+title+stitle}{%
  \iffieldundef{maintitle}%
    {}%
    {\printtext[maintitle]{%
       \printfield[noformat]{maintitle}%
       \newunit
       \printfield[noformat]{mainsubtitle}}%
     \newunit
     \printfield{maintitleaddon}%
     \newunit\newblock
     \iffieldundef{volume}%
       {}%
       {\printfield{volume}%
        \printfield{part}%
        \setunit{\addcolon\space}}}%
  \usebibmacro{title+stitle}}

\renewbibmacro*{series+number}{%
  \iffieldundef{series}%
    {}%
    {\printfield{series}\setunit*{\addspace}\printfield{number}}%
}

\renewbibmacro*{title}{%
  \iffieldequalstr{entrytype}{thesis}%
    {\usebibmacro{mla:title:thesis}}%
    {\iffieldequalstr{entrytype}{unpublished}%
      {\usebibmacro{mla:title:unpublished}}%
      {\usebibmacro{title+stitle}}}}%

\renewbibmacro*{publisher+location+date}{%
  \printlist{location}%
  \iflistundef{publisher}%
    {\setunit*{\addcomma\space}}%
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \ifbool{bbx@nodate}{\printtext{n.d.}}% platypus-don't forget to localize this string!
  \printdate%
  \newunit}

\newbibmacro*{mla:title:unpublished}{%
  \ifthenelse{\iffieldundef{author} \AND \iffieldundef{nameaddon}}%
    {\unspace}%
    {}%
  \iffieldundef{title}%
    {}%
    {\printtext[title:article]{%
      \printfield[noformat]{title}%
      \setunit{\subtitlepunct}%
      \printfield[noformat]{subtitle}}}%
  \newunit
  \printtext[title:book]{%
    \printfield[noformat]{booktitle}%
    \setunit{\subtitlepunct}%
    \printfield[noformat]{booksubtitle}}%
  \newunit
  \ifcitation%
    {\printfield[mla:lowercase]{titleaddon}}%
    {\printfield{titleaddon}}%
  \setunit{\addcomma\addspace}}

\newbibmacro*{name:first-last:andothers}{%
  \ifthenelse{\value{listcount}=\value{liststop}\AND
              \ifmorenames}
    {\ifnum\value{liststop}>1 \finalandcomma\fi
     \addspace\bibstring{andothers}}
    {}}

\newbibmacro*{mla:title:thesis}{%
  \iffieldundef{title}%
    {}%
    {\iffieldequalstr{entrysubtype}{published}%
      {\printtext[title:book]{%
        \printfield[noformat]{title}%
        \setunit{\subtitlepunct}%
        \printfield[noformat]{subtitle}}}%
      {\printtext[title:\strfield{entrytype}]{%
        \printfield[noformat]{title}%
         \setunit{\subtitlepunct}%
         \printfield[noformat]{subtitle}}}%
     \newunit%
     \printfield{titleaddon}%
     \newunit\newblock}}

\newbibmacro*{mla:thesis:type}{%
  \iffieldundef{type}%
    {\printtext[mla:capital]{\bibstring{phdthesis}}}%
    {\usebibmacro{mla:all:type}}}%

\newbibmacro*{mla:all:type}{%
  \ifbibstring{\thefield{type}}%
    {\printtext[mla:capital]{\bibstring{\thefield{type}}}}%
    {\printtext[mla:capital]{\printfield{type}}}}%

\newbibmacro*{mla:all:type:foot}{%
  \ifbibstring{\thefield{type}}%
    {\printtext[noformat]{\bibstring{\thefield{type}}}}%
    {\printtext[noformat]{\printfield{type}}}}%

\renewbibmacro*{maintitle+title}{%
  \usebibmacro{title}%
  \newunit%
  \iffieldsequal{maintitle}{title}%
    {\clearfield{maintitle}%
     \clearfield{mainsubtitle}%
     \clearfield{maintitleaddon}}%
    {}%
  \iffieldundef{volume}%
    {\usebibmacro{maintitle}}%
    {}%
  \iffieldundef{maintitle}%
    {\printfield{volume}\clearfield{volume}}%
    {}%
  \newunit\newblock}

\renewbibmacro*{maintitle+booktitle}{%
  \usebibmacro{booktitle}%
  \newunit
  \iffieldundef{maintitle}%
    {}%
    {\usebibmacro{maintitle}%
     \newunit\newblock
     \iffieldundef{volume}%
       {}%
       {\printfield{volume}%
        \printfield{part}%
        \setunit{\addcolon\space}}}%
  \newunit}

\newbibmacro*{mla:proceedings:booktitle}{%
  \usebibmacro{booktitle}%
  \newunit%
  \iffieldundef{eventtitle}%
    {}%
    {\printtext[default]{%
      \bibstring{proceedings}\addspace\bibstring{ofseries}\addspace%
      \printfield[default]{eventtitle}\isdot}}%
  \setunit*{\isdot\addcomma\addspace}%
  \printlist{organization}%
  \setunit*{\addcomma\addspace}%
  \printeventdate%
  \setunit*{\addcomma\addspace}%
  \printlist{institution}%
  \setunit*{\addcomma\addspace}%
  \printfield{venue}}

\newbibmacro*{title+stitle}{%
  \iffieldundef{title}%
  {\ifthenelse{%
    \iffieldequalstr{entrytype}{suppbook}%
    \OR%
    \iffieldequalstr{entrytype}{suppcollection}}%
      {}%
      {\printtext[title:\strfield{entrytype}]{%
         \printfield[noformat]{booktitle}%
         \setunit*{\subtitlepunct}%
         \printfield[noformat]{booksubtitle}}}}%
  {\printtext[title:\strfield{entrytype}]{%
       \printfield[noformat]{title}%
       \setunit*{\subtitlepunct}%
       \printfield[noformat]{subtitle}}}%
  \newunit%
  \printfield[noformat]{titleaddon}%
  \newunit%
  \usebibmacro{byauthor}%
  \iffieldundef{origtitle}%
    {\usebibmacro{mla:reprint}}%
    {}%
}%

\newbibmacro*{title:incollection:italics}{%
  \iffieldundef{title}%
    {}%
    {\printtext[title:book]{%
       \printfield[noformat]{title}%
       \setunit*{\subtitlepunct}%
       \printfield[noformat]{subtitle}}%
     \newunit%
     \printfield[noformat]{titleaddon}%
     \newunit%
     \setboolean{bbx@mla-incollection}{true}\usebibmacro{mla:reprint}\setboolean{bbx@mla-incollection}{false}%
     \newunit\newblock}}

\newbibmacro*{mla:article:journal+issuetitle}{%
  \usebibmacro{issue}%
  \newunit\newblock%
  \iffieldundef{issuetitle}%
    {}%
    {\usebibmacro{byeditor+others}%
      \newunit\newblock%
      \bibstring{specissue}\setunit*{\addspace}}%
  \ifthenelse{\iffieldequalstr{entrytype}{periodical} \AND \iffieldundef{journaltitle}}%
    {\usebibmacro{periodical}}%
    {\usebibmacro{journal}}%
  \ifthenelse{\iffieldequalstr{entrytype}{online}}{\usebibmacro{mla:online}}{\setunit*{\addspace}}%
  \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine} \or \iffieldequalstr{entrytype}{online}}%
    {\printlist[brackets]{location}%
     \printtext{\printdate}%
     \setunit*{\addcomma\addspace}%
     \printfield{version}%
     \setunit*{\addcomma\addspace}%
     \printfield[mla:newspaper:section]{chapter}%
    }%
    {\printfield{series}%
     \setunit*{\addspace}%
     \printfield{volume}%
     \setunit*{\adddot}%
     \printfield{number}\clearfield{number}%
     \setunit*{\addcomma\space}%
     \usebibmacro{mla:isbn/issn+doi+eprint}%
     \setunit{\addspace}% platypus-1.0b removed asterisk
     \usebibmacro{issue+date}%
     \newunit\newblock
     \newunit}%
}

\newbibmacro*{mla:online}{%
  \iffieldundef{maintitle}%
    {}%
    {\printtext[maintitle]{%
       \printfield[titlecase]{maintitle}%
       \setunit{\subtitlepunct}%
       \printfield[titlecase]{mainsubtitle}}}%
  \newunit\newblock%
  \printlist{publisher}%
  \setunit*{\addcomma\addspace}%
}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addspace}%
  \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
    {\printlist[brackets]{location}%
     \printtext{\printdate}%
     \setunit{\addcomma\addspace}%
     \printfield{version}%
     \setunit{\addcomma\addspace}%
     \printfield[mla:newspaper:section]{chapter}%
    }%
    {\printfield{series}%
     \setunit{\addspace}%
     \printfield{volume}%
     \setunit*{\adddot}%
     \printfield{number}\clearfield{number}%
     \setunit{\addcomma\space}%
     \usebibmacro{mla:isbn/issn+doi+eprint}%
     \setunit{\addspace}%
     \usebibmacro{issue+date}%
     \newunit\newblock
     \usebibmacro{issue}%
     \newunit}}

\renewbibmacro{finentry}{%
  \finentry%
  \iffieldundef{annotation}%
    {}%
    {\ifbool{bbx@annotation}%
      {\begin{quotation}\noindent%
       \printfield{annotation}%
       \end{quotation}}%
      {}}%
}

\newbibmacro{publimedium}{%
  \ifbool{bbx@publimedium}%
    {\printfield[mla:capital]{howpublished}%
      \ifthenelse{\iffieldundef{howpublished}\AND\boolean{bbx@guessmedium}}%
        {\ifthenelse{\iffieldundef{url}\AND\iffieldundef{eprinttype}}%
          {\printtext[mla:publimedium]{\bibstring{print}}}%
          {\iffieldundef{eprinttype}%
            {\printfield{eprint}}%
            {\printfield[eprint:\strfield{eprinttype}]{eprint}}%
          \newunit%
          \usebibmacro{url+urldate}%
          }%
        }%
        {}%-keep-blank
      \newunit%
      \usebibmacro{series+number}}%
      \newunit%
      \usebibmacro{mla:reprint}%
    {}%-keep-blank
}

\newbibmacro*{bbx:dashcheck}[2]{%
  \ifboolexpr{
    test {\iffieldequals{fullhash}{\bbx@lasthash}}
    and
    not test \iffirstonpage
    and
    (
       not bool {bbx@inset}
       or
       test {\iffieldequalstr{entrysetcount}{1}}
    )
  }
    {#1}
    {#2}}

\endinput


\endinput