summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/csquotes
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-06-03 00:03:21 +0000
committerKarl Berry <karl@freefriends.org>2010-06-03 00:03:21 +0000
commited4b7e6d104db218c36f82e81edbcf3260befdbf (patch)
treee0fd631dae906579d45a0487e74cae8feedffb08 /Master/texmf-dist/tex/latex/csquotes
parent2a2fbc131c15823a6094173b0ae4b08d06500381 (diff)
csquotes 5.0 (2jun10)
git-svn-id: svn://tug.org/texlive/trunk@18701 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/csquotes')
-rw-r--r--Master/texmf-dist/tex/latex/csquotes/csq-compat.def106
-rw-r--r--Master/texmf-dist/tex/latex/csquotes/csquotes.cfg10
-rw-r--r--Master/texmf-dist/tex/latex/csquotes/csquotes.def58
-rw-r--r--Master/texmf-dist/tex/latex/csquotes/csquotes.sty876
4 files changed, 618 insertions, 432 deletions
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}
+% {<true>}{<false>}
-\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}
+% {<text>}{<true>}{<false>}
-\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}
+% {<true>}{<false>}
-\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}
+% {<text>}{<true>}{<false>}
-\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}}
+
+% {<character>}{<true>}{<false>}
+
+\newrobustcmd*{\ifpunctmark}[1]{%
+ \csq@ifsfcodes
+ {\ifbool{hmode}
+ {\ifnumequal{\sfcode`#1}\spacefactor}
+ {\@secondoftwo}}
+ {\csq@err@sfcodes\ifpunctmark
+ \@secondoftwo}}
+
+% {<text>}{<character>}{<true>}{<false>}
+
+\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
-% {<macro>}[<arg1>][<arg2>] =>
-% <macro>{\mkcitation}{<arg1>}{<arg2>}
+% {<macro>}[<cite>][<punct>] =>
+% <macro>{\mkcitation}{<cite>}{<punct>}
\def\csq@getcargs#1{%
\@ifnextchar[%]
@@ -894,8 +874,8 @@
\long\def\csq@getcargs@ii#1#2[#3]{%
#1{\mkcitation}{#2}{#3}}
-% {<macro>}[<arg1>][<arg2>]{<arg3>}[<arg4>] =>
-% <macro>{\mkccitation}{\csq@cite[<arg1>][<arg2>]{<arg3>}}{<arg4>}
+% {<macro>}[<pre>][<post>]{<key>}[<punct>] =>
+% <macro>{\mkccitation}{\csq@cite[<pre>][<post>]{<key>}}{<punct>}
\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}}
+% {<macro>}<punct> => <macro>{<apunct>}<tpunct>
+
+\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&#3{\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}}}}
-% {<init><macro>}{<hook>}{<cite>}{<punct>}{<text>}
+% {<init>}{<qopen>}{<citehook>}{<cite>}{<punct>}{<text>}
-\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}}}
+
+% {<init>}{<qopen>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\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}
+
+% {<qopen>}{<text>}{<qclose>}{<punct>}{<apunct>}{<cite>}
+
+\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{}}}
+
+% {<init>}{<citehook>}{<cite>}{<punct>}{<text>}
-\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}}}}
-% {<init>}{<hook>}{<cite>}{<punct>}{<text>}
+% {<init>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
\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
+
+% {<init>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\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}}
+% {<text>}{<punct>}{<apunct>}{<cite>}
-\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}
-% {<init>}{<hook>}{<cite>}{<punct>}
-
-\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}}
+% {<init>}{<citehook>}{<cite>}{<punct>}
-\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}
+ {}}}
+ {}}
+
+% {<punct>}{<cite>}
+
+\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}
-% {<init>}{<hook>}{<cite>}{<punct>}
-
-\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