From ed4b7e6d104db218c36f82e81edbcf3260befdbf Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 3 Jun 2010 00:03:21 +0000 Subject: csquotes 5.0 (2jun10) git-svn-id: svn://tug.org/texlive/trunk@18701 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/csquotes/csq-compat.def | 106 +++ Master/texmf-dist/tex/latex/csquotes/csquotes.cfg | 10 +- Master/texmf-dist/tex/latex/csquotes/csquotes.def | 58 +- Master/texmf-dist/tex/latex/csquotes/csquotes.sty | 876 +++++++++++---------- 4 files changed, 618 insertions(+), 432 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/csquotes/csq-compat.def (limited to 'Master/texmf-dist/tex/latex/csquotes') diff --git a/Master/texmf-dist/tex/latex/csquotes/csq-compat.def b/Master/texmf-dist/tex/latex/csquotes/csq-compat.def new file mode 100644 index 00000000000..0a8f667b209 --- /dev/null +++ b/Master/texmf-dist/tex/latex/csquotes/csq-compat.def @@ -0,0 +1,106 @@ +% $Id: csq-compat.def,v 5.0 2010/06/02 19:13:37 lehman stable $ + +\ProvidesFile{csquotes.def} +[\csq@rcsid $Id: csq-compat.def,v 5.0 2010/06/02 19:13:37 lehman stable $ + csquotes backwards compatibility] + +\def\csq@getversion#1{% + \expandafter\csq@getversion@i + \expandafter{\csq@vertonum#1\relax}} + +\def\csq@getversion@i#1{% + \ifcsdef{csq@version@#1} + {\csq@info{Enabling v\csq@numtover#1\relax\space mode}% + \csuse{csq@version@#1}} + {\ifnumless{#1+1}\csq@version + {\expandafter\csq@getversion@i + \expandafter{\the\numexpr#1+1}} + {\expandafter\csq@getversion@i + \expandafter{\csq@version}}}} + +\def\csq@vertonum#1.#2\relax{#1#2} +\def\csq@numtover#1#2\relax{#1.#2} + +\csdef{csq@version@\csq@version}{% + \DeclareAutoPunct{.,;:!?}% + \renewcommand{\mktextquote}[6]{##1##2##4##3##6##5}% + \renewcommand{\mkblockquote}[4]{##1##2##4##3}% + \renewcommand{\mkbegdispquote}[2]{}% + \renewcommand{\mkenddispquote}[2]{##2##1}% + \renewcommand{\mkcitation}[1]{\space(##1)}% + \ifdef\csq@leg@DeclarePlainStyle + {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle + \undef\csq@leg@DeclarePlainStyle} + {}} + +\csdef{csq@version@44}{% + \DeclareAutoPunct{}% + \providecommand*{\ifstringblank}{\ifblank}% + \providecommand*{\ifquotepunct}{\ifpunct}% + \providecommand*{\ifquoteterm}{\ifterm}% + \providecommand*{\ifquotecomma}{\ifpunctmark{,}}% + \providecommand*{\ifquotesemicolon}{\ifpunctmark{;}}% + \providecommand*{\ifquotecolon}{\ifpunctmark{:}}% + \providecommand*{\ifquoteperiod}{\ifpunctmark{.}}% + \providecommand*{\ifquoteexclam}{\ifpunctmark{!}}% + \providecommand*{\ifquotequestion}{\ifpunctmark{?}}% + \providecommand*{\setblockthreshold}{\SetBlockThreshold}% + \providecommand*{\setblockenvironment}{\SetBlockEnvironment}% + \providecommand*{\RestoreQuotes}{\EnableQuotes}% + \providecommand*{\@restorequotes}{\@enablequotes}% + \providecommand*{\cquote}{\textcquote}% + \providecommand*{\foreigncquote}{\foreigntextcquote}% + \providecommand*{\hyphencquote}{\hyphentextcquote}% + \providecommand*{\mkpretextpunct}[1]{}% + \providecommand*{\mkmidtextpunct}[1]{}% + \providecommand*{\mkfintextpunct}[1]{##1}% + \providecommand*{\mkpreblockpunct}[1]{}% + \providecommand*{\mkmidblockpunct}[1]{}% + \providecommand*{\mkfinblockpunct}[1]{##1}% + \providecommand*{\mkpredisppunct}[1]{}% + \providecommand*{\mkmiddisppunct}[1]{}% + \providecommand*{\mkfindisppunct}[1]{##1}% + \providecommand*{\quotetext}{}% + \let\endquotetext\@empty + \providecommand*{\quoteblock}{}% + \let\endquoteblock\@empty + \renewcommand{\mktextquote}[6]{% + ##1\quotetext##2\endquotetext\mkpretextpunct{##4}% + ##3\mkmidtextpunct{##4}##6\mkfintextpunct{##4}##5} + \renewcommand{\mkblockquote}[4]{% + \quoteblock##1\endquoteblock\mkpreblockpunct{##2}% + \mkmidblockpunct{##2}##4\mkfinblockpunct{##2}##3} + \renewcommand{\mkbegdispquote}[2]{\quoteblock} + \renewcommand{\mkenddispquote}[2]{% + \endquoteblock\mkpredisppunct{##1}% + \mkmiddisppunct{##1}##2\mkfindisppunct{##1}}% + \renewcommand{\mkcitation}[1]{\space(##1)}% + \ifdef\csq@leg@DeclarePlainStyle + {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle + \undef\csq@leg@DeclarePlainStyle} + {}} + +\csdef{csq@version@36}{% + \csuse{csq@version@44}% + \providecommand{\blockcite}[1]{\space(##1)}% + \renewcommand*{\mkcitation}{\blockcite}% + \ifdef\csq@leg@DeclarePlainStyle + {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle + \undef\csq@leg@DeclarePlainStyle} + {}} + +\csdef{csq@version@30}{% + \csuse{csq@version@36}% + \ifdef\csq@leg@DeclarePlainStyle + {} + {\let\csq@leg@DeclarePlainStyle\DeclarePlainStyle + \renewrobustcmd*{\DeclarePlainStyle}[2]{% + \csq@leg@DeclarePlainStyle{##1}{##1}{##2}{##2}}}} + +\csdef{csq@version@29}{% + \csq@error + {Incompatible version} + {Backwards compatibility with versions + prior to 3.0 not supported}} + +\endinput diff --git a/Master/texmf-dist/tex/latex/csquotes/csquotes.cfg b/Master/texmf-dist/tex/latex/csquotes/csquotes.cfg index 4a2c445c558..9004271d451 100644 --- a/Master/texmf-dist/tex/latex/csquotes/csquotes.cfg +++ b/Master/texmf-dist/tex/latex/csquotes/csquotes.cfg @@ -1,6 +1,6 @@ -% $Id: csquotes.cfg,v 4.4 2009/05/30 13:12:20 lehman stable $ +% $Id: csquotes.cfg,v 5.0 2010/06/02 19:22:07 lehman stable $ -\ProvidesFile{csquotes.cfg}[2009/05/30 v4.4 csquotes configuration] +\ProvidesFile{csquotes.cfg} % Put your definitions here. @@ -17,7 +17,7 @@ % processed before any options specified in the document preamble, % so you can still override them in the preamble. -\ExecuteQuoteOptions{strict=true,babel=try} +\ExecuteQuoteOptions{strict=true,autostyle=try} % CHANGING THE DEFAULT PARAMETERS @@ -217,8 +217,8 @@ % DEFINING ENVIRONMENTS FOR PARAGRAPH QUOTATIONS % Here are some alternative environments for paragraph quotations -% (block and display), as discussed in the tutorial. The first one -% decreases the font size of the 'quote' environment by one step: +% (block and display). The first one decreases the font size of +% the 'quote' environment by one step: \RequirePackage{relsize} diff --git a/Master/texmf-dist/tex/latex/csquotes/csquotes.def b/Master/texmf-dist/tex/latex/csquotes/csquotes.def index 5c71357e7ed..43e7d3b8796 100644 --- a/Master/texmf-dist/tex/latex/csquotes/csquotes.def +++ b/Master/texmf-dist/tex/latex/csquotes/csquotes.def @@ -1,18 +1,36 @@ -% $Id: csquotes.def,v 4.4d 2010/02/06 18:19:34 lehman stable $ +% $Id: csquotes.def,v 5.0 2010/06/02 19:13:37 lehman stable $ \ProvidesFile{csquotes.def} -[\csq@rcsid $Id: csquotes.def,v 4.4d 2010/02/06 18:19:34 lehman stable $ +[\csq@rcsid $Id: csquotes.def,v 5.0 2010/06/02 19:13:37 lehman stable $ csquotes generic definitions] % Set defaults -\ExecuteQuoteOptions{babel=tryonce,maxlevel=2} +\ExecuteQuoteOptions{autostyle=tryonce,autopunct,maxlevel=2} \SetBlockEnvironment{quote} \SetBlockThreshold{3} \SetCiteCommand{\cite} % Predefined backend styles +\DeclareQuoteStyle[quotes]{croatian}% verified + {\quotedblbase} + {\textquotedblright} + [0.05em]% unsure + {\quotesinglbase} + {\textquoteright} +\DeclareQuoteStyle[guillemets]{croatian}% verified + {\guillemotright} + {\guillemotleft} + [0.025em] + {\quotesinglbase} + {\textquoteright} +\DeclareQuoteStyle[guillements*]{croatian}% verified + {\guillemotleft} + {\guillemotright} + [0.025em] + {\quotesinglbase} + {\textquoteright} \DeclareQuoteStyle[quotes]{danish} {\quotedblbase} {\textquotedblleft} @@ -183,6 +201,7 @@ % Predefined aliases +\DeclareQuoteAlias[quotes]{croatian}{croatian} \DeclareQuoteAlias[quotes]{danish}{danish} \DeclareQuoteAlias[american]{english}{american} \DeclareQuoteAlias[american]{english}{canadian} @@ -336,7 +355,7 @@ %\DeclareQuoteGlyph{LCY}{60}% = << ligature = \guillemotleft %\DeclareQuoteGlyph{LCY}{62}% = >> ligature = \guillemotright -% Unicode (XeTeX) +% Unicode (for XeTeX) \DeclareQuoteGlyph{EU1}{"0022}% = neutral quot. mark, double = \textquotedbl \DeclareQuoteGlyph{EU1}{"0027}% = neutral quot. mark, single = \textquotesingle \DeclareQuoteGlyph{EU1}{"00AB}% = angle quot. mark, left-pointing double = \guillemotleft @@ -352,6 +371,37 @@ \DeclareQuoteGlyph{EU1}{"2039}% = angle quot. mark, left-pointing single = \guilsinglleft \DeclareQuoteGlyph{EU1}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright +\DeclareQuoteGlyph{U}{"0022}% = neutral quot. mark, double = \textquotedbl +\DeclareQuoteGlyph{U}{"0027}% = neutral quot. mark, single = \textquotesingle +\DeclareQuoteGlyph{U}{"00AB}% = angle quot. mark, left-pointing double = \guillemotleft +\DeclareQuoteGlyph{U}{"00BB}% = angle quot. mark, right-pointing double = \guillemotright +\DeclareQuoteGlyph{U}{"2018}% = comma quot. mark, single turned = \textquoteleft +\DeclareQuoteGlyph{U}{"2019}% = comma quot. mark, single = \textquoteright +\DeclareQuoteGlyph{U}{"201A}% = comma quot. mark, low single = \quotesinglbase +\DeclareQuoteGlyph{U}{"201B}% = comma quot. mark, single reversed = n.a. +\DeclareQuoteGlyph{U}{"201C}% = comma quot. mark, double turned = \textquotedblleft +\DeclareQuoteGlyph{U}{"201D}% = comma quot. mark, double = \textquotedblright +\DeclareQuoteGlyph{U}{"201E}% = comma quot. mark, low double = \quotedblbase +\DeclareQuoteGlyph{U}{"201F}% = comma quot. mark, double reversed = n.a. +\DeclareQuoteGlyph{U}{"2039}% = angle quot. mark, left-pointing single = \guilsinglleft +\DeclareQuoteGlyph{U}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright + +% Unicode (for LuaTeX) +\DeclareQuoteGlyph{EU2}{"0022}% = neutral quot. mark, double = \textquotedbl +\DeclareQuoteGlyph{EU2}{"0027}% = neutral quot. mark, single = \textquotesingle +\DeclareQuoteGlyph{EU2}{"00AB}% = angle quot. mark, left-pointing double = \guillemotleft +\DeclareQuoteGlyph{EU2}{"00BB}% = angle quot. mark, right-pointing double = \guillemotright +\DeclareQuoteGlyph{EU2}{"2018}% = comma quot. mark, single turned = \textquoteleft +\DeclareQuoteGlyph{EU2}{"2019}% = comma quot. mark, single = \textquoteright +\DeclareQuoteGlyph{EU2}{"201A}% = comma quot. mark, low single = \quotesinglbase +\DeclareQuoteGlyph{EU2}{"201B}% = comma quot. mark, single reversed = n.a. +\DeclareQuoteGlyph{EU2}{"201C}% = comma quot. mark, double turned = \textquotedblleft +\DeclareQuoteGlyph{EU2}{"201D}% = comma quot. mark, double = \textquotedblright +\DeclareQuoteGlyph{EU2}{"201E}% = comma quot. mark, low double = \quotedblbase +\DeclareQuoteGlyph{EU2}{"201F}% = comma quot. mark, double reversed = n.a. +\DeclareQuoteGlyph{EU2}{"2039}% = angle quot. mark, left-pointing single = \guilsinglleft +\DeclareQuoteGlyph{EU2}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright + \endinput % Auxiliary commands for some styles diff --git a/Master/texmf-dist/tex/latex/csquotes/csquotes.sty b/Master/texmf-dist/tex/latex/csquotes/csquotes.sty index 9c7ba32b7a8..76e3948194f 100644 --- a/Master/texmf-dist/tex/latex/csquotes/csquotes.sty +++ b/Master/texmf-dist/tex/latex/csquotes/csquotes.sty @@ -1,4 +1,4 @@ -% $Id: csquotes.sty,v 4.4d 2010/02/06 18:19:34 lehman stable $ +% $Id: csquotes.sty,v 5.0 2010/06/02 19:13:37 lehman stable $ % Copyright (c) 2003-2010 Philipp Lehman. % @@ -18,9 +18,12 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{csquotes} -[\csq@rcsid $Id: csquotes.sty,v 4.4d 2010/02/06 18:19:34 lehman stable $ +[\csq@rcsid $Id: csquotes.sty,v 5.0 2010/06/02 19:13:37 lehman stable $ context-sensitive quotations] +\def\csq@version$#1: #2.#3 ${#2#3} +\edef\csq@version{\csq@version$Revision: 5.0 $} + %% Compatibility and requirements \RequirePackage{etoolbox} @@ -82,9 +85,9 @@ %% General things -\newif\ifcsq@block -\newif\ifcsq@quiet -\newif\ifcsq@active +\newtoggle{csq@block} +\newtoggle{csq@quiet} +\newtoggle{csq@active} \newcount\csq@reset \newcount\csq@gtype @@ -129,12 +132,7 @@ % Miscellaneous tests -\newcommand*{\ifblockquote}{% - \ifcsq@block - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +\newcommand*{\ifblockquote}{\iftoggle{csq@block}} \def\csq@ifsafeactives{% \ifx\if@safe@actives\iftrue @@ -157,25 +155,10 @@ \expandafter\@secondoftwo \fi} -\def\csq@ifmmode{% - \ifmmode - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} - \def\csq@ifnested{% - \ifcsq@block - \expandafter\@firstoftwo - \else - \ifnum\csq@qlevel>\z@ - \expandafter\expandafter - \expandafter\@firstoftwo - \else - \expandafter\expandafter - \expandafter\@secondoftwo - \fi - \fi} + \iftoggle{csq@block} + {\@firstoftwo} + {\ifnumgreater\csq@qlevel\z@}} % Parsers for UTF-8 @@ -216,23 +199,24 @@ %% User feedback +\protected\def\csq@warning@loose#1{% + \csq@warning{#1}\@gobbletwo} +\protected\def\csq@warning@strict#1{% + \csq@error} +\let\csq@warnorerr\csq@warning@loose + \protected\def\csq@error#1#2{% \PackageError{csquotes}{#1}{#2.}} -\protected\def\csq@warning@loose#1#2#3{% +\protected\def\csq@warning#1{% \PackageWarning{csquotes}{#1}} -\protected\def\csq@warning@strict#1#2#3{% - \PackageError{csquotes}{#2}{#3.}} -\let\csq@warning\csq@warning@loose \protected\def\csq@info#1{% - \ifcsq@quiet - \else - \PackageInfo{csquotes}{#1\csq@noline}% - \fi} - + \iftoggle{csq@quiet} + {} + {\PackageInfo{csquotes}{#1\csq@noline}}} \let\csq@noline\@gobble -\AtEndOfPackage{\let\csq@noline\@empty} +\AtBeginDocument{\let\csq@noline\@empty} % Errors @@ -243,7 +227,7 @@ \csq@eqgroup \csq@errormark} -\protected\def\csq@mismatch{% +\protected\def\csq@mismatch#{% \csq@errormark \csq@err@mismatch} @@ -267,8 +251,13 @@ \csq@error {Option '#1' invalid} {The option you have supplied is invalid. See the csquotes - manual\MessageBreak for valid option keys and their - possible values}} + manual\MessageBreak for valid option keys and values}} + +\protected\def\csq@err@sfcodes#1{% + \csq@error + {'\string#1' not available} + {'\string#1' may not be used here because the\MessageBreak + punctuation tracker is not working at this point}} \protected\def\csq@err@glevel{% \csq@mismatch{% @@ -307,7 +296,7 @@ {Only single characters with category code 12 or 13 may be\MessageBreak allocated as active quotes. Numbers, punctuation marks, and\MessageBreak characters which - are part of the LaTeX syntax or reserved\MessageBreak + are part of LaTeX's syntax or reserved\MessageBreak for a specific purpose are invalid}} \protected\def\csq@err@utf{% @@ -341,26 +330,27 @@ % Warnings \protected\def\csq@warn@loadfirst#1{% - \csq@warning + \csq@warnorerr {Load '#1' before 'csquotes'} {'#1' package loaded too late} {Always load '#1' before 'csquotes'}} -\protected\def\csq@warn@nobabel#1{% - \csq@warning - {The 'babel' package is not available.\MessageBreak #1} +\protected\def\csq@warn@multilang#1{% + \csq@warnorerr + {No multilingual support.\MessageBreak #1} {#1} - {Load the 'babel' package to use this feature}} + {Multilingual support does not seem to be available.\MessageBreak + Try loading the 'babel' or the 'polyglossia' package}} -\protected\def\csq@warn@nostyle#1{% - \csq@warning +\protected\def\csq@warn@style#1{% + \csq@warnorerr {No style for language '#1'.\MessageBreak Using fallback style} {No style for language '#1'} {Define a style or alias for this language first}} \protected\def\csq@warn@location#1{% - \csq@warning + \csq@warnorerr {'\string#1' invalid at this point.\MessageBreak Ignoring command} {'\string#1' invalid at this point} @@ -369,7 +359,7 @@ package for details}} \protected\def\csq@warn@sfcodes#1{% - \csq@warning + \csq@warnorerr {No space factor codes for '#1' encoding.\MessageBreak Punctuation tracker may fail} {Punctuation tracker may fail at this point} @@ -377,14 +367,6 @@ See \string\DeclareQuoteGlyph\MessageBreak in the 'csquotes' manual for details}} -\protected\def\csq@warn@legacy#1#2{% - \csq@warning - {'\string#1' is deprecated.\MessageBreak - Using '\string#2' instead} - {'\string#1' is deprecated} - {Please use '\string#2' instead}% - \let#1#2#2} - %% Outer quotations \protected\def\csq@oqmark{% @@ -528,9 +510,9 @@ \csq@tempa} \appto\@parboxrestore{% - \let\csq@bquote@i\csq@bquote@iii + \let\csq@bquote@i\csq@bquote@ii \csq@qlevel\z@ - \csq@blockfalse} + \togglefalse{csq@block}} %% Restore kerning @@ -636,7 +618,11 @@ \csq@setfrcodes \fi \let\frenchspacing\csq@setfrcodes - \let\nonfrenchspacing\csq@setencodes} + \let\nonfrenchspacing\csq@setencodes + \let\csq@setsfcodes\relax} + +\def\csq@ifsfcodes{% + \ifnumequal\csq@sf@question{\sfcode`\?}} \def\csq@setfrcodes{% \ifnum\sfcode`\A=\@m @@ -697,75 +683,62 @@ 1000% \fi} -\newcommand*{\ifquotecomma}{% - \ifnum\csq@spacefactor=\csq@sf@comma - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +% {}{} -\newcommand*{\ifquotesemicolon}{% - \ifnum\csq@spacefactor=\csq@sf@semicolon - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +\newcommand*{\ifpunct}{% + \csq@ifsfcodes + {\ifnumgreater\csq@spacefactor\csq@sf@threshold@low + {\ifnumless\csq@spacefactor\csq@sf@threshold@high} + {\@secondoftwo}} + {\csq@err@sfcodes\ifpunct + \@secondoftwo}} -\newcommand*{\ifquotecolon}{% - \ifnum\csq@spacefactor=\csq@sf@colon - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +% {}{}{} -\newcommand*{\ifquoteperiod}{% - \ifnum\csq@spacefactor=\csq@sf@period - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +\newrobustcmd*{\iftextpunct}[1]{% + \csq@ifpuncttest{#1}{\ifpunct}} -\newcommand*{\ifquoteexclam}{% - \ifnum\csq@spacefactor=\csq@sf@exclam - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +% {}{} -\newcommand*{\ifquotequestion}{% - \ifnum\csq@spacefactor=\csq@sf@question - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} +\newcommand*{\ifterm}{% + \csq@ifsfcodes + {\ifnumgreater\csq@spacefactor\csq@sf@threshold@term + {\ifnumless\csq@spacefactor\csq@sf@threshold@high} + {\@secondoftwo}} + {\csq@err@sfcodes\ifterm + \@secondoftwo}} -\newcommand*{\ifquotepunct}{% - \ifnum\csq@spacefactor>\csq@sf@threshold@low - \ifnum\csq@spacefactor<\csq@sf@threshold@high - \expandafter\expandafter - \expandafter\@firstoftwo - \else - \expandafter\expandafter - \expandafter\@secondoftwo - \fi - \else - \expandafter\@secondoftwo - \fi} +% {}{}{} -\newcommand*{\ifquoteterm}{% - \ifnum\csq@spacefactor>\csq@sf@threshold@term - \ifnum\csq@spacefactor<\csq@sf@threshold@high - \expandafter\expandafter - \expandafter\@firstoftwo - \else - \expandafter\expandafter - \expandafter\@secondoftwo - \fi - \else - \expandafter\@secondoftwo - \fi} +\newrobustcmd*{\iftextterm}[1]{% + \csq@ifpuncttest{#1}{\ifterm}} + +% {}{}{} + +\newrobustcmd*{\ifpunctmark}[1]{% + \csq@ifsfcodes + {\ifbool{hmode} + {\ifnumequal{\sfcode`#1}\spacefactor} + {\@secondoftwo}} + {\csq@err@sfcodes\ifpunctmark + \@secondoftwo}} + +% {}{}{}{} + +\newrobustcmd*{\iftextpunctmark}[2]{% + \csq@ifpuncttest{#1}{\ifpunctmark{#2}}} + +\def\csq@ifpuncttest#1#2{% + \begingroup + \setbox\@tempboxa=\hbox{% + \csq@ifsfcodes\relax\csq@setsfcodes + #1#2 + {\aftergroup\@firstoftwo} + {\aftergroup\@secondoftwo}}% + {\endgroup\@firstoftwo} + {\endgroup\@secondoftwo}} -%% Babel interface +%% Multilingual interface \def\csq@setstyle#1{% \begingroup @@ -775,7 +748,7 @@ \def\noexpand\csq@currentstyle{#1}% \noexpand\csuse{csq@qstyle@#1}}% \csq@tempa} - {\csq@warning + {\csq@warnorerr {Quote style '#1' not defined.\MessageBreak Ignoring command} {Quote style '#1' not defined} {Define the style or alias first} @@ -786,7 +759,7 @@ \ifx\csq@currentstyle\languagename \else \ifcsundef{csq@qstyle@\languagename} - {\csq@warn@nostyle\languagename + {\csq@warn@style\languagename \csq@setstyle{fallback}} {\csq@setstyle{\languagename}}% \fi @@ -802,6 +775,13 @@ {\csuse{otherlanguage*}{\csq@mainlang}} {}} +\protected\long\def\csq@switchlang#1{% + \ifdef\csq@mainlang + {\begingroup + \csuse{otherlanguage*}{\csq@mainlang}#1% + \endgroup} + {#1}} + % \lowercase: workaround for page headers of book.cls et al. \def\csq@lang#1{% @@ -810,8 +790,8 @@ \def\csq@nolang#1{% \begingroup - \lowercase{\def\csq@tempa{#1}}% - \csq@warn@nobabel{Cannot switch to language '\csq@tempa'}% + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@multilang{Cannot switch to language '\csq@tempa'}% \endgroup} \def\csq@hyph#1{% @@ -820,8 +800,8 @@ \def\csq@nohyph#1{% \begingroup - \lowercase{\def\csq@tempa{#1}}% - \csq@warn@nobabel{No hyphenation rules for '\csq@tempa'}% + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@multilang{No hyphenation rules for '\csq@tempa'}% \endgroup} \def\csq@hyphenrules#1{% @@ -835,7 +815,7 @@ \lefthyphenmin#1\relax \righthyphenmin#2\relax} -\appto\csq@mkbabel{% +\appto\csq@hook@multilang{% \appto\@parboxrestore{\csq@resetlang}% \ifundef\l@usenglish {\ifundef\l@USenglish @@ -850,36 +830,36 @@ \ifcase\csq@reset \or \or - \csq@info{Enabling multilingual support}% + \csq@info{Enabling multilingual quotes}% \csq@reset\@ne \else \csq@info{Adjusting default style}% - \ifcsundef{csq@qstyle@\bbl@main@language} - {\csq@warn@nostyle\bbl@main@language - \DeclareQuoteAlias{fallback}{default}} - {\DeclareQuoteAlias{\bbl@main@language}{default}}% + \ifcsdef{csq@qstyle@\csq@main@language} + {\DeclareQuoteAlias{\csq@main@language}{default}} + {\csq@warn@style\csq@main@language + \DeclareQuoteAlias{fallback}{default}}% \fi} -\appto\csq@mknobabel{% +\appto\csq@hook@nomultilang{% \ifcase\csq@reset \or - \csq@warn@nobabel{Cannot enable multilingual support}% + \csq@warn@multilang{Cannot enable multilingual quotes}% \or \or - \csq@warn@nobabel{Cannot adjust default style}% + \csq@warn@multilang{Cannot adjust default style}% \fi \csq@reset\z@ - \def\csq@resetqstyle{% - \csq@warn@nobabel{Cannot enable multilingual support}}% \let\csq@lang\csq@nolang - \let\csq@hyph\csq@nohyph} + \let\csq@hyph\csq@nohyph + \def\csq@resetqstyle{% + \csq@warn@multilang{Cannot enable multilingual quotes}}} %% Markup with control sequences % Argument parsers -% {}[][] => -% {\mkcitation}{}{} +% {}[][] => +% {\mkcitation}{}{} \def\csq@getcargs#1{% \@ifnextchar[%] @@ -894,8 +874,8 @@ \long\def\csq@getcargs@ii#1#2[#3]{% #1{\mkcitation}{#2}{#3}} -% {}[][]{}[] => -% {\mkccitation}{\csq@cite[][]{}}{} +% {}[
][]{}[] =>
+%  {\mkccitation}{\csq@cite[
][]{}}{}
 
 \def\csq@getccargs#1{%
   \@ifnextchar[%]
@@ -915,34 +895,71 @@
 \long\def\csq@getccargs@iii#1#2#3[#4]{%
   #1{\mkccitation}{\csq@cite#2{#3}}{#4}}
 
+% {} => {}
+
+\protected\long\def\csq@getpunct#1{%
+  \begingroup
+  \def\csq@tempa{\endgroup#1}%
+  \futurelet\@let@token\csq@getpunct@i}
+
+\def\csq@getpunct@i{%
+  \expandafter\csq@getpunct@ii\csq@allpunct&}
+
+\def\csq@getpunct@ii#1{%
+  \ifx#1&%
+    \expandafter\csq@getpunct@v
+  \fi
+  \if\noexpand#1\noexpand\@let@token
+    \expandafter\csq@getpunct@iii
+  \fi
+  \csq@getpunct@ii}
+
+\def\csq@getpunct@iii#1\csq@getpunct@ii#2&{%
+  \expandafter\csq@getpunct@iv\csq@autopunct&}
+
+\def\csq@getpunct@iv#1{%
+  \ifx#1&%
+    \expandafter\csq@getpunct@vi
+  \fi
+  \if\noexpand#1\noexpand\@let@token
+    \expandafter\csq@getpunct@vii
+  \fi
+  \csq@getpunct@iv}
+
+\def\csq@getpunct@v#1\csq@getpunct@ii{\csq@tempa{}\@empty}
+\def\csq@getpunct@vi#1\csq@getpunct@iv{\csq@tempa{}}
+\def\csq@getpunct@vii#1\csq@getpunct@iv#2{\csq@tempa{#3}\@empty}
+
+% Punctuation
+
+\newrobustcmd*{\DeclareAutoPunct}[1]{%
+  \ifblank{#1}
+    {\def\csq@autopunct{}}
+    {\edef\csq@autopunct{\detokenize{#1}}}}
+
+\let\csq@autopunct\@empty
+\def\csq@allpunct{.,;:!?}
+
 % Plain quotes
 
 \newrobustcmd*{\enquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\enquote}
-    {\@ifstar
-      {\csq@quote@ii{}}
-      {\csq@quote@i{}}}}
+  \@ifstar{\csq@quote@ii{}}{\csq@quote@i{}}}
 
 \long\def\csq@quote@i#1#2{%
   \csq@bqgroup #1\csq@oqopen@i #2\csq@qclose}
 \long\def\csq@quote@ii#1#2{%
   \csq@bqgroup #1\csq@iqopen@i #2\csq@qclose}
 
-% Plain quotes + babel
+% Plain quotes + language switching
 
 \newrobustcmd*{\foreignquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\foreignquote}
-    {\@ifstar\csq@fquote@ii\csq@fquote@i}}
+  \@ifstar\csq@fquote@ii\csq@fquote@i}
 
 \def\csq@fquote@i#1{\csq@quote@i{\csq@lang{#1}}}
 \def\csq@fquote@ii#1{\csq@quote@ii{\csq@lang{#1}}}
 
 \newrobustcmd*{\hyphenquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\hyphenquote}
-    {\@ifstar\csq@hquote@ii\csq@hquote@i}}
+  \@ifstar\csq@hquote@ii\csq@hquote@i}
 
 \def\csq@hquote@i#1{\csq@quote@i{\csq@hyph{#1}}}
 \def\csq@hquote@ii#1{\csq@quote@ii{\csq@hyph{#1}}}
@@ -972,7 +989,7 @@
     {\expandafter\csq@pdf@quote@ii\@gobble}
     {\csq@pdf@quote@i}}
 
-\appto\csq@mkhyperref{%
+\appto\csq@hook@hyperref{%
   \let\enquote\csq@pdf@quote
   \let\foreignquote\csq@pdf@fquote
   \let\hyphenquote\csq@pdf@fquote}
@@ -980,82 +997,83 @@
 % Text quotes
 
 \newrobustcmd*{\textquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\textquote}
-    {\@ifstar
-       {\csq@getcargs{\csq@tquote{\csq@iqopen@i}}}
-       {\csq@getcargs{\csq@tquote{\csq@oqopen@i}}}}}
+  \@ifstar
+    {\csq@getcargs{\csq@tquote{}{\csq@iqopen}}}
+    {\csq@getcargs{\csq@tquote{}{\csq@oqopen}}}}
 
-% {}{}{}{}{}
+% {}{}{}{}{}{}
 
-\long\def\csq@tquote#1#2#3#4#5{%
-  \csq@bqgroup
-    \def\csq@tempa{%
-      \mkpretextpunct{#4}%
-      \csq@qclose
-      \mkmidtextpunct{#4}}%
-    \ifblank{#3}
-      {}
-      {\appto\csq@tempa{#2{#3}}}%
-    #1\quotetext#5\endquotetext
-  \csq@tempa\mkfintextpunct{#4}}
-
-% Text quotes + babel
+\long\def\csq@tquote#1#2#3#4#5#6{%
+  \csq@getpunct{\csq@tquote@i{#1}{#2}{#3}{#4}{#5}{#6}}}
+
+% {}{}{}{}{}{}{}
+
+\long\def\csq@tquote@i#1#2#3#4#5#6#7#8{%
+  \begingroup
+  \csq@setsfcodes
+  \edef\csq@tempa{%
+    \unexpanded{%
+      \mktextquote
+      {#2}%
+      {#6}%
+      {\csq@qclose}%
+      {#5}{#7}}%
+    {\ifblank{#4}
+       {}
+       {\unexpanded{\csq@switchlang{#3{#4}}}}}}%
+  #1\csq@tempa#8%
+  \endgroup}
+
+% {}{}{}{}{}{}
+
+\newcommand{\mktextquote}[6]{#1#2#4#3#6#5}
+
+% Text quotes + language switching
 
 \newrobustcmd*{\foreigntextquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\foreigntextquote}
-    {\@ifstar\csq@ftquote@ii\csq@ftquote@i}}
+  \@ifstar\csq@ftquote@ii\csq@ftquote@i}
 
 \def\csq@ftquote@i#1{%
-  \csq@getcargs{\csq@tquote{\csq@lang{#1}\csq@oqopen@i}}}
+  \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@oqopen}}}
 \def\csq@ftquote@ii#1{%
-  \csq@getcargs{\csq@tquote{\csq@lang{#1}\csq@iqopen@i}}}
+  \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@iqopen}}}
 
 \newrobustcmd*{\hyphentextquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\hyphentextquote}
-    {\@ifstar\csq@htquote@ii\csq@htquote@i}}
+  \@ifstar\csq@htquote@ii\csq@htquote@i}
 
 \def\csq@htquote@i#1{%
-  \csq@getcargs{\csq@tquote{\csq@hyph{#1}\csq@oqopen@i}}}
+  \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@oqopen}}}
 \def\csq@htquote@ii#1{%
-  \csq@getcargs{\csq@tquote{\csq@hyph{#1}\csq@iqopen@i}}}
+  \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@iqopen}}}
 
 % Integrated text quotes
 
 \newrobustcmd*{\textcquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\textcquote}
-    {\@ifstar
-       {\csq@getccargs{\csq@tquote{\csq@iqopen@i}}}
-       {\csq@getccargs{\csq@tquote{\csq@oqopen@i}}}}}
+  \@ifstar
+    {\csq@getccargs{\csq@tquote{}{\csq@iqopen}}}
+    {\csq@getccargs{\csq@tquote{}{\csq@oqopen}}}}
 
-% Integrated text quotes + babel
+% Integrated text quotes + language switching
 
 \newrobustcmd*{\foreigntextcquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\foreigntextcquote}
-    {\@ifstar\csq@ftcquote@ii\csq@ftcquote@i}}
+  \@ifstar\csq@ftcquote@ii\csq@ftcquote@i}
 
 \def\csq@ftcquote@i#1{%
-  \csq@getccargs{\csq@tquote{\csq@lang{#1}\csq@oqopen@i}}}
+  \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@oqopen}}}
 \def\csq@ftcquote@ii#1{%
-  \csq@getccargs{\csq@tquote{\csq@lang{#1}\csq@iqopen@i}}}
+  \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@iqopen}}}
 
 \newrobustcmd*{\hyphentextcquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\hyphentextcquote}
-    {\@ifstar\csq@htcquote@ii\csq@htcquote@i}}
+  \@ifstar\csq@htcquote@ii\csq@htcquote@i}
 
 \def\csq@htcquote@i#1{%
-  \csq@getccargs{\csq@tquote{\csq@hyph{#1}\csq@oqopen@i}}}
+  \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@oqopen}}}
 \def\csq@htcquote@ii#1{%
-  \csq@getccargs{\csq@tquote{\csq@hyph{#1}\csq@iqopen@i}}}
+  \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@iqopen}}}
 
 % PDF strings
 
-\appto\csq@mkhyperref{%
+\appto\csq@hook@hyperref{%
   \def\textquote{\pdfstringdefWarn\textquote}%
   \def\foreigntextquote{\pdfstringdefWarn\foreigntextquote}%
   \def\hyphentextquote{\pdfstringdefWarn\hyphentextquote}%
@@ -1066,47 +1084,47 @@
 % Block quotes
 
 \newrobustcmd*{\blockquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\blockquote}
-    {\csq@getcargs{\csq@bquote{}}}}
+  \csq@getcargs{\csq@bquote{}}}
+
+% {}{}{}{}{}
 
-\def\csq@bquote{%
+\long\def\csq@bquote#1#2#3#4#5{%
   \csq@ifnested
-    {\csq@err@nbquote\@gobblefive}
-    {\ifinner
-       \expandafter\csq@bquote@iii
-     \else
-       \expandafter\csq@bquote@i
-     \fi}}
+    {\csq@err@nbquote}
+    {\csq@getpunct{%
+       \ifbool{inner}{\csq@bquote@ii}{\csq@bquote@i}%
+	 {#1}{#2}{#3}{#4}{#5}}}}
 
-% {}{}{}{}{}
+% {}{}{}{}{}{}
 
 \long\def\csq@bquote@i#1#2#3#4#5{%
   \begingroup
   \@blockquote@prehook
   \@fileswfalse
-  \csq@blockfalse
+  \let\csq@bslash\\%
   \let\csq@newline\newline
+  \togglefalse{csq@block}%
+  \def\csq@isblock{\toggletrue{csq@block}}%
   \setbox\@tempboxa=\vbox{%
-    \def\par{\aftergroup\csq@blocktrue\@par}%
-    \def\newline{\aftergroup\csq@blocktrue
+    \def\par{\aftergroup\csq@isblock\@par}%
+    \def\\{\aftergroup\csq@isblock\let\\\csq@bslash\\}%
+    \def\newline{\aftergroup\csq@isblock
       \let\newline\csq@newline\newline}%
     \parfillskip\z@ \@plus 1fil\relax
     \parindent\z@
-    \vrule \@height1\baselineskip \@width\z@ #1#5}%
+    \vrule \@height1\baselineskip \@width\z@ #1#5#4}%
   \ifdim\ht\@tempboxa>\csq@tshold\baselineskip
-    \csq@blocktrue
-  \fi
-  \ifcsq@block
-    \aftergroup\@firstoftwo
-  \else
-    \aftergroup\@secondoftwo
+    \toggletrue{csq@block}%
   \fi
+  \iftoggle{csq@block}
+    {\aftergroup\@firstoftwo}
+    {\aftergroup\@secondoftwo}%
   \@blockquote@posthook
   \endgroup
-  \csq@bquote@ii\csq@bquote@iii{#1}{#2}{#3}{#4}{#5}}
+  \csq@bquote@iii\csq@bquote@ii{#1}{#2}{#3}{#4}{#5}}
 
-\let\csq@nbgobble\@firstofone
+\newrobustcmd*{\BlockquoteDisable}{%
+  \gappto\@blockquote@prehook}
 
 \newcommand*{\@blockquote@prehook}{%
   \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
@@ -1114,8 +1132,9 @@
   \let\@elt\relax
   \let\csq@nbgobble\@gobble
   \let\csq@bquote\@gobblefive
+  \let\csq@warnorerr\@gobblethree
   \let\csq@error\@gobbletwo
-  \let\csq@warning\@gobblethree
+  \let\csq@warning\@gobble
   \let\csq@info\@gobble
   \let\label\@gobble
   \let\index\@gobble
@@ -1124,71 +1143,63 @@
 \newcommand*{\@blockquote@posthook}{%
   \csq@tempa}
 
-\long\def\csq@bquote@ii#1#2#3#4#5{%
+\let\csq@nbgobble\@firstofone
+
+% {}{}{}{}{}{}
+
+\def\csq@bquote@ii#1{\csq@tquote@i{#1}{\csq@oqopen}}
+
+\long\def\csq@bquote@iii#1#2#3#4#5#6#7{%
   \begin{\csq@blockenvironment}%
-    \csq@blocktrue
-    \begingroup#1%
-      \csq@setsfcodes
-      \quoteblock
-        #5%
-      \mkpreblockpunct{#4}%
-      \endquoteblock
-      \mkmidblockpunct{#4}%
-    \endgroup
-    \ifblank{#3}
-      {}
-      {#2{#3}}%
-    \mkfinblockpunct{#4}%
+  \csq@setsfcodes
+  \toggletrue{csq@block}%
+  \edef\csq@tempa{%
+    \unexpanded{%
+      \mkblockquote
+      {#5}%
+      {#4}{#6}}%
+    {\ifblank{#3}
+       {}
+       {\unexpanded{\csq@switchlang{#2{#3}}}}}}%
+  #1\csq@tempa#7%
   \end{\csq@blockenvironment}}
 
-\long\def\csq@bquote@iii#1#2#3#4#5{%
-  \csq@bqgroup
-    \def\csq@tempa{%
-      \mkpreblockpunct{#4}%
-      \csq@qclose
-      \mkmidblockpunct{#4}}%
-    \ifblank{#3}
-      {}
-      {\appto\csq@tempa{#2{#3}}}%
-    #1\csq@oqopen@i\quotetext#5\endquotetext
-  \csq@tempa\mkfinblockpunct{#4}}
+% {}{}{}{}
 
-\newrobustcmd*{\BlockquoteDisable}{\gappto\@blockquote@prehook}
+\newcommand{\mkblockquote}[4]{#1#2#4#3}
 
-% Block quotes + babel
+% Block quotes + language switching
 
 \newrobustcmd*{\foreignblockquote}[1]{%
-  \csq@ifmmode
-    {\csq@err@mmode\foreignblockquote}
-    {\csq@getcargs{\csq@bquote{\csq@lang{#1}}}}}
+  \csq@getcargs{\csq@bquote{\csq@lang{#1}}}}
 
 \newrobustcmd*{\hyphenblockquote}[1]{%
-  \csq@ifmmode
-    {\csq@err@mmode\hyphenblockquote}
-    {\csq@getcargs{\csq@bquote{\csq@hyph{#1}}}}}
+  \csq@getcargs{\csq@bquote{\csq@hyph{#1}}}}
+
+\newrobustcmd*{\hybridblockquote}[1]{%
+  \csq@getcargs{\csq@bquote{%
+    \iftoggle{csq@block}\csq@lang\csq@hyph{#1}}}}
 
 % Integrated block quotes
 
 \newrobustcmd*{\blockcquote}{%
-  \csq@ifmmode
-    {\csq@err@mmode\blockcquote}
-    {\csq@getccargs{\csq@bquote{}}}}
+  \csq@getccargs{\csq@bquote{}}}
 
-% Integrated block quotes + babel
+% Integrated block quotes + language switching
 
 \newrobustcmd*{\foreignblockcquote}[1]{%
-  \csq@ifmmode
-    {\csq@err@mmode\foreignblockcquote}
-    {\csq@getccargs{\csq@bquote{\csq@lang{#1}}}}}
+  \csq@getccargs{\csq@bquote{\csq@lang{#1}}}}
 
 \newrobustcmd*{\hyphenblockcquote}[1]{%
-  \csq@ifmmode
-    {\csq@err@mmode\hyphenblockcquote}
-    {\csq@getccargs{\csq@bquote{\csq@hyph{#1}}}}}
+  \csq@getccargs{\csq@bquote{\csq@hyph{#1}}}}
+
+\newrobustcmd*{\hybridblockcquote}[1]{%
+  \csq@getccargs{\csq@bquote{%
+    \iftoggle{csq@block}\csq@lang\csq@hyph{#1}}}}
 
 % PDF strings
 
-\appto\csq@mkhyperref{%
+\appto\csq@hook@hyperref{%
   \def\blockquote{\pdfstringdefWarn\blockquote}%
   \def\foreignblockquote{\pdfstringdefWarn\foreignblockquote}%
   \def\hyphenblockquote{\pdfstringdefWarn\hyphenblockquote}%
@@ -1199,97 +1210,71 @@
 % Display quotes
 
 \newenvironment*{displayquote}
-  {\csq@getcargs{\csq@dquote{}}}
+  {\csq@getcargs{\csq@bdquote{}}}
   {\csq@edquote}
 
-% {}{}{}{}
-
-\def\csq@dquote#1#2#3#4{%
-  \ifblank{#3}
-    {\let\csq@tempb\@empty}
-    {\def\csq@tempb{#2{#3}}}%
-  \def\csq@tempc{#4}%
-  \csq@bdquote{#1}}
+% {}{}{}{}
 
-\def\csq@bdquote#1{%
+\def\csq@bdquote#1#2#3#4{%
   \csuse{\csq@blockenvironment}%
-  \csq@blocktrue
-  \begingroup#1%
   \csq@setsfcodes
-  \quoteblock}
+  \toggletrue{csq@block}%
+  #1\ifblank{#3}
+    {\def\csq@tempb{\mkenddispquote{#4}{}}%
+     \mkbegdispquote{#4}{}}
+    {\def\csq@tempb{\mkenddispquote{#4}{\csq@switchlang{#2{#3}}}}%
+     \mkbegdispquote{#4}{\csq@switchlang{#2{#3}}}}%
+  \ignorespaces}
 
 \def\csq@edquote{%
-  \ifdim\lastskip>\z@\unskip\fi
-  \expandafter\mkpredisppunct
-  \expandafter{\csq@tempc}%
-  \endquoteblock
-  \expandafter\mkmiddisppunct
-  \expandafter{\csq@tempc}%
-  \endgroup
+  \unspace
   \csq@tempb
-  \expandafter\mkfindisppunct
-  \expandafter{\csq@tempc}%
   \csuse{end\csq@blockenvironment}}
 
-% Display quotes + babel
+\providerobustcmd*{\unspace}{%
+  \ifbool{hmode}
+    {\ifdimgreater\lastskip\z@
+       {\unskip\unspace}
+       {\ifnumgreater\lastpenalty\z@
+	  {\unpenalty\unspace}
+	  {}}}
+    {}}
+
+% {}{}
+
+\newcommand{\mkbegdispquote}[2]{}
+\newcommand{\mkenddispquote}[2]{#1#2}
+
+% Display quotes + language switching
 
 \newenvironment*{foreigndisplayquote}[1]
-  {\csq@getcargs{\csq@dquote{\csq@lang{#1}}}}
+  {\csq@getcargs{\csq@bdquote{\csq@lang{#1}}}}
   {\csq@edquote}
 
 \newenvironment*{hyphendisplayquote}[1]
-  {\csq@getcargs{\csq@dquote{\csq@hyph{#1}}}}
+  {\csq@getcargs{\csq@bdquote{\csq@hyph{#1}}}}
   {\csq@edquote}
 
 % Integrated display quotes
 
 \newenvironment*{displaycquote}
-  {\csq@getccargs{\csq@dcquote{}}}
+  {\csq@getccargs{\csq@bdquote{}}}
   {\csq@edquote}
 
-% {}{}{}{}
-
-\def\csq@dcquote#1#2#3#4{%
-  \def\csq@tempb{#2{#3}}%
-  \def\csq@tempc{#4}%
-  \csq@bdquote{#1}}
-
-% Integrated display quotes + babel
+% Integrated display quotes + language switching
 
 \newenvironment*{foreigndisplaycquote}[1]
-  {\csq@getccargs{\csq@dcquote{\csq@lang{#1}}}}
+  {\csq@getccargs{\csq@bdquote{\csq@lang{#1}}}}
   {\csq@edquote}
 
 \newenvironment*{hyphendisplaycquote}[1]
-  {\csq@getccargs{\csq@dcquote{\csq@hyph{#1}}}}
+  {\csq@getccargs{\csq@bdquote{\csq@hyph{#1}}}}
   {\csq@edquote}
 
 % Hooks
 
-\newcommand*{\mkcitation}[1]{\space(#1)}
-\newcommand*{\mkccitation}[1]{\space#1}
-
-\newcommand*{\mkpretextpunct}[1]{}
-\newcommand*{\mkmidtextpunct}[1]{}
-\newcommand*{\mkfintextpunct}[1]{#1}
-\newcommand*{\mkpreblockpunct}[1]{}
-\newcommand*{\mkmidblockpunct}[1]{}
-\newcommand*{\mkfinblockpunct}[1]{#1}
-\newcommand*{\mkpredisppunct}[1]{}
-\newcommand*{\mkmiddisppunct}[1]{}
-\newcommand*{\mkfindisppunct}[1]{#1}
-
-\newenvironment*{quotetext}{}{}
-\newenvironment*{quoteblock}{}{}
-
-% Legacy commands
-
-\newrobustcmd*{\cquote}{%
-  \csq@warn@legacy\cquote\textcquote}
-\newrobustcmd*{\foreigncquote}{%
-  \csq@warn@legacy\foreigncquote\foreigntextcquote}
-\newrobustcmd*{\hyphencquote}{%
-  \csq@warn@legacy\hyphencquote\hyphentextcquote}
+\newcommand{\mkcitation}[1]{\space(#1)}
+\newcommand{\mkccitation}[1]{\space#1}
 
 %% Markup with active characters
 
@@ -1355,26 +1340,26 @@
   \let\do\csq@do@doutfspecial
   \csq@doutfspecials
   \let\do\noexpand
-  \csq@activetrue}
+  \toggletrue{csq@active}}
 
 \def\csq@mkdisable{%
-  \ifcsq@active
-    \let\do\csq@do@undospecial
-    \csq@dospecials
-    \let\do\csq@do@undoutfspecial
-    \csq@doutfspecials
-    \let\do\noexpand
-    \csq@activefalse
-  \fi}
+  \iftoggle{csq@active}
+    {\let\do\csq@do@undospecial
+     \csq@dospecials
+     \let\do\csq@do@undoutfspecial
+     \csq@doutfspecials
+     \let\do\noexpand
+     \togglefalse{csq@active}}
+    {}}
 
 \def\csq@mkverbatim{%
-  \ifcsq@active
-    \let\do\csq@do@verbspecial
-    \csq@dospecials
-    \let\do\csq@do@undoutfspecial
-    \csq@doutfspecials
-    \let\do\noexpand
-  \fi}
+  \iftoggle{csq@active}
+    {\let\do\csq@do@verbspecial
+     \csq@dospecials
+     \let\do\csq@do@undoutfspecial
+     \csq@doutfspecials
+     \let\do\noexpand}
+    {}}
 
 \def\csq@mkdelete{%
   \csq@mkdisable
@@ -1388,7 +1373,7 @@
   \let\csq@mkpdfstrings\@empty}
 
 \let\csq@mkpdfstrings\@empty
-\appto\csq@mkhyperref{\csq@mkpdfstrings}
+\appto\csq@hook@hyperref{\csq@mkpdfstrings}
 
 \ifdef\inpenc@prehook % inputenc 2006/05/05 v1.1b
   {\AtBeginDocument{%
@@ -1525,7 +1510,7 @@
   \csq@ifsafeactives
     {\csuse{csq@string@#1}}
     {\csq@iftypeset
-       {\csq@ifmmode
+       {\ifbool{mmode}
           {\csuse{csq@saved@#1}}
           {\csuse{csq@textdef@#1}}}
        {\csq@ifstrings
@@ -1536,7 +1521,7 @@
   \csq@ifsafeactives
     {\csuse{csq@string@#1}}
     {\csq@iftypeset
-       {\csq@ifmmode
+       {\ifbool{mmode}
           {\csuse{csq@saved@#1}}
           {\csq@ifnested
              {\csq@err@nbquote}
@@ -1549,7 +1534,7 @@
   \csq@ifsafeactives
     {\csuse{csq@string@#1}}
     {\csq@iftypeset
-       {\csq@ifmmode
+       {\ifbool{mmode}
           {\csuse{csq@saved@#1}}
           {\csq@ifnested
              {\csq@err@nbquote}
@@ -1576,7 +1561,7 @@
           {\csuse{csq@string@#1}}
           {\noexpand\csqBQend{#1}}}}}
 
-\appto\csq@mkhyperref{%
+\appto\csq@hook@hyperref{%
   \def\csqQQ#1{\csuse{csq@pdfdef@#1}}%
   \def\csqBQ#1{\csuse{csq@pdfdef@#1}}%
   \def\csqBQbeg#1{\csuse{csq@pdfdef@#1}}%
@@ -1828,6 +1813,11 @@
   \csq@addbspecial{#2}{#3}{#4}%
     {\csq@bquote{\csq@hyph{#1}}{\mkcitation}}}
 
+\newrobustcmd*{\MakeHybridBlockQuote}[4]{%
+  \csq@addbspecial{#2}{#3}{#4}%
+    {\csq@bquote{\iftoggle{csq@block}\csq@lang\csq@hyph{#1}}%
+       {\mkcitation}}}
+
 \newrobustcmd*{\EnableQuotes}{}
 \newrobustcmd*{\DisableQuotes}{}
 \newrobustcmd*{\VerbatimQuotes}{}
@@ -1841,27 +1831,21 @@
 % Author interface
 
 \newrobustcmd*{\@enablequotes}{%
-  \csq@quiettrue
+  \toggletrue{csq@quiet}%
   \csq@mkenable
-  \csq@quietfalse}
+  \togglefalse{csq@quiet}}
 \newrobustcmd*{\@disablequotes}{%
-  \csq@quiettrue
+  \toggletrue{csq@quiet}%
   \csq@mkdisable
-  \csq@quietfalse}
+  \togglefalse{csq@quiet}}
 \newrobustcmd*{\@verbatimquotes}{%
-  \csq@quiettrue
+  \toggletrue{csq@quiet}%
   \csq@mkverbatim
-  \csq@quietfalse}
+  \togglefalse{csq@quiet}}
 \newrobustcmd*{\@deletequotes}{%
-  \csq@quiettrue
+  \toggletrue{csq@quiet}%
   \csq@mkdelete
-  \csq@quietfalse}
-
-% Legacy
-
-\newrobustcmd*{\RestoreQuotes}{%
-  \csq@warn@legacy\RestoreQuotes\EnableQuotes}
-\newrobustcmd*{\@restorequotes}{\@enablequotes}
+  \togglefalse{csq@quiet}}
 
 %% Switch quote styles manually
 
@@ -1874,7 +1858,7 @@
 
 \def\csq@setqstyle[#1]#2{%
   \ifnum\csq@reset=\@ne
-    \csq@info{Disabling multilingual support}%
+    \csq@info{Disabling multilingual quotes}%
     \csq@reset\z@
   \fi
   \ifblank{#1}
@@ -1882,7 +1866,7 @@
     {\csq@setstyle{#2/#1}}}
 
 \def\csq@resetqstyle{%
-  \csq@info{Enabling multilingual support}%
+  \csq@info{Enabling multilingual quotes}%
   \csq@reset\@ne}
 
 %% Define quote styles
@@ -2004,21 +1988,11 @@
     {\csq@err@undef{#1}}
     {\def\csq@cite{#1}}}
 
-% Legacy commands
-
-\newrobustcmd*{\setblockthreshold}{%
-  \csq@warn@legacy\setblockthreshold\SetBlockThreshold}
-\newrobustcmd*{\setblockenvironment}{%
-  \csq@warn@legacy\setblockenvironment\SetBlockEnvironment}
-
-%% Internal interface for biblatex
+%% Interface for biblatex
 
+\newrobustcmd*{\@setquotesfcodes}{\csq@setsfcodes}
 \newcommand*{\@quotelevel}{}
 \let\@quotelevel\csq@qlevel
-
-\newrobustcmd*{\@setquotesfcodes}{%
-  \csq@setsfcodes}
-
 \newcommand*{\@ifquotemarker}{%
   \ifdim\lastskip=\csq@kernmarker\relax
     \expandafter\@firstoftwo
@@ -2029,26 +2003,26 @@
 %% Author interface to auto quotes
 
 \newrobustcmd*{\openautoquote}{%
-  \csq@ifmmode
+  \ifbool{mmode}
     {\csq@err@mmode\openautoquote}
     {\csq@oqopen}}
 
 \newrobustcmd*{\closeautoquote}{%
-  \csq@ifmmode
+  \ifbool{mmode}
     {\csq@err@mmode\closeautoquote}
     {\csq@qclose}}
 
 \newrobustcmd*{\openinnerquote}{%
-  \csq@ifmmode
+  \ifbool{mmode}
     {\csq@err@mmode\openinnerquote}
     {\csq@iqopen}}
 
 \newrobustcmd*{\closeinnerquote}{%
-  \csq@ifmmode
+  \ifbool{mmode}
     {\csq@err@mmode\closeinnerquote}
     {\csq@qclose}}
 
-\appto\csq@mkhyperref{%
+\appto\csq@hook@hyperref{%
   \def\openautoquote{\csq@pdf@ooqmark}%
   \def\closeautoquote{\csq@pdf@coqmark}%
   \def\openinnerquote{\csq@pdf@oiqmark}%
@@ -2112,6 +2086,33 @@
     \expandafter\csq@fixkern
   \fi}
 
+%% Ellipses
+
+\newrobustcmd*{\textelp}{%
+  \begingroup
+  \@ifstar
+    {\@tempswatrue\csq@textelp}
+    {\@tempswafalse\csq@textelp}}
+
+\long\def\csq@textelp#1{%
+  \ifblank{#1}
+    {\endgroup\mktextelp}
+    {\expandafter\endgroup\if@tempswa
+       \expandafter\mktextinselp
+     \else
+       \expandafter\mktextelpins
+     \fi
+     {#1}}}
+
+\newrobustcmd*{\textins}{%
+  \@ifstar\mktextmod\mktextins}
+
+\newcommand{\mktextelp}{[\textellipsis\unkern]}
+\newcommand{\mktextelpins}[1]{[\textellipsis\unkern] [#1]}
+\newcommand{\mktextinselp}[1]{[#1] [\textellipsis\unkern]}
+\newcommand{\mktextins}[1]{[#1]}
+\newcommand{\mktextmod}[1]{[#1]}
+
 %% Auxiliary commands for some styles
 
 % French
@@ -2171,43 +2172,54 @@
 % Core options
 
 \define@key{csq}{strict}[true]{%
-  \ifcsundef{csq@opt@strict@#1}
-    {\csq@err@opt{strict=#1}}
-    {\csuse{csq@opt@strict@#1}}}
-\def\csq@opt@strict@true{%
-  \csq@info{Enabling strict warnings}%
-  \let\csq@warning\csq@warning@strict}
-\def\csq@opt@strict@false{%
-  \csq@info{Disabling strict warnings}%
-  \let\csq@warning\csq@warning@loose}
+  \ifstrequal{#1}{true}
+    {\csq@info{Enabling strict warnings}%
+     \let\csq@warnorerr\csq@warning@strict}
+    {\csq@info{Disabling strict warnings}%
+     \let\csq@warnorerr\csq@warning@loose}}
 
-\define@key{csq}{babel}[true]{%
-  \ifcsundef{csq@opt@babel@#1}
-    {\csq@err@opt{babel=#1}}
-    {\csuse{csq@opt@babel@#1}}}
-\def\csq@opt@babel@false{%
-  \csq@info{Disabling multilingual support}%
+\define@key{csq}{autopunct}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\csq@autopunct\csq@allpunct}
+    {\let\csq@autopunct\@empty}}
+
+\define@key{csq}{style}{%
+  \csq@opt@autostyle@false
+  \DeclareQuoteAlias{#1}{default}}
+
+\define@key{csq}{autostyle}[true]{%
+  \ifcsdef{csq@opt@autostyle@#1}
+    {\csuse{csq@opt@autostyle@#1}}
+    {\csq@err@opt{autostyle=#1}}}
+\def\csq@opt@autostyle@false{%
+  \csq@info{Disabling multilingual quotes}%
   \csq@reset\z@}
-\def\csq@opt@babel@true{%
-  \csq@info{Enabling multilingual support}%
+\def\csq@opt@autostyle@true{%
+  \csq@info{Enabling multilingual quotes}%
   \csq@reset\@ne}
-\def\csq@opt@babel@try{%
+\def\csq@opt@autostyle@try{%
   \csq@reset\tw@}
-\def\csq@opt@babel@once{%
+\def\csq@opt@autostyle@once{%
   \csq@reset\thr@@}
-\def\csq@opt@babel@tryonce{%
+\def\csq@opt@autostyle@tryonce{%
   \csq@reset4\relax}
 
+\define@key{csq}{babel}[true]{%
+  \csq@warning{%
+    Option 'babel' depreciated.\MessageBreak
+    Using 'autostyle'}%
+  \setkeys{csq}{autostyle=#1}}
+
 \define@key{csq}{maxlevel}{%
-  \ifnum#1<2
-    \csq@err@opt{babel=#1}%
-  \else
-    \csq@maxlvl#1\relax
-  \fi}
+  \ifnumless{#1}\tw@
+    {\csq@err@opt{maxlevel=#1}}
+    {\csq@maxlvl#1\relax}}
 
-\define@key{csq}{style}{%
-  \csq@opt@babel@false
-  \DeclareQuoteAlias{#1}{default}}
+\define@key{csq}{version}{%
+  \ifdef\csq@getversion
+    {}
+    {\input{csq-compat.def}}%
+  \csq@getversion{#1}}
 
 %% Initial setup
 
@@ -2226,17 +2238,34 @@
 % Deferred last minute setup
 
 \AtEndPreamble{%
-  \providecommand*{\ifstringblank}{\ifblank}%
-  \@ifpackageloaded{babel}
-    {\csq@mkbabel}
-    {\csq@mknobabel}%
-  \undef\csq@mkbabel
-  \undef\csq@mknobabel
+  \ifnumgreater\csq@reset\z@
+    {\csq@info{Checking for multilingual support..}%
+     \@ifpackageloaded{polyglossia}
+       {\csq@info{... found 'polyglossia' package}%
+	\csq@warning
+	  {Using preliminary 'polyglossia' interface.\MessageBreak
+           Some of the multilingual features may not\MessageBreak
+	   work as expected\@gobble}%
+	\def\csq@main@language{\xpg@main@language}%
+	\csq@hook@multilang}
+       {\@ifpackageloaded{babel}
+	  {\csq@info{... found 'babel' package}%
+           \def\csq@main@language{\bbl@main@language}%
+           \csq@hook@multilang}
+	  {\csq@info{... none found}%
+           \csq@hook@nomultilang}}}
+    {\@ifpackageloaded{polyglossia}
+       {}
+       {\@ifpackageloaded{babel}
+	  {}
+	  {\csq@hook@nomultilang}}}%
+  \undef\csq@hook@multilang
+  \undef\csq@hook@nomultilang
   \@ifpackageloaded{hyperref}
     {\expandafter\pdfstringdefDisableCommands
-     \expandafter{\csq@mkhyperref}}
+     \expandafter{\csq@hook@hyperref}}
     {}%
-  \undef\csq@mkhyperref
+  \undef\csq@hook@hyperref
   \appto\@noligs{\@verbatimquotes}%
   \@ifpackageloaded{verbatim}
     {\addto@hook\every@verbatim{\@verbatimquotes}}
@@ -2288,6 +2317,7 @@
   \edef\csq@tempa{\endgroup
     \noexpand\setkeys{csq}{\CurrentOption}}%
   \csq@tempa}
+
 \ProcessOptions*
 
 \endinput
-- 
cgit v1.2.3