summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/csquotes/csquotes.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/csquotes/csquotes.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/csquotes/csquotes.sty')
-rw-r--r--macros/latex/contrib/csquotes/csquotes.sty2467
1 files changed, 2467 insertions, 0 deletions
diff --git a/macros/latex/contrib/csquotes/csquotes.sty b/macros/latex/contrib/csquotes/csquotes.sty
new file mode 100644
index 0000000000..89ffabe7fd
--- /dev/null
+++ b/macros/latex/contrib/csquotes/csquotes.sty
@@ -0,0 +1,2467 @@
+% Copyright (c) 2003-2011 Philipp Lehman.
+% (c) 2015-2019 Joseph Wright.
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c or any later version.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{csquotes}
+ [2019/05/10 v5.2e context-sensitive quotations (JAW)]
+
+%% Compatibility and requirements
+
+\RequirePackage{etoolbox}
+\RequirePackage{keyval}
+
+\@ifpackagelater{etoolbox}{2008/06/28}
+ {}
+ {\PackageError{csquotes}
+ {Outdated 'etoolbox' package}
+ {Upgrade to etoolbox v1.7 (2008/06/28) or later.\MessageBreak
+ I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak
+ This is a fatal error. I'm aborting now.}
+ \endinput}
+
+\@ifpackageloaded{inputenc}
+ {}
+ {\AtEndPreamble{%
+ \@ifpackageloaded{inputenc}
+ {\csq@warn@loadfirst{inputenc}}
+ {}}}
+
+\@ifpackageloaded{inputenx}
+ {}
+ {\AtEndPreamble{%
+ \@ifpackageloaded{inputenx}
+ {\csq@warn@loadfirst{inputenx}}
+ {}}}
+
+\@ifpackageloaded{ucs}
+ {\let\csq@ifucs\@firstoftwo}
+ {\let\csq@ifucs\@secondoftwo
+ \AtEndPreamble{%
+ \@ifpackageloaded{ucs}
+ {\let\csq@ifucs\@firstoftwo}
+ {}}}
+
+\AtEndPreamble{%
+ \@ifpackageloaded{biblatex}
+ {\@ifpackagelater{biblatex}{2009/05/30}
+ {}
+ {\csq@error
+ {Outdated 'biblatex' package}
+ {Upgrade to biblatex v0.8d (2009/05/30) or later.\MessageBreak
+ I found: '\csuse{ver@biblatex.sty}'}}}
+ {}}
+
+%% Category codes
+
+\def\csq@catcodes{\do\~\do\&\do\:\do\"\do\<\do\>}
+\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
+\edef\csq@catcodes{\csq@catcodes}
+\let\do\noexpand
+
+\catcode`\~=\active
+\catcode`\&=3
+\@makeother\:
+\@makeother\"
+\@makeother\<
+\@makeother\>
+
+%% General
+
+\newtoggle{csq@tempsw}
+\newtoggle{csq@quiet}
+\newtoggle{csq@active}
+\newtoggle{csq@block}
+\newtoggle{csq@parbox}
+\newtoggle{csq@parthreshold}
+\newbool{csdisplay}
+
+\newcount\csq@reset
+\newcount\csq@gtype
+\newcount\csq@glevel
+\newcount\csq@qlevel
+\newcount\csq@maxlvl
+\newcount\csq@tshold
+
+\providecommand{\@gobblethree}[3]{}
+\providecommand{\@gobblefive}[5]{}
+\providecommand{\@gobbletwo@optarg}[2][]{}
+
+% {<item>}{<list>}{<separator>}
+
+\def\csq@addto@list#1{%
+ \expandafter\csq@addto@list@i\csname\string#1\endcsname}
+\def\csq@addto@list@i#1#2#3{%
+ \begingroup
+ \@tempswatrue
+ \def#3##1{\ifnum`#1=`##1\relax\@tempswafalse\fi}#2%
+ \expandafter\endgroup\if@tempswa
+ \appto#2{#3#1}%
+ \fi}
+
+% {<macro>}
+
+\def\csq@everypar#1{%
+ \let\csq@theeverypar#1%
+ \ifx\csq@theeverypar\@empty
+ \else
+ \csq@everypar@i
+ \fi}
+
+\def\csq@everypar@i{%
+ \leavevmode
+ \let\csq@new@everypar\everypar
+ \csq@ltx@everypar=\expandafter{\the\everypar}%
+ \csq@new@everypar={\the\csq@ltx@everypar\csq@theeverypar}%
+ \let\everypar\csq@ltx@everypar
+ \let\csq@everypar@i\relax}
+
+\newtoks\csq@ltx@everypar
+
+% Miscellaneous tests
+
+\newcommand*{\ifblockquote}{\iftoggle{csq@block}}
+
+\def\csq@ifsafeactives{%
+ \ifx\if@safe@actives\iftrue
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\csq@iftypeset{%
+ \ifx\protect\@typeset@protect
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\csq@ifstrings{%
+ \ifx\protect\string
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\csq@ifnested{%
+ \iftoggle{csq@block}
+ {\@firstoftwo}
+ {\ifnumgreater\csq@qlevel\z@}}
+
+% Parsers for UTF-8
+
+\def\csq@string#1{\csq@string@i#1&}
+\def\csq@string@i#1#2&{%
+ \string#1\ifblank{#2}{}{\csq@string@i#2&}}
+
+\def\csq@number#1{\csq@number@i#1&}
+\def\csq@number@i#1#2&{%
+ \number`#1 \ifblank{#2}{}{.\csq@number@i#2&}}
+
+\def\csq@utfprint#1{u8:\csq@utfprint@i#1&}
+\def\csq@utfprint@i#1#2&{%
+ \number`#1 \ifblank{#2}{}{:\csq@utfprint@i#2&}}
+
+% Grouping control
+
+\protected\def\csq@bqgroup{%
+ \begingroup\leavevmode
+ \csq@glevel\currentgrouplevel
+ \csq@gtype\currentgrouptype}
+
+\protected\def\csq@eqgroup{%
+ \ifnum\csq@gtype=\currentgrouptype
+ \ifnum\csq@glevel=\currentgrouplevel
+ \else
+ \csq@err@glevel
+ \fi
+ \else
+ \csq@err@gtype
+ \fi
+ \endgroup}
+
+\AtEndDocument{%
+ \ifnum\csq@qlevel>\z@
+ \csq@err@gleft
+ \fi}
+
+%% 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#1{%
+ \PackageWarning{csquotes}{#1}}
+
+\protected\def\csq@info#1{%
+ \iftoggle{csq@quiet}
+ {}
+ {\PackageInfo{csquotes}{#1\csq@noline}}}
+\let\csq@noline\@gobble
+\AtBeginDocument{\let\csq@noline\@empty}
+
+\protected\def\csq@logdebug#1{%
+ \begingroup
+ \def\MessageBreak{^^J(csquotes) \@spaces\@spaces\@spaces\space}%
+ \set@display@protect
+ \immediate\write\m@ne{Package csquotes Debug: #1\on@line.}%
+ \endgroup}
+
+\let\csq@debug\@gobble
+
+% Errors
+
+\protected\def\csq@errormark{%
+ \rule[0.25ex]{1.25ex}{1.25ex}}
+
+\protected\def\csq@eqerror{%
+ \csq@eqgroup
+ \csq@errormark}
+
+\protected\def\csq@mismatch#{%
+ \csq@errormark
+ \csq@err@mismatch}
+
+\protected\def\csq@err@mismatch#1{%
+ \csq@error
+ {Unbalanced groups or invalid nesting}
+ {#1}}
+
+\protected\def\csq@err@mmode#1{%
+ \csq@error
+ {'\string#1' invalid in math mode}
+ {This command may not be used in math mode}}
+
+\protected\def\csq@err@undef#1{%
+ \csq@error
+ {'\string#1' not defined}
+ {This command or environment environment appears to
+ be\MessageBreak undefined}}
+
+\protected\def\csq@err@opt#1{%
+ \csq@error
+ {Option '#1' invalid}
+ {The option you have supplied is invalid. See the csquotes
+ 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{%
+ I have detected a group level mismatch. Verify that all
+ groups\MessageBreak and all active quotes are properly
+ balanced and nested. If you\MessageBreak continue, I
+ will write a summary of all previously opened
+ groups\MessageBreak to the transcript file}%
+ \showgroups}
+
+\protected\def\csq@err@gtype{%
+ \csq@mismatch{%
+ I have detected a group type mismatch. Verify that all
+ groups\MessageBreak and all active quotes are properly
+ balanced and nested. If you\MessageBreak continue, I
+ will write a summary of all previously opened
+ groups\MessageBreak to the transcript file}%
+ \showgroups}
+
+\protected\def\csq@err@gleft{%
+ \csq@err@mismatch{%
+ Still \number\csq@qlevel\space quote\ifnum\csq@qlevel>\@ne s\fi
+ \space open. If you continue, I will write a summary\MessageBreak
+ of all previously opened groups to the transcript file}%
+ \showgroups}
+
+\protected\def\csq@err@alloc{%
+ \csq@error
+ {Invalid argument}
+ {One of the arguments you have supplied is already allocated
+ as\MessageBreak active quote or delimiter}}
+
+\protected\def\csq@err@char{%
+ \csq@error
+ {Invalid argument}
+ {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 LaTeX's syntax or reserved\MessageBreak
+ for a specific purpose are invalid}}
+
+\protected\def\csq@err@utf{%
+ \csq@error
+ {Invalid argument}
+ {Only valid UTF-8 sequences representing a single
+ character\MessageBreak may be allocated as active quotes}}
+
+\protected\def\csq@err@nbquote{%
+ \csq@mismatch{%
+ You have nested a \@backslashchar blockquote. Block quotation
+ commands\MessageBreak may only be used on quotation level 0}}%
+
+\protected\def\csq@err@patch#1{%
+ \csq@error
+ {Patching #1 failed}
+ {This is an internal issue typically caused by a
+ conflict\MessageBreak between csquotes and some
+ other package. Modifying\MessageBreak the package
+ loading order may fix the problem}}
+
+\protected\def\csq@err@ucs{%
+ \csq@error
+ {ucs package not supported}
+ {The ucs package is not supported. If you want to use
+ UTF-8\MessageBreak encoded active quotes, try
+ '\string\usepackage[utf8]{inputenc}'.\MessageBreak
+ If you continue now, I will reject all UTF-8 encoded
+ arguments\MessageBreak as invalid}}
+
+% Warnings
+
+\protected\def\csq@warn@loadfirst#1{%
+ \csq@warnorerr
+ {Load '#1' before 'csquotes'}
+ {'#1' package loaded too late}
+ {Always load '#1' before 'csquotes'}}
+
+\protected\def\csq@warn@multilang#1{%
+ \csq@warnorerr
+ {No multilingual support.\MessageBreak #1}
+ {#1}
+ {Multilingual support does not seem to be available.\MessageBreak
+ Try loading the 'babel' or the 'polyglossia' package}}
+
+\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@warnorerr
+ {'\string#1' invalid at this point.\MessageBreak
+ Ignoring command}
+ {'\string#1' invalid at this point}
+ {This command may not be used at this particular
+ point.\MessageBreak See the manual of the 'csquotes'
+ package for details}}
+
+\protected\def\csq@warn@sfcodes#1{%
+ \csq@warnorerr
+ {No space factor codes for '#1' encoding.\MessageBreak
+ Punctuation tracker may fail}
+ {Punctuation tracker may fail at this point}
+ {No space factor codes for '#1' encoding.
+ See \string\DeclareQuoteGlyph\MessageBreak
+ in the 'csquotes' manual for details}}
+
+%% Outer quotations
+
+\protected\def\csq@oqmark{%
+ \csq@bqgroup
+ \ifnum\csq@qlevel>\z@
+ \csq@mismatch{%
+ Level 1 quote invalid at this point.
+ The current level is \number\csq@qlevel}%
+ \advance\csq@qlevel\@ne
+ \let\csq@oqmark\csq@eqerror
+ \else
+ \csq@qlevel\@ne
+ \let\csq@oqmark\csq@qclose
+ \expandafter\csq@qopen
+ \fi}
+
+%% Inner quotations
+
+\protected\def\csq@iqmark{%
+ \csq@bqgroup
+ \ifnum\csq@qlevel>\@ne
+ \csq@mismatch{%
+ Level 2 quote invalid at this point.
+ The current level is \number\csq@qlevel}%
+ \advance\csq@qlevel\@ne
+ \let\csq@iqmark\csq@eqerror
+ \else
+ \csq@qlevel\tw@
+ \let\csq@iqmark\csq@qclose
+ \expandafter\csq@qopen
+ \fi}
+
+%% Nestable quotations
+
+\protected\def\csq@oqopen{%
+ \csq@bqgroup
+ \csq@oqopen@i}
+
+\def\csq@oqopen@i{%
+ \advance\csq@qlevel\@ne
+ \csq@qopen}
+
+\protected\def\csq@iqopen{%
+ \csq@bqgroup
+ \csq@iqopen@i}
+
+\def\csq@iqopen@i{%
+ \ifnum\csq@qlevel=\z@
+ \advance\csq@qlevel\tw@
+ \else
+ \advance\csq@qlevel\@ne
+ \fi
+ \csq@qopen}
+
+%% Opening marks
+
+\def\csq@qopen{%
+ \ifnum\csq@qlevel>\csq@maxlvl
+ \csq@mismatch{%
+ Level \number\csq@qlevel\space quote invalid at this point.
+ The maximum level is \number\csq@maxlvl}%
+ \else
+ \csq@resetstyle
+ \csq@init
+ \csq@addkern@open
+ \ifodd\csq@qlevel
+ \let\csq@kernchar@i\csq@thequote@oopen
+ \csq@thequote@oopen
+ \else
+ \let\csq@kernchar@i\csq@thequote@iopen
+ \csq@thequote@iopen
+ \fi
+ \csq@setmarker@open
+ \expandafter\csq@fixkern
+ \fi}
+
+%% Closing marks
+
+\protected\def\csq@qclose{%
+ \csq@qclose@i{}}
+
+\def\csq@qclose@i{%
+ \ifnum\csq@qlevel=\z@
+ \csq@mismatch{%
+ Cannot close any quote. The current level is 0}%
+ \else
+ \ifnum\csq@qlevel>\csq@maxlvl
+ \csq@eqerror
+ \else
+ \expandafter\expandafter
+ \expandafter\csq@qclose@ii
+ \fi
+ \fi}
+
+\def\csq@qclose@ii#1{%
+ \ifdim\lastkern=\csq@omitmarker
+ #1\csq@eqgroup
+ \else
+ \csq@addkern@close
+ \ifodd\csq@qlevel
+ \csq@thequote@oclose
+ \let\csq@kernchar@i\csq@thequote@oclose
+ \else
+ \csq@thequote@iclose
+ \let\csq@kernchar@i\csq@thequote@iclose
+ \fi
+ \ifnum\csq@qlevel>\@ne
+ \csq@setmarker@close
+ \fi
+ \ifblank{#1}{}{\expandafter#1}%
+ \expandafter\csq@eqgroup
+ \expandafter\def
+ \expandafter\csq@kernchar@i
+ \expandafter{\csq@kernchar@i}%
+ \expandafter\csq@fixkern
+ \fi}
+
+%% Style initialization
+
+\def\csq@init{%
+ \csq@setsfcodes
+ \ifodd\csq@qlevel
+ \csq@thequote@oinit
+ \csq@everypar\csq@thequote@omiddle
+ \else
+ \csq@thequote@iinit
+ \csq@everypar\csq@thequote@imiddle
+ \fi
+ \csq@init@kern{open}{o}{i}%
+ \csq@init@kern{close}{i}{o}}
+
+\def\csq@init@kern#1#2#3{%
+ \begingroup
+ \settowidth{\@tempdima}{%
+ \csuse{csq@thequote@#2#1}%
+ \csuse{csq@thequote@#3#1}}%
+ \settowidth{\@tempdimb}{%
+ \csuse{csq@thequote@#2#1}\unkern
+ \csuse{csq@thequote@#3#1}}%
+ \ifdim\@tempdima=\@tempdimb
+ \let\csq@tempa\endgroup
+ \else
+ \edef\csq@tempa{\endgroup
+ \csdef{csq@thekern@#1}{%
+ \the\dimexpr\@tempdima-\@tempdimb\relax}}%
+ \fi
+ \csq@tempa}
+
+\def\blx@hook@parboxrestore{%
+ \let\csq@theeverypar\@empty
+ \csq@qlevel\z@
+ \toggletrue{csq@parbox}%
+ \togglefalse{csq@block}}
+
+\protected\def\blx@parboxrestore{%
+ \ifx\protect\noexpand % \@outputpage
+ \else
+ \blx@hook@parboxrestore
+ \fi}
+
+\appto\@parboxrestore{\blx@parboxrestore}
+
+%% Restore kerning
+
+\def\csq@fixkern{%
+ \expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \expandafter\csq@fixkern@i}
+
+\def\csq@fixkern@i{%
+ \futurelet\csq@kernchar@ii\csq@fixkern@ii}
+
+\def\csq@fixkern@ii{%
+ \ifcat a\noexpand\csq@kernchar@ii
+ \expandafter\csq@fixkern@iii
+ \else
+ \ifcat 1\noexpand\csq@kernchar@ii
+ \expandafter\expandafter
+ \expandafter\csq@fixkern@iii
+ \fi
+ \fi}
+
+\def\csq@fixkern@iii{%
+ \begingroup
+ \settowidth{\@tempdima}{%
+ \csq@kernchar@i\csq@kernchar@ii}%
+ \settowidth{\@tempdimb}{%
+ \csq@kernchar@i\kern\z@\csq@kernchar@ii}%
+ \ifdim\@tempdima=\@tempdimb
+ \else
+ \addtolength{\@tempdima}{-\@tempdimb}%
+ \penalty\@M\hskip\@tempdima\relax
+ \fi
+ \endgroup}
+
+%% Detect and kern adjoining quotes
+
+\def\csq@kernmarker{13sp}
+\def\csq@omitmarker{17sp}
+\let\csq@themarker\csq@kernmarker
+\def\csq@thekern@open{\csq@thequote@kern}
+\def\csq@thekern@close{\csq@thequote@kern}
+\def\csq@thequote@kern{0.1em}
+
+\def\csq@setmarker@open{%
+ \penalty\@M
+ \hskip-\csq@themarker\relax
+ \hskip\csq@themarker\relax}
+
+\def\csq@setmarker@close{%
+ \kern-\csq@themarker\relax
+ \kern\csq@themarker\relax}
+
+\def\csq@addkern@open{%
+ \ifdim\lastskip=\csq@kernmarker
+ \unskip\unskip\unpenalty
+ \unkern % EC fix
+ \ifdim\csq@thekern@open=\z@
+ \else
+ \penalty\@M\hskip\csq@thekern@open\relax
+ \fi
+ \fi}
+
+\def\csq@addkern@close{%
+ \ifdim\lastkern=\csq@kernmarker
+ \unkern\unkern
+ \ifdim\csq@thekern@close=\z@
+ \else
+ \penalty\@M\hskip\csq@thekern@close\relax
+ \fi
+ \fi}
+
+%% Punctuation
+
+% 1001 apostrophe (biblatex only)
+% 1002 abbreviation dot (biblatex only)
+% 1003/1250 comma
+% 1004/1500 semicolon
+% 1005/2000 colon
+% 1006/3000 period
+% 1007/3001 exclamation mark
+% 1008/3002 question mark
+% 1009 suppress punctuation (biblatex only)
+
+\mathchardef\csq@sf@comma=1003
+\mathchardef\csq@sf@semicolon=1004
+\mathchardef\csq@sf@colon=1005
+\mathchardef\csq@sf@period=1006
+\mathchardef\csq@sf@exclam=1007
+\mathchardef\csq@sf@question=1008
+\mathchardef\csq@sf@threshold@low=1002
+\mathchardef\csq@sf@threshold@term=1005
+\mathchardef\csq@sf@threshold@high=1009
+
+\def\csq@setsfcodes{%
+ \ifcsdef{csq@sfcodes@\f@encoding}
+ {\csuse{csq@sfcodes@\f@encoding}}
+ {\csq@warn@sfcodes\f@encoding}%
+ \sfcode`\)=\z@
+ \sfcode`\]=\z@
+ \ifnum\sfcode`\.>2000
+ \csq@setencodes
+ \else
+ \csq@setfrcodes
+ \fi
+ \let\frenchspacing\csq@setfrcodes
+ \let\nonfrenchspacing\csq@setencodes
+ \let\csq@setsfcodes\relax}
+
+\def\csq@ifsfcodes{%
+ \ifnumequal\csq@sf@question
+ {\ifcsdef{csq@sfactor@\the\sfcode`\?}
+ {\csuse{csq@sfactor@\the\sfcode`\?}}
+ {\sfcode`\?}}}
+
+\def\csq@setfrcodes{%
+ \ifnum\sfcode`\A=\@m
+ \else
+ \csq@setazcodes
+ \fi
+ \sfcode`\,=1003
+ \sfcode`\;=1004
+ \sfcode`\:=1005
+ \sfcode`\.=1006
+ \sfcode`\!=1007
+ \sfcode`\?=1008
+}
+
+\def\csq@setencodes{%
+ \sfcode`\,=1250
+ \sfcode`\;=1500
+ \sfcode`\:=2000
+ \sfcode`\.=3000
+ \sfcode`\!=3001
+ \sfcode`\?=3002
+}
+
+\begingroup
+\let\csq@setazcodes\@empty
+\def\csq@tempa{%
+ \xdef\csq@setazcodes{\csq@setazcodes\sfcode\the\@tempcnta=\@m}
+ \ifnum\@tempcnta<\@tempcntb
+ \advance\@tempcnta\@ne
+ \expandafter\csq@tempa
+ \fi}
+\@tempcnta`\A
+\@tempcntb`\Z
+\csq@tempa
+\ifnum\inputlineno=\m@ne\else
+ \@tempcnta"80
+ \@tempcntb"9C
+ \csq@tempa
+ \@tempcnta"C0
+ \@tempcntb"DF
+ \csq@tempa
+\fi
+\endgroup
+
+\csdef{csq@sfactor@1250}{1003}
+\csdef{csq@sfactor@1500}{1004}
+\csdef{csq@sfactor@2000}{1005}
+\csdef{csq@sfactor@3000}{1006}
+\csdef{csq@sfactor@3001}{1007}
+\csdef{csq@sfactor@3002}{1008}
+
+\def\csq@spacefactor{%
+ \ifhmode
+ \ifcsdef{csq@sfactor@\the\spacefactor}
+ {\csuse{csq@sfactor@\the\spacefactor}}
+ {\the\spacefactor}%
+ \else
+ 1000%
+ \fi}
+
+% {<true>}{<false>}
+
+\newcommand*{\ifpunct}{%
+ \csq@ifsfcodes
+ {\ifnumgreater\csq@spacefactor\csq@sf@threshold@low
+ {\ifnumless\csq@spacefactor\csq@sf@threshold@high}
+ {\@secondoftwo}}
+ {\csq@err@sfcodes\ifpunct
+ \@secondoftwo}}
+
+% {<text>}{<true>}{<false>}
+
+\newrobustcmd*{\iftextpunct}[1]{%
+ \csq@ifpuncttest{#1}{\ifpunct}}
+
+% {<true>}{<false>}
+
+\newcommand*{\ifterm}{%
+ \csq@ifsfcodes
+ {\ifnumgreater\csq@spacefactor\csq@sf@threshold@term
+ {\ifnumless\csq@spacefactor\csq@sf@threshold@high}
+ {\@secondoftwo}}
+ {\csq@err@sfcodes\ifterm
+ \@secondoftwo}}
+
+% {<text>}{<true>}{<false>}
+
+\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}}
+
+%% Multilingual interface
+
+\def\csq@setstyle#1{%
+ \begingroup
+ \let\if@safe@actives\iftrue
+ \ifcsdef{csq@qstyle@#1}
+ {\edef\csq@tempa{\endgroup
+ \def\noexpand\csq@currentstyle{#1}%
+ \noexpand\csuse{csq@qstyle@#1}}%
+ \csq@tempa}
+ {\csq@warnorerr
+ {Quote style '#1' not defined.\MessageBreak Ignoring command}
+ {Quote style '#1' not defined}
+ {Define the style or alias first}
+ \endgroup}}
+
+\def\csq@resetstyle{%
+ \ifnum\csq@reset=\@ne
+ \ifx\csq@currentstyle\languagename
+ \else
+ \ifcsundef{csq@qstyle@\languagename}
+ {\csq@warn@style\languagename
+ \csq@setstyle{fallback}}
+ {\csq@setstyle{\languagename}}%
+ \fi
+ \fi}
+
+\def\csq@savelang{%
+ \ifdef\csq@mainlang
+ {}
+ {\edef\csq@mainlang{\languagename}}}
+
+\def\csq@resetlang{%
+ \ifdef\csq@mainlang
+ {\csuse{otherlanguage*}{\csq@mainlang}%
+ \let\csq@resetlang\relax}
+ {}}
+
+\protected\long\def\csq@switchlang#1{%
+ \ifdef\csq@mainlang
+ {\begingroup
+ \csuse{otherlanguage*}{\csq@mainlang}%
+ #1%
+ \csuse{endotherlanguage*}%
+ \endgroup}
+ {#1}}
+
+% \lowercase: workaround for page headers of book.cls et al.
+
+\def\csq@lang#1{%
+ \csq@savelang
+ \lowercase{\csuse{otherlanguage*}{#1}}}
+\def\csq@endlang{%
+ \csuse{endotherlanguage*}}
+
+\def\csq@nolang#1{%
+ \begingroup
+ \lowercase{\def\csq@tempa{#1}}%
+ \csq@warn@multilang{Cannot switch to language '\csq@tempa'}%
+ \endgroup}
+
+\def\csq@hyph#1{%
+ \csq@savelang
+ \lowercase{\csq@hyphenrules{#1}}}
+\let\csq@endhyph\@empty
+
+\def\csq@nohyph#1{%
+ \begingroup
+ \lowercase{\def\csq@tempa{#1}}%
+ \csq@warn@multilang{No hyphenation rules for '\csq@tempa'}%
+ \endgroup}
+
+\def\csq@hyphenrules#1{%
+ \language\csname l@#1\endcsname\relax
+ \ifcsundef{#1hyphenmins}
+ {\csq@sethyphenmins\tw@\thr@@}
+ {\expandafter\expandafter\expandafter\csq@sethyphenmins
+ \csname#1hyphenmins\endcsname}}
+
+\def\csq@sethyphenmins#1#2{%
+ \lefthyphenmin#1\relax
+ \righthyphenmin#2\relax}
+
+\appto\csq@hook@multilang{%
+ \appto\blx@hook@parboxrestore{\csq@resetlang}%
+ \ifundef\l@usenglish
+ {\ifundef\l@USenglish
+ {}
+ {\let\l@usenglish\l@USenglish}}
+ {}%
+ \ifundef\l@ukenglish
+ {\ifundef\l@UKenglish
+ {}
+ {\let\l@ukenglish\l@UKenglish}}
+ {}%
+ \ifcase\csq@reset
+ \or
+ \or
+ \csq@info{Enabling multilingual quotes}%
+ \csq@reset\@ne
+ \else
+ \csq@info{Adjusting default style}%
+ \ifcsdef{csq@qstyle@\csq@main@language}
+ {\DeclareQuoteAlias{\csq@main@language}{default}}
+ {\csq@warn@style\csq@main@language
+ \DeclareQuoteAlias{fallback}{default}}%
+ \fi}
+
+\appto\csq@hook@nomultilang{%
+ \ifcase\csq@reset
+ \or
+ \csq@warn@multilang{Cannot enable multilingual quotes}%
+ \or
+ \or
+ \csq@warn@multilang{Cannot adjust default style}%
+ \fi
+ \csq@reset\z@
+ \let\csq@hyph\csq@nohyph
+ \let\csq@endhyph\@empty
+ \let\csq@lang\csq@nolang
+ \let\csq@endlang\@empty
+ \let\csq@switchlang\@firstofone
+ \def\csq@resetqstyle{%
+ \csq@warn@multilang{Cannot enable multilingual quotes}}}
+
+%% Markup with control sequences
+
+% Argument parsers
+
+% {<macro>}[<cite>][<punct>] =>
+% <macro>{\mkcitation}{<cite>}{<punct>}
+
+\def\csq@getcargs#1{%
+ \@ifnextchar[%]
+ {\csq@getcargs@i{#1}}
+ {\csq@getcargs@i{#1}[]}}
+
+\long\def\csq@getcargs@i#1[#2]{%
+ \@ifnextchar[%]
+ {\csq@getcargs@ii{#1}{#2}}
+ {\csq@getcargs@ii{#1}{#2}[]}}
+
+\long\def\csq@getcargs@ii#1#2[#3]{%
+ #1{\mkcitation}{#2}{#3}}
+
+% {<macro>}[<pre>][<post>]{<key>}[<punct>] =>
+% <macro>{\mkccitation}{\csq@cite[<pre>][<post>]{<key>}}{<punct>}
+
+\def\csq@getccargs#1{%
+ \@ifnextchar[%]
+ {\csq@getccargs@i{#1}{}}
+ {\csq@getccargs@ii{#1}{}}}
+
+\long\def\csq@getccargs@i#1#2[#3]{%
+ \@ifnextchar[%]
+ {\csq@getccargs@i{#1}{#2[{#3}]}}
+ {\csq@getccargs@ii{#1}{#2[{#3}]}}}
+
+\long\def\csq@getccargs@ii#1#2#3{%
+ \@ifnextchar[%]
+ {\csq@getccargs@iii{#1}{#2}{#3}}
+ {\csq@getccargs@iii{#1}{#2}{#3}[]}}
+
+\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
+ \ifx#1\@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
+ \ifx#1\@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{}}
+ {\def\csq@autopunct{#1}}}
+
+\let\csq@autopunct\@empty
+\def\csq@allpunct{.,;:!?}
+
+\AfterEndPreamble{% babel
+ \begingroup
+ \makeatletter
+ \endlinechar\m@ne
+ \edef\csq@tempa{%
+ \noexpand\scantokens{%
+ \gdef\noexpand\csq@autopunct{\csq@autopunct}%
+ \gdef\noexpand\csq@allpunct{\csq@allpunct}}}%
+ \csq@tempa
+ \endgroup}
+
+% Plain quotes
+
+\newrobustcmd*{\enquote}{%
+ \@ifstar{\csq@quote@ii{}{}}{\csq@quote@i{}{}}}
+
+% {<init>}{<endinit>}{<text>}
+
+\long\def\csq@quote@i#1#2#3{%
+ \csq@bqgroup#1\csq@oqopen@i#3\csq@qclose@i{#2}}
+\long\def\csq@quote@ii#1#2#3{%
+ \csq@bqgroup#1\csq@iqopen@i#3\csq@qclose@i{#2}}
+
+% Plain quotes + language switching
+
+\newrobustcmd*{\foreignquote}{%
+ \@ifstar\csq@fquote@ii\csq@fquote@i}
+
+\def\csq@fquote@i#1{\csq@quote@i{\csq@lang{#1}}{\csq@endlang}}
+\def\csq@fquote@ii#1{\csq@quote@ii{\csq@lang{#1}}{\csq@endlang}}
+
+\newrobustcmd*{\hyphenquote}{%
+ \@ifstar\csq@hquote@ii\csq@hquote@i}
+
+\def\csq@hquote@i#1{\csq@quote@i{\csq@hyph{#1}}{\csq@endhyph}}
+\def\csq@hquote@ii#1{\csq@quote@ii{\csq@hyph{#1}}{\csq@endhyph}}
+
+% PDF strings
+
+\long\def\csq@pdf@quote#1{%
+ \if#1*\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\csq@pdf@quote@ii}
+ {\csq@pdf@quote@i{#1}}}
+
+\long\def\csq@pdf@quote@i#1{%
+ \csq@pdf@ooqmark #1\csq@pdf@coqmark}
+\long\def\csq@pdf@quote@ii#1{%
+ \csq@pdf@oiqmark #1\csq@pdf@ciqmark}
+
+\long\def\csq@pdf@fquote#1{%
+ \if#1*\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\expandafter\csq@pdf@quote@ii\@gobble}
+ {\csq@pdf@quote@i}}
+
+\appto\csq@hook@hyperref{%
+ \let\enquote\csq@pdf@quote
+ \let\foreignquote\csq@pdf@fquote
+ \let\hyphenquote\csq@pdf@fquote}
+
+% Text quotes
+
+\newrobustcmd*{\textquote}{%
+ \@ifstar
+ {\csq@getcargs{\csq@tquote{}{}{\csq@iqopen@i}}}
+ {\csq@getcargs{\csq@tquote{}{}{\csq@oqopen@i}}}}
+
+% {<init>}{<endinit>}{<qopen>}{<citehook>}{<cite>}{<punct>}{<text>}
+
+\long\def\csq@tquote#1#2#3#4#5#6#7{%
+ \csq@getpunct{\csq@tquote@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}}}
+
+% {<init>}{<endinit>}{<qopen>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\long\def\csq@tquote@i#1#2#3#4#5#6#7#8#9{%
+ \begingroup
+ \csq@setsfcodes
+ \edef\csq@tempa{%
+ \unexpanded{%
+ \mktextquote
+ {#3}%
+ {#7}%
+ {\csq@qclose@i{#2}}%
+ {#6}{#8}}%
+ {\ifblank{#5}
+ {}
+ {\unexpanded{\csq@switchlang{#4{#5}}}}}}%
+ \csq@bqgroup#1\csq@tempa#9%
+ \endgroup}
+
+% {<qopen>}{<text>}{<qclose>}{<punct>}{<apunct>}{<cite>}
+
+\newcommand{\mktextquote}[6]{#1#2#4#3#6#5}
+
+% Text quotes + language switching
+
+\newrobustcmd*{\foreigntextquote}{%
+ \@ifstar\csq@ftquote@ii\csq@ftquote@i}
+
+\def\csq@ftquote@i#1{%
+ \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@oqopen@i}}}
+\def\csq@ftquote@ii#1{%
+ \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@iqopen@i}}}
+
+\newrobustcmd*{\hyphentextquote}{%
+ \@ifstar\csq@htquote@ii\csq@htquote@i}
+
+\def\csq@htquote@i#1{%
+ \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@oqopen@i}}}
+\def\csq@htquote@ii#1{%
+ \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@iqopen@i}}}
+
+% Integrated text quotes
+
+\newrobustcmd*{\textcquote}{%
+ \@ifstar
+ {\csq@getccargs{\csq@tquote{}{}{\csq@iqopen@i}}}
+ {\csq@getccargs{\csq@tquote{}{}{\csq@oqopen@i}}}}
+
+% Integrated text quotes + language switching
+
+\newrobustcmd*{\foreigntextcquote}{%
+ \@ifstar\csq@ftcquote@ii\csq@ftcquote@i}
+
+\def\csq@ftcquote@i#1{%
+ \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@oqopen@i}}}
+\def\csq@ftcquote@ii#1{%
+ \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@iqopen@i}}}
+
+\newrobustcmd*{\hyphentextcquote}{%
+ \@ifstar\csq@htcquote@ii\csq@htcquote@i}
+
+\def\csq@htcquote@i#1{%
+ \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@oqopen@i}}}
+\def\csq@htcquote@ii#1{%
+ \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@iqopen@i}}}
+
+% PDF strings
+
+\appto\csq@hook@hyperref{%
+ \def\textquote{\pdfstringdefWarn\textquote}%
+ \def\foreigntextquote{\pdfstringdefWarn\foreigntextquote}%
+ \def\hyphentextquote{\pdfstringdefWarn\hyphentextquote}%
+ \def\textcquote{\pdfstringdefWarn\textcquote}%
+ \def\foreigntextcquote{\pdfstringdefWarn\foreigntextcquote}%
+ \def\hyphentextcquote{\pdfstringdefWarn\hyphentextcquote}}
+
+% Block quotes
+
+\newrobustcmd*{\blockquote}{%
+ \csq@getcargs{\csq@bquote{}{}}}
+
+% {<init>}{<endinit>}{<citehook>}{<cite>}{<punct>}{<text>}
+
+\long\def\csq@bquote#1#2#3#4#5#6{%
+ \csq@ifnested
+ {\csq@err@nbquote}
+ {\csq@getpunct{%
+ \ifboolexpr{ bool {inner} and bool {hmode} }
+ {\csq@bquote@ii}
+ {\ifbool{csdisplay}
+ {\csq@bquote@i}
+ {\iftoggle{csq@parbox}\csq@bquote@ii\csq@bquote@i}}%
+ {#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+% {<init>}{<endinit>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\long\def\csq@bquote@i#1#2#3#4#5#6{%
+ \begingroup
+ \blockquote@prehook
+ \togglefalse{csq@tempsw}%
+ \setbox\@tempboxa=\vbox{%
+ \csuse{csq@bcount@\csq@thresholdtype}%
+ \parindent\z@
+ \blockquote@parsehook
+ #1#6#5#2\endgraf\expandafter}\expandafter
+ \@tempcnta\number\prevgraf\relax
+ \iftoggle{csq@tempsw}
+ {\csq@debug{%
+ \@backslashchar blockquote has \number\@tempcnta\space
+ \csq@thresholdtype\space and manual breaks.\MessageBreak
+ Setting as display}}
+ {\ifnumgreater\@tempcnta\csq@tshold
+ {\toggletrue{csq@tempsw}}
+ {}%
+ \csq@debug{%
+ \@backslashchar blockquote has \number\@tempcnta\space
+ \csq@thresholdtype. Threshold is \number\csq@tshold.\MessageBreak
+ Setting \iftoggle{csq@tempsw}{as display}{inline}}}%
+ \blockquote@posthook
+ \iftoggle{csq@tempsw}
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup
+ \csq@bquote@iii\csq@bquote@ii{#1}{#2}{#3}{#4}{#5}{#6}}
+
+\def\csq@bcount@lines{%
+ \iftoggle{csq@parthreshold}
+ {\def\par{\global\toggletrue{csq@tempsw}\@@par}%
+ \let\newline\par
+ \let\\\par}
+ {}%
+ \parfillskip\z@\@plus1fil\relax}
+
+\def\csq@bcount@words{%
+ \iftoggle{csq@parthreshold}
+ {\def\par{\global\toggletrue{csq@tempsw}\space}%
+ \let\newline\par
+ \let\\\par}
+ {\let\par\space
+ \let\newline\space
+ \let\\\space}%
+ \let\nobreakspace\space
+ \let~\space
+ \hsize\z@
+ \hyphenpenalty\@M
+ \exhyphenpenalty\csq@splitcomp
+ \relpenalty\@M
+ \binoppenalty\@M
+ \let\allowbreak\relax
+ \hfuzz\maxdimen}
+
+\newcommand*{\blockquote@prehook}{%
+ \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+ \edef\csq@tempa{\cl@@ckpt}%
+ \let\@elt\relax
+ \@fileswfalse}
+
+\newcommand*{\blockquote@posthook}{%
+ \csq@tempa}
+
+\newcommand*{\blockquote@parsehook}{%
+ \let\csq@nbgobble\@gobble
+ \let\csq@bquote\@gobblefive
+ \let\csq@warnorerr\@gobblethree
+ \let\csq@error\@gobbletwo
+ \let\csq@warning\@gobble
+ \let\csq@info\@gobble
+ \def\textelp{\@ifstar\@gobble\@gobble}%
+ \let\textins\textelp
+ \let\marginpar\@gobbletwo@optarg
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble}
+
+\newrobustcmd*{\BlockquoteDisable}{%
+ \gappto\blockquote@parsehook}
+
+\let\csq@nbgobble\@firstofone
+
+% {<init>}{<endinit>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\def\csq@bquote@ii#1#2{\csq@tquote@i{#1}{#2}{\csq@oqopen@i}}
+
+% {<init>}{<endinit>}{<citehook>}{<cite>}{<punct>}{<text>}{<apunct>}<tpunct>
+
+\long\def\csq@bquote@iii#1#2#3#4#5#6#7#8{%
+ \begin{\csq@blockenvironment}%
+ \toggletrue{csq@block}%
+ \csq@setsfcodes
+ \edef\csq@tempa{%
+ \unexpanded{%
+ \mkblockquote
+ {#6}%
+ {#5}{#7}}%
+ {\ifblank{#4}
+ {}
+ {\unexpanded{\csq@switchlang{#3{#4}}}}}}%
+ #1\csq@tempa#8#2%
+ \end{\csq@blockenvironment}}
+
+% {<text>}{<punct>}{<apunct>}{<cite>}
+
+\newcommand{\mkblockquote}[4]{#1#2#4#3}
+
+% Block quotes + language switching
+
+\newrobustcmd*{\foreignblockquote}[1]{%
+ \csq@getcargs{\csq@bquote{\csq@lang{#1}}{\csq@endlang}}}
+
+\newrobustcmd*{\hyphenblockquote}[1]{%
+ \csq@getcargs{\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}}}
+
+\newrobustcmd*{\hybridblockquote}[1]{%
+ \csq@getcargs{%
+ \csq@bquote
+ {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+ {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}}}
+
+% Integrated block quotes
+
+\newrobustcmd*{\blockcquote}{%
+ \csq@getccargs{\csq@bquote{}{}}}
+
+% Integrated block quotes + language switching
+
+\newrobustcmd*{\foreignblockcquote}[1]{%
+ \csq@getccargs{\csq@bquote{\csq@lang{#1}}{\csq@endlang}}}
+
+\newrobustcmd*{\hyphenblockcquote}[1]{%
+ \csq@getccargs{\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}}}
+
+\newrobustcmd*{\hybridblockcquote}[1]{%
+ \csq@getccargs{%
+ \csq@bquote
+ {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+ {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}}}
+
+% PDF strings
+
+\appto\csq@hook@hyperref{%
+ \def\blockquote{\pdfstringdefWarn\blockquote}%
+ \def\foreignblockquote{\pdfstringdefWarn\foreignblockquote}%
+ \def\hyphenblockquote{\pdfstringdefWarn\hyphenblockquote}%
+ \def\blockcquote{\pdfstringdefWarn\blockcquote}%
+ \def\foreignblockcquote{\pdfstringdefWarn\foreignblockcquote}%
+ \def\hyphenblockcquote{\pdfstringdefWarn\hyphenblockcquote}}
+
+% Display quotes
+
+\newenvironment*{displayquote}
+ {\csq@getcargs{\csq@bdquote{}{}}}
+ {\csq@edquote}
+
+% {<init>}{<endinit>}{<citehook>}{<cite>}{<punct>}
+
+\def\csq@bdquote#1#2#3#4#5{%
+ \csuse{\csq@blockenvironment}%
+ \toggletrue{csq@block}%
+ \csq@setsfcodes
+ #1\ifblank{#4}
+ {\def\csq@tempb{\mkenddispquote{#5}{}#2}%
+ \mkbegdispquote{#5}{}}
+ {\def\csq@tempb{\mkenddispquote{#5}{\csq@switchlang{#3{#4}}}#2}%
+ \mkbegdispquote{#5}{\csq@switchlang{#3{#4}}}}%
+ \ignorespaces}
+
+\def\csq@edquote{%
+ \unspace\csq@tempb
+ \csuse{end\csq@blockenvironment}}
+
+\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@bdquote{\csq@lang{#1}}{\csq@endlang}}}
+ {\csq@edquote}
+
+\newenvironment*{hyphendisplayquote}[1]
+ {\csq@getcargs{\csq@bdquote{\csq@hyph{#1}}{\csq@endhyph}}}
+ {\csq@edquote}
+
+% Integrated display quotes
+
+\newenvironment*{displaycquote}
+ {\csq@getccargs{\csq@bdquote{}{}}}
+ {\csq@edquote}
+
+% Integrated display quotes + language switching
+
+\newenvironment*{foreigndisplaycquote}[1]
+ {\csq@getccargs{\csq@bdquote{\csq@lang{#1}}{\csq@endlang}}}
+ {\csq@edquote}
+
+\newenvironment*{hyphendisplaycquote}[1]
+ {\csq@getccargs{\csq@bdquote{\csq@hyph{#1}}{\csq@endhyph}}}
+ {\csq@edquote}
+
+% Hooks
+
+\newcommand{\mkcitation}[1]{\space(#1)}
+\newcommand{\mkccitation}[1]{\space#1}
+
+%% Markup with active characters
+
+\let\csq@dospecials\@empty
+\let\csq@doutfspecials\@empty
+
+\def\csq@do@dospecial#1#2{%
+ \ifnum\catcode`#1=\active
+ \csq@info{Redefining character \string#1}%
+ \csq@letspecial{#1}{csq@special@\number`#1}%
+ \else
+ \csq@info{Making character \string#1 active}%
+ \csq@letspecial{#1}{csq@special@\number`#1}%
+ \catcode`#1=\active
+ \fi}
+
+\def\csq@do@undospecial#1#2{%
+ \ifnum#2=\active
+ \csq@info{Resetting character \string#1}%
+ \csq@letspecial{#1}{csq@saved@\number`#1}%
+ \else
+ \csq@info{Resetting catcode of \string#1}%
+ \catcode`#1=#2\relax
+ \fi}
+
+\def\csq@do@verbspecial#1#2{%
+ \csq@info{Redefining character \string#1}%
+ \ifnum`#1<128\relax
+ \csq@edefspecial{#1}{\string#1}%
+ \else
+ \csq@letspecial{#1}{csq@saved@\number`#1}%
+ \fi}
+
+\def\csq@do@doutfspecial#1{%
+ \csq@info{Redefining character \csq@utfprint{#1}}%
+ \csletcs{u8:\csq@string{#1}}{csq@special@\csq@number{#1}}}
+
+\def\csq@do@undoutfspecial#1{%
+ \csq@info{Resetting character \csq@utfprint{#1}}%
+ \csletcs{u8:\csq@string{#1}}{csq@saved@\csq@number{#1}}}
+
+\def\csq@do@delspecial#1#2{%
+ \csq@info{Deallocating character \string#1}%
+ \csundef{csq@special@\number`#1}%
+ \csundef{csq@saved@\number`#1}%
+ \csundef{csq@string@\number`#1}%
+ \csundef{csq@textdef@\number`#1}%
+ \csundef{csq@xtxtdef@\number`#1}%
+ \csundef{csq@pdfdef@\number`#1}}
+
+\def\csq@do@delutfspecial#1{%
+ \csq@info{Deallocating character \csq@utfprint{#1}}%
+ \csundef{csq@special@\csq@number{#1}}%
+ \csundef{csq@saved@\csq@number{#1}}%
+ \csundef{csq@string@\csq@number{#1}}%
+ \csundef{csq@textdef@\csq@number{#1}}%
+ \csundef{csq@xtxtdef@\csq@number{#1}}%
+ \csundef{csq@pdfdef@\csq@number{#1}}}
+
+\def\csq@mkenable{%
+ \let\do\csq@do@dospecial
+ \csq@dospecials
+ \let\do\csq@do@doutfspecial
+ \csq@doutfspecials
+ \let\do\noexpand
+ \toggletrue{csq@active}}
+
+\def\csq@mkdisable{%
+ \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{%
+ \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
+ \let\do\csq@do@delspecial
+ \csq@dospecials
+ \let\do\csq@do@delutfspecial
+ \csq@doutfspecials
+ \let\do\noexpand
+ \let\csq@dospecials\@empty
+ \let\csq@doutfspecials\@empty
+ \let\csq@mkpdfstrings\@empty}
+
+\let\csq@mkpdfstrings\@empty
+\appto\csq@hook@hyperref{\csq@mkpdfstrings}
+
+\ifdef\inpenc@prehook
+ {\AtBeginDocument{%
+ \addto@hook\inpenc@prehook{%
+ \csq@info{Input encoding change}%
+ \csq@mkdelete}}}
+ {}
+
+% Regular specials
+
+% {<char>}{<textdef>}{<pdfdef1>}{<pdfdef2>}
+
+\def\csq@addspecial#1#2#3#4{%
+ \csq@validate{#1}
+ {\csq@addspecial@i@s{#1}{\csqQQ}{#2}{#3}{#4}}
+ {\csq@addspecial@i@u{#1}{\csqQQ}{#2}{#3}{#4}}}
+
+% {<char>}{<macro>}{<textdef>}{<pdfdef1>}{<pdfdef2>}
+
+\def\csq@addspecial@i@s#1#2#3#4#5{%
+ \csq@info{Allocating character \string#1}%
+ \csedef{csq@special@\number`#1}{\noexpand#2{\number`#1}}%
+ \ifnum\catcode`#1=\active
+ \cslet{csq@saved@\number`#1}{#1}%
+ \else
+ \csdef{csq@saved@\number`#1}{#1}%
+ \fi
+ \csedef{csq@string@\number`#1}{\string#1}%
+ \csdef{csq@textdef@\number`#1}{#3}%
+ \ifblank{#5}
+ {\csdef{csq@pdfdef@\number`#1}{#4}}
+ {\appto\csq@mkpdfstrings{\csq@defpspecial{#1}{#4}{#5}}}%
+ \eappto\csq@dospecials{\noexpand\do{\string#1}{\the\catcode`#1}}%
+ \ifnum`#1<128\relax
+ \csq@addto@list{#1}{\dospecials}{\do}%
+ \csq@addto@list{#1}{\@sanitize}{\@makeother}%
+ \fi}
+
+% {<char>}{<macro>}{<textdef>}{<pdfdef1>}{<pdfdef2>}
+
+\def\csq@addspecial@i@u#1#2#3#4#5{%
+ \csq@info{Allocating character \csq@utfprint{#1}}%
+ \csedef{csq@special@\csq@number{#1}}{%
+ \noexpand#2{\csq@number{#1}}}%
+ \ifcsundef{u8:\csq@string{#1}}
+ {\csq@error
+ {\csq@utfprint{#1} not supported by inputenc}
+ {This UTF-8 sequence does not seem to be supported by the
+ inputenc\MessageBreak package}%
+ \csdef{csq@saved@\csq@number{#1}}{}}
+ {\csletcs{csq@saved@\csq@number{#1}}{u8:\csq@string{#1}}}%
+ \csedef{csq@string@\csq@number{#1}}{\csq@string{#1}}%
+ \csdef{csq@textdef@\csq@number{#1}}{#3}%
+ \ifblank{#5}
+ {\csdef{csq@pdfdef@\csq@number{#1}}{#4}}
+ {\appto\csq@mkpdfstrings{\csq@defupspecial{#1}{#4}{#5}}}%
+ \eappto\csq@doutfspecials{\noexpand\do{\csq@string{#1}}}}
+
+% Block specials
+
+% {<char1>}{<delim>}{<char2>}{<textdef>}
+
+\def\csq@addbspecial#1#2#3#4{%
+ \csq@validate{#1}
+ {\csq@addbspecial@i@s{#1}{#2}{#3}{#4}}
+ {\csq@addbspecial@i@u{#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@i@s#1#2#3#4{%
+ \begingroup
+ \def\csq@tempa{\endgroup\csq@addspecial@i@s{#1}{\csqBQ}{}}%
+ \eappto\csq@tempa{%
+ {\expandafter\noexpand\csname csq@saved@\number`#1\endcsname
+ \noexpand\pdfstringdefWarn{\string#1}}{}}%
+ \csq@tempa
+ \csq@validate{#2}
+ {\csq@addbspecial@ii@s{\number`#1}{#2}{#3}{#4}}
+ {\csq@addbspecial@ii@u{\number`#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@i@u#1#2#3#4{%
+ \begingroup
+ \def\csq@tempa{\endgroup\csq@addspecial@i@u{#1}{\csqBQ}{}}%
+ \eappto\csq@tempa{%
+ {\expandafter\noexpand\csname csq@saved@\csq@number{#1}\endcsname
+ \noexpand\pdfstringdefWarn{\csq@utfprint{#1}}}{}}%
+ \csq@tempa
+ \csq@validate{#2}
+ {\csq@addbspecial@ii@s{\csq@number{#1}}{#2}{#3}{#4}}
+ {\csq@addbspecial@ii@u{\csq@number{#1}}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@ii@s#1#2#3#4{%
+ \csq@addspecial@i@s{#2}{\csqBQsep}{}{}{}%
+ \begingroup
+ \let\csq@tempa\@empty
+ \def\csq@tempb{{#1}}%
+ \uccode`\~=`#2\relax
+ \uppercase{\appto\csq@tempb{{~}}}%
+ \appto\csq@tempb{{#3}{#4}}%
+ \csq@validate{#3}
+ {\expandafter\def\expandafter\csq@tempa
+ \expandafter{\expandafter\csq@addbspecial@iii@s\csq@tempb}}
+ {\expandafter\def\expandafter\csq@tempa
+ \expandafter{\expandafter\csq@addbspecial@iii@u\csq@tempb}}%
+ \expandafter\endgroup\csq@tempa}
+
+\def\csq@addbspecial@ii@u#1#2#3#4{%
+ \csq@addspecial@i@u{#2}{\csqBQsep}{}{}{}%
+ \csq@validate{#3}
+ {\csq@addbspecial@iii@s{#1}{#2}{#3}{#4}}
+ {\csq@addbspecial@iii@u{#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@iii@s#1#2#3#4{%
+ \csq@addspecial@i@s{#3}{\csqBQend}{}{}{}%
+ \begingroup
+ \def\csq@tempa{{#1}{#2}}%
+ \uccode`\~=`#3\relax
+ \uppercase{\appto\csq@tempa{~}}%
+ \appto\csq@tempa{{#4}}%
+ \expandafter\endgroup
+ \expandafter\csq@addbspecial@iv\csq@tempa}
+
+\def\csq@addbspecial@iii@u#1#2#3#4{%
+ \csq@addspecial@i@u{#3}{\csqBQend}{}{}{}%
+ \csq@addbspecial@iv{#1}{#2}{#3}{#4}}
+
+\def\csq@addbspecial@iv#1#2#3#4{%
+ \expandafter\csq@defbspecial
+ \expandafter{\csname csq@textdef@#1\endcsname}{#2}{#3}{#4}%
+ \expandafter\csq@defxbspecial
+ \expandafter{\csname csq@xtxtdef@#1\endcsname}{#4}}
+
+% Specials
+
+\newcommand*{\csqQQ}[1]{%
+ \csq@ifsafeactives
+ {\csuse{csq@string@#1}}
+ {\csq@iftypeset
+ {\ifbool{mmode}
+ {\csuse{csq@saved@#1}}
+ {\csuse{csq@textdef@#1}}}
+ {\csq@ifstrings
+ {\csuse{csq@string@#1}}
+ {\noexpand\csqQQ{#1}}}}}
+
+\newcommand*{\csqBQ}[1]{%
+ \csq@ifsafeactives
+ {\csuse{csq@string@#1}}
+ {\csq@iftypeset
+ {\ifbool{mmode}
+ {\csuse{csq@saved@#1}}
+ {\csq@ifnested
+ {\csq@err@nbquote}
+ {\csq@nbgobble{\csuse{csq@textdef@#1}}}}}
+ {\csq@ifstrings
+ {\csuse{csq@string@#1}}
+ {\noexpand\csqBQbeg{#1}}}}}
+
+\newcommand*{\csqBQbeg}[1]{%
+ \csq@ifsafeactives
+ {\csuse{csq@string@#1}}
+ {\csq@iftypeset
+ {\ifbool{mmode}
+ {\csuse{csq@saved@#1}}
+ {\csq@ifnested
+ {\csq@err@nbquote}
+ {\csq@nbgobble{\csuse{csq@xtxtdef@#1}}}}}
+ {\csq@ifstrings
+ {\csuse{csq@string@#1}}
+ {\noexpand\csqBQbeg{#1}}}}}
+
+\newcommand*{\csqBQsep}[1]{%
+ \csq@ifsafeactives
+ {\csuse{csq@string@#1}}
+ {\csq@iftypeset
+ {\csuse{csq@saved@#1}}
+ {\csq@ifstrings
+ {\csuse{csq@string@#1}}
+ {\noexpand\csqBQsep{#1}}}}}
+
+\newcommand*{\csqBQend}[1]{%
+ \csq@ifsafeactives
+ {\csuse{csq@string@#1}}
+ {\csq@iftypeset
+ {\csuse{csq@saved@#1}}
+ {\csq@ifstrings
+ {\csuse{csq@string@#1}}
+ {\noexpand\csqBQend{#1}}}}}
+
+\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}}%
+ \def\csqBQsep#1{\csuse{csq@saved@#1}}%
+ \def\csqBQend#1{\csuse{csq@saved@#1}}}
+
+% Define specials
+
+% {<char>}{<def>}
+
+\def\csq@edefspecial#1#2{%
+ \begingroup
+ \uccode`\~=`#1\relax
+ \uppercase{\endgroup\edef~}{#2}}
+
+% {<char>}{<csname>}
+
+\def\csq@letspecial#1#2{%
+ \begingroup
+ \uccode`\~=`#1\relax
+ \uppercase{\def\csq@tempa{\endgroup\let~}}%
+ \expandafter\csq@tempa\csname#2\endcsname}
+
+% {<macro>}{<delim>}{<char2>}{<def>}
+
+\def\csq@defbspecial#1#2#3#4{%
+ \long\def#1##1#3{\csq@bspecial@i{##1}{#2}{#4}}}
+
+% {<text>}{<delim>}{<macro>}
+
+\long\def\csq@bspecial@i#1#2#3{%
+ \long\def\csq@bspecial@ii##1#2##2&{%
+ \ifblank{##2}
+ {#3{}{}{#1}}
+ {\csq@bspecial@iii#1&}}%
+ \long\def\csq@bspecial@iii##1#2##2&{%
+ #3{##2}{}{##1}}%
+ \csq@bspecial@ii#1#2&}
+
+% {<macro>}{<def>}
+
+\def\csq@defxbspecial#1#2{%
+ \long\def#1##1\csqBQend##2{\csq@xbspecial@i{##1}{#2}}}
+
+% {<text>}{<macro>}
+
+\long\def\csq@xbspecial@i#1#2{%
+ \long\def\csq@xbspecial@ii##1\csqBQsep##2&{%
+ \ifblank{##2}
+ {#2{}{}{#1}}
+ {\csq@xbspecial@iii#1&}}%
+ \long\def\csq@xbspecial@iii##1\csqBQsep##2##3&{%
+ #2{##3}{}{##1}}%
+ \csq@xbspecial@ii#1\csqBQsep&}
+
+% {<char>}{<pdfomark>}{<pdfcmark>}
+
+\def\csq@defpspecial#1#2#3{%
+ \begingroup
+ \uccode`\~=`#1\relax
+ \uppercase{\endgroup\def~##1~}{#2##1#3}}
+
+% {<char>}{<pdfomark>}{<pdfcmark>}
+
+\def\csq@defupspecial#1#2#3{%
+ \expandafter\def\csname u8:\csq@string{#1}\endcsname##1#1{#2##1#3}}
+
+% Validate user input
+
+% {<char>}{<macro>}{<utfmacro>}
+
+\def\csq@validate#1#2#3{%
+ \csq@ifutfchar{#1}
+ {\csq@ifvalidutf{#1}
+ {\ifcsundef{csq@special@\csq@number{#1}}
+ {#3}
+ {\csq@err@alloc}}
+ {\csq@err@utf}}
+ {\csq@ifvalidchar{#1}
+ {\ifcsundef{csq@special@\number`#1}
+ {#2}
+ {\csq@err@alloc}}
+ {\csq@err@char}}}
+
+% {<char>}{<true>}{<false>}
+
+\def\csq@ifutfchar#1{%
+ \ifundef\inputencodingname
+ {\@secondoftwo}
+ {\csq@ifutfenc}%
+ {\csq@ifsingle{#1}
+ {\ifnum`#1<128\relax
+ \expandafter\@secondoftwo
+ \else
+ \csq@err@utf
+ \expandafter\@gobbletwo
+ \fi}
+ {\@firstoftwo}}
+ {\csq@ifsingle{#1}
+ {\@secondoftwo}
+ {\csq@err@char
+ \@gobbletwo}}}
+
+\ifundef\inputencodingname
+ {\def\csq@ifutfenc{%
+ \csq@ifucs
+ {\csq@err@ucs\@secondoftwo}
+ {\begingroup
+ \def\@inpenc@undefined@##1{\def\inputencodingname{##1}}%
+ \@inpenc@undefined
+ \ifdefstring\inputencodingname{utf8}
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup}}}
+ {\def\csq@ifutfenc{%
+ \csq@ifucs
+ {\csq@err@ucs\@secondoftwo}
+ {\ifdefstring\inputencodingname{utf8}}}}
+
+% {<char>}{<true>}{<false>}
+
+\long\def\csq@ifsingle#1{%
+ \ifblank{#1}
+ {\@secondoftwo}
+ {\expandafter\csq@ifsingle@i
+ \string#1&&\@secondoftwo\@firstoftwo:}}
+\long\def\csq@ifsingle@i#1#2#3&#4#5#6:{#5}
+
+% {<char>}{<true>}{<false>}
+
+\def\csq@ifvalidchar#1{%
+ \begingroup
+ \@tempswafalse
+ \ifnum\active=\catcode`#1\relax
+ \@tempswatrue
+ \else\ifnum12=\catcode`#1\relax
+ \@tempswatrue
+ \fi\fi
+ \if@tempswa
+ \csq@ifvalidchar@i{#1}%
+ \fi
+ \if@tempswa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+\def\csq@ifvalidchar@i#1{%
+ \def\break\fi##1\relax{\fi\@tempswafalse}%
+ \def\do##1{\ifnum`##1=`#1\relax\break\fi}%
+ \csq@resrvdchars\relax}
+
+\def\csq@resrvdchars{%
+ \do\[\do\]\do\*\do\@\do\~\do\-\do\`\do\'\do\.\do\,\do\;\do\:%
+ \do\!\do\?\do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9}
+
+% {<char>}{<true>}{<false>}
+
+\def\csq@ifvalidutf#1{%
+ \ifblank{#1}{\@secondoftwo}{\csq@ifvalidutf@i#1&}}
+
+\def\csq@ifvalidutf@i#1#2&{%
+ \ifblank{#2}
+ {\@secondoftwo}% 0x00-0x7F handled elsewhere
+ {\csq@ifutfstart{#1}{\csq@ifvalidutf@ii#2&}{\@secondoftwo}}}
+
+\def\csq@ifvalidutf@ii#1#2&{%
+ \csq@ifutfnext{#1}
+ {\ifblank{#2}{\@firstoftwo}{\csq@ifvalidutf@ii#2&}}
+ {\@secondoftwo}}
+
+% 0xC0-0xFD, 0x80-0xBF, 0x80-0xBF, ...
+
+\def\csq@ifutfstart#1{%
+ \ifnum`#1>191\relax
+ \ifnum`#1<254\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\csq@ifutfnext#1{%
+ \ifnum`#1>127\relax
+ \ifnum`#1<192\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\csq@isvalid#1#2#3{#2}
+
+% User interface
+
+\newrobustcmd*{\MakeOuterQuote}[1]{%
+ \csq@addspecial{#1}{\csq@oqmark}
+ {\csq@pdf@ooqmark}{\csq@pdf@coqmark}}
+
+\newrobustcmd*{\MakeInnerQuote}[1]{%
+ \csq@addspecial{#1}{\csq@iqmark}
+ {\csq@pdf@oiqmark}{\csq@pdf@ciqmark}}
+
+\newrobustcmd*{\MakeAutoQuote}{%
+ \@ifstar
+ {\csq@mkaquote\csq@iqopen}
+ {\csq@mkaquote\csq@oqopen}}
+\def\csq@mkaquote#1#2#3{%
+ \csq@addspecial{#2}{#1}{\csq@pdf@ooqmark}{}%
+ \csq@addspecial{#3}{\csq@qclose}{\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeForeignQuote}{%
+ \@ifstar
+ {\csq@mkfquote\csq@iqopen@i}
+ {\csq@mkfquote\csq@oqopen@i}}
+\def\csq@mkfquote#1#2#3#4{%
+ \csq@addspecial{#3}
+ {\csq@bqgroup\csq@lang{#2}#1}
+ {\csq@pdf@ooqmark}{}%
+ \csq@addspecial{#4}
+ {\csq@qclose@i{\csq@endlang}}
+ {\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeHyphenQuote}{%
+ \@ifstar
+ {\csq@mkhquote\csq@iqopen@i}
+ {\csq@mkhquote\csq@oqopen@i}}
+\def\csq@mkhquote#1#2#3#4{%
+ \csq@addspecial{#3}
+ {\csq@bqgroup\csq@hyph{#2}#1}
+ {\csq@pdf@ooqmark}{}%
+ \csq@addspecial{#4}
+ {\csq@qclose@i{\csq@endhyph}}
+ {\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeBlockQuote}[3]{%
+ \csq@addbspecial{#1}{#2}{#3}{\csq@bquote{}{}{\mkcitation}}}
+
+\newrobustcmd*{\MakeForeignBlockQuote}[4]{%
+ \csq@addbspecial{#2}{#3}{#4}%
+ {\csq@bquote{\csq@lang{#1}}{\csq@endlang}{\mkcitation}}}
+
+\newrobustcmd*{\MakeHyphenBlockQuote}[4]{%
+ \csq@addbspecial{#2}{#3}{#4}%
+ {\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}{\mkcitation}}}
+
+\newrobustcmd*{\MakeHybridBlockQuote}[4]{%
+ \csq@addbspecial{#2}{#3}{#4}%
+ {\csq@bquote
+ {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+ {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}
+ {\mkcitation}}}
+
+\newrobustcmd*{\EnableQuotes}{}
+\newrobustcmd*{\DisableQuotes}{}
+\newrobustcmd*{\VerbatimQuotes}{}
+\newrobustcmd*{\DeleteQuotes}{\csq@mkdelete}
+
+\AtBeginDocument{%
+ \protected\def\EnableQuotes{\csq@mkenable}%
+ \protected\def\DisableQuotes{\csq@mkdisable}%
+ \protected\def\VerbatimQuotes{\csq@mkverbatim}}
+
+% Author interface
+
+\newrobustcmd*{\@enablequotes}{%
+ \toggletrue{csq@quiet}%
+ \csq@mkenable
+ \togglefalse{csq@quiet}}
+\newrobustcmd*{\@disablequotes}{%
+ \toggletrue{csq@quiet}%
+ \csq@mkdisable
+ \togglefalse{csq@quiet}}
+\newrobustcmd*{\@verbatimquotes}{%
+ \toggletrue{csq@quiet}%
+ \csq@mkverbatim
+ \togglefalse{csq@quiet}}
+\newrobustcmd*{\@deletequotes}{%
+ \toggletrue{csq@quiet}%
+ \csq@mkdelete
+ \togglefalse{csq@quiet}}
+
+%% Switch quote styles manually
+
+\newrobustcmd*{\setquotestyle}{%
+ \@ifstar
+ {\csq@resetqstyle}
+ {\@ifnextchar[%]
+ {\csq@setqstyle}
+ {\csq@setqstyle[]}}}
+
+\def\csq@setqstyle[#1]#2{%
+ \ifnum\csq@reset>\z@
+ \csq@info{Disabling multilingual quotes}%
+ \csq@reset\z@
+ \fi
+ \ifblank{#1}
+ {\DeclareQuoteAlias{#2}{default}}
+ {\DeclareQuoteAlias{#2/#1}{default}}}
+
+\def\csq@resetqstyle{%
+ \csq@info{Enabling multilingual quotes}%
+ \csq@reset\@ne}
+
+\AtEndPreamble{%
+ \def\csq@setqstyle[#1]#2{%
+ \ifnum\csq@reset=\@ne
+ \csq@info{Disabling multilingual quotes}%
+ \csq@reset\z@
+ \fi
+ \ifblank{#1}
+ {\csq@setstyle{#2}}
+ {\csq@setstyle{#2/#1}}}}
+
+%% Define quote styles
+
+\newrobustcmd*{\DeclareQuoteStyle}[2][]{%
+ \begingroup
+ \let\if@safe@actives\iftrue
+ \ifblank{#1}
+ {\edef\csq@tempa{#2}}
+ {\edef\csq@tempa{#2/#1}}%
+ \ifcsundef{csq@qstyle@\csq@tempa}
+ {}
+ {\csq@info{Redefining quotation style '\csq@tempa'}}%
+ \@ifnextchar[%]
+ {\csq@declareqstyle@i}
+ {\csq@declareqstyle@i[]}}
+
+\def\csq@declareqstyle@i[#1]{%
+ \csgdef{csq@qstyle@\csq@tempa}{%
+ \def\csq@thequote@oinit{%
+ \let\csq@themarker\csq@kernmarker#1}}%
+ \@ifnextchar[%]
+ {\csq@declareqstyle@ii}
+ {\csq@declareqstyle@ii[]}}
+
+\def\csq@declareqstyle@ii[#1]#2{%
+ \csgappto{csq@qstyle@\csq@tempa}{%
+ \def\csq@thequote@iinit{#1}%
+ \def\csq@thequote@oopen{#2}}%
+ \@ifnextchar[%]
+ {\csq@declareqstyle@iii}
+ {\csq@declareqstyle@iii[]}}
+
+\def\csq@declareqstyle@iii[#1]#2{%
+ \csgappto{csq@qstyle@\csq@tempa}{%
+ \def\csq@thequote@omiddle{#1}%
+ \def\csq@thequote@oclose{#2}}%
+ \@ifnextchar[%]
+ {\csq@declareqstyle@iv}
+ {\csq@declareqstyle@iv[]}}
+
+\def\csq@declareqstyle@iv[#1]#2{%
+ \ifblank{#1}
+ {\def\csq@thequote@kern{\z@}}
+ {\def\csq@thequote@kern{#1}}%
+ \csxappto{csq@qstyle@\csq@tempa}{%
+ \def\noexpand\csq@thequote@kern{\csq@thequote@kern}}%
+ \csgappto{csq@qstyle@\csq@tempa}{%
+ \def\csq@thequote@iopen{#2}}%
+ \@ifnextchar[%]
+ {\csq@declareqstyle@v}
+ {\csq@declareqstyle@v[]}}
+
+\def\csq@declareqstyle@v[#1]#2{%
+ \csgappto{csq@qstyle@\csq@tempa}{%
+ \def\csq@thequote@imiddle{#1}%
+ \def\csq@thequote@iclose{#2}}%
+ \endgroup}
+
+\@onlypreamble\DeclareQuoteStyle
+
+%% Define quote aliases
+
+\newrobustcmd*{\DeclareQuoteAlias}[3][]{%
+ \begingroup
+ \let\if@safe@actives\iftrue
+ \ifblank{#1}
+ {\edef\csq@tempa{#2}}
+ {\edef\csq@tempa{#2/#1}}%
+ \ifcsundef{csq@qstyle@\csq@tempa}
+ {\csq@error
+ {Quote style not defined}
+ {Define the style or alias '\csq@tempa' first}}
+ {\ifcsundef{csq@qstyle@#3}
+ {}
+ {\csq@info{Redefining alias '#3' -> '\csq@tempa'}}%
+ \csxdef{csq@qstyle@#3}{%
+ \noexpand\csuse{csq@qstyle@\csq@tempa}}}%
+ \endgroup}
+
+\@onlypreamble\DeclareQuoteAlias
+
+%% Define quotes for PDF strings
+
+\newrobustcmd*{\DeclarePlainStyle}[4]{%
+ \def\csq@pdf@ooqmark{#1}%
+ \def\csq@pdf@coqmark{#2}%
+ \def\csq@pdf@oiqmark{#3}%
+ \def\csq@pdf@ciqmark{#4}}
+
+\@onlypreamble\DeclarePlainStyle
+
+%% Define package options
+
+\newrobustcmd*{\DeclareQuoteOption}[1]{%
+ \define@key{csq}{#1}{\DeclareQuoteAlias[##1]{#1}{#1}}}
+
+\AtEndOfPackage{%
+ \protected\def\DeclareQuoteOption#1{%
+ \csq@warn@location\DeclareQuoteOption}}
+
+%% Space factor codes
+
+\newrobustcmd*{\DeclareQuoteGlyph}[2]{%
+ \csxappto{csq@sfcodes@#1}{\sfcode\detokenize{#2}=\z@}}
+
+%% Set defaults
+
+\newrobustcmd*{\SetBlockThreshold}[1]{%
+ \csq@tshold=#1\relax}
+
+\newrobustcmd*{\SetBlockEnvironment}[1]{%
+ \ifcsundef{#1}
+ {\csq@err@undef{#1}}
+ {\def\csq@blockenvironment{#1}}}
+
+\newrobustcmd*{\SetCiteCommand}[1]{%
+ \ifundef#1%
+ {\csq@err@undef{#1}}
+ {\def\csq@cite{#1}}}
+
+%% Interface for biblatex
+
+\newrobustcmd*{\@setquotesfcodes}{\csq@setsfcodes}
+
+\newcommand*{\@quotelevel}{}
+\let\@quotelevel\csq@qlevel
+
+\newcommand*{\@quotereset}{}
+\let\@quotereset\csq@reset
+
+\newcommand*{\@ifquotemarker}{%
+ \ifdim\lastskip=\csq@kernmarker\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+%% Author interface to auto quotes
+
+\newrobustcmd*{\openautoquote}{%
+ \ifbool{mmode}
+ {\csq@err@mmode\openautoquote}
+ {\csq@oqopen}}
+
+\newrobustcmd*{\closeautoquote}{%
+ \ifbool{mmode}
+ {\csq@err@mmode\closeautoquote}
+ {\csq@qclose}}
+
+\newrobustcmd*{\openinnerquote}{%
+ \ifbool{mmode}
+ {\csq@err@mmode\openinnerquote}
+ {\csq@iqopen}}
+
+\newrobustcmd*{\closeinnerquote}{%
+ \ifbool{mmode}
+ {\csq@err@mmode\closeinnerquote}
+ {\csq@qclose}}
+
+\appto\csq@hook@hyperref{%
+ \def\openautoquote{\csq@pdf@ooqmark}%
+ \def\closeautoquote{\csq@pdf@coqmark}%
+ \def\openinnerquote{\csq@pdf@oiqmark}%
+ \def\closeinnerquote{\csq@pdf@ciqmark}}
+
+%% Author interface to internal marks
+
+\newrobustcmd*{\initoquote}{%
+ \csq@resetstyle
+ \csq@qlevel\@ne
+ \csq@init}
+
+\newrobustcmd*{\initiquote}{%
+ \csq@resetstyle
+ \csq@qlevel\tw@
+ \csq@init}
+
+\newrobustcmd*{\textooquote}{%
+ \csq@resetstyle
+ \csq@addkern@open
+ \let\csq@kernchar@i\csq@thequote@oopen
+ \csq@thequote@oopen
+ \csq@setmarker@open
+ \csq@fixkern}
+
+\newrobustcmd*{\textmoquote}{%
+ \csq@resetstyle
+ \csq@thequote@omiddle}
+
+\newrobustcmd*{\textcoquote}{%
+ \ifdim\lastkern=\csq@omitmarker
+ \else
+ \csq@resetstyle
+ \csq@addkern@close
+ \csq@thequote@oclose
+ \let\csq@kernchar@i\csq@thequote@oclose
+ \csq@setmarker@close
+ \expandafter\csq@fixkern
+ \fi}
+
+\newrobustcmd*{\textoiquote}{%
+ \csq@resetstyle
+ \csq@addkern@open
+ \let\csq@kernchar@i\csq@thequote@iopen
+ \csq@thequote@iopen
+ \csq@setmarker@open
+ \csq@fixkern}
+
+\newrobustcmd*{\textmiquote}{%
+ \csq@resetstyle
+ \csq@thequote@imiddle}
+
+\newrobustcmd*{\textciquote}{%
+ \ifdim\lastkern=\csq@omitmarker
+ \else
+ \csq@resetstyle
+ \csq@addkern@close
+ \csq@thequote@iclose
+ \let\csq@kernchar@i\csq@thequote@iclose
+ \csq@setmarker@close
+ \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}
+
+\newrobustcmd*{\textdel}{%
+ \mktextdel}
+
+\newcommand{\mktextelp}{[\textellipsis\unkern]}
+\newcommand{\mktextelpins}[1]{[\textellipsis\unkern] [#1]}
+\newcommand{\mktextinselp}[1]{[#1] [\textellipsis\unkern]}
+\newcommand{\mktextins}[1]{[#1]}
+\newcommand{\mktextmod}[1]{[#1]}
+\newcommand{\mktextdel}[1]{[]}
+
+%% Auxiliary commands for some styles
+
+% French
+
+\newrobustcmd*{\initfrenchquotes}{%
+ \let\csq@themarker\csq@omitmarker}
+
+\newrobustcmd*{\mkfrenchopenquote}[1]{%
+ \leavevmode#1\@frenchquotespace}
+
+\newrobustcmd*{\mkfrenchclosequote}[1]{%
+ \leavevmode\@frenchquotespace#1}
+
+\newcommand*{\@frenchquotespace}{%
+ \penalty\@M
+ \hskip 0.8\fontdimen2\font
+ plus 0.3\fontdimen3\font
+ minus 0.3\fontdimen4\font}
+
+\AtEndPreamble{%
+ \@ifpackageloaded{polyglossia}
+ {\@ifpackagelater{polyglossia}{2009/11/20}
+ {\let\@frenchquotespace\@empty}
+ {}}
+ {}}
+
+% German
+
+\newrobustcmd*{\fixligatures}{%
+ \ifhmode
+ \ifnum\spacefactor>3000
+ \kern0pt
+ \else
+ \ifnum\spacefactor=1007
+ \kern0pt
+ \else
+ \ifnum\spacefactor=1008
+ \kern0pt
+ \fi
+ \fi
+ \fi
+ \fi}
+
+% Special styles
+
+\DeclareQuoteStyle{debug}
+ {\textbf{[\number\@quotelevel]}}
+ [\textbf{[\number\@quotelevel]}]
+ {\textbf{[\number\@quotelevel]}}
+ {\textbf{[\number\@quotelevel]}}
+ [\textbf{[\number\@quotelevel]}]
+ {\textbf{[\number\@quotelevel]}}
+
+\DeclareQuoteStyle{fallback}
+ {\textbf{?}}
+ {\textbf{?}}
+ {\textbf{?}}
+ {\textbf{?}}
+
+%% Package options
+
+\newrobustcmd*{\ExecuteQuoteOptions}{\setkeys{csq}}
+\@onlypreamble\ExecuteQuoteOptions
+
+% Core options
+
+\define@key{csq}{strict}[true]{%
+ \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}{debug}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\csq@debug\csq@logdebug}
+ {\let\csq@debug\@gobble}}
+
+\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@autostyle@true{%
+ \csq@info{Enabling multilingual quotes}%
+ \csq@reset\@ne}
+\def\csq@opt@autostyle@try{%
+ \csq@reset\tw@}
+\def\csq@opt@autostyle@once{%
+ \csq@reset\thr@@}
+\def\csq@opt@autostyle@tryonce{%
+ \csq@reset4\relax}
+
+\define@key{csq}{babel}[true]{%
+ \csq@info{%
+ Option 'babel' depreciated.\MessageBreak
+ Using 'autostyle'}%
+ \setkeys{csq}{autostyle=#1}}
+
+\define@key{csq}{maxlevel}{%
+ \ifnumless{#1}\tw@
+ {\csq@err@opt{maxlevel=#1}}
+ {\csq@maxlvl#1\relax}}
+
+\define@key{csq}{threshold}{%
+ \SetBlockThreshold{#1}}
+
+\define@key{csq}{thresholdtype}[lines]{%
+ \ifcsdef{csq@bcount@#1}%
+ {\def\csq@thresholdtype{#1}}
+ {\csq@err@opt{thresholdtype=#1}}}
+
+\define@key{csq}{parthreshold}[true]{%
+ \settoggle{csq@parthreshold}{#1}}
+
+\define@key{csq}{splitcomp}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\csq@splitcomp\z@}
+ {\let\csq@splitcomp\@M}}
+
+\define@key{csq}{csdisplay}[true]{%
+ \setbool{csdisplay}{#1}}
+
+\define@key{csq}{version}{%
+ \ifdef\csq@getversion
+ {}
+ {\input{csq-compat.def}}%
+ \csq@getversion{#1}}
+
+% Initialize
+
+\setkeys{csq}{thresholdtype=lines,parthreshold,splitcomp=false}
+
+%% Initial setup
+
+% Provide 'quote' environment
+
+\ifundef\quote
+ {\csq@info{%
+ The 'quote' environment appears to be undefined.\MessageBreak
+ I'm defining a typical 'quote' environment now}
+ \def\quote{%
+ \list{}{\rightmargin\leftmargin}%
+ \item\relax}
+ \def\endquote{\endlist}}
+ {}
+
+% Deferred last minute setup
+
+\AtEndPreamble{%
+ \ifnumgreater\csq@reset\z@
+ {\csq@info{Checking for multilingual support..}%
+ \@ifpackageloaded{polyglossia}
+ {\csq@info{... found 'polyglossia' package}%
+ \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@hook@hyperref}}
+ {}%
+ \undef\csq@hook@hyperref
+ \appto\@noligs{\@verbatimquotes}%
+ \@ifpackageloaded{verbatim}
+ {\addto@hook\every@verbatim{\@verbatimquotes}}
+ {}%
+ \@ifpackageloaded{fancyvrb}
+ {\appto\FV@CatCodes{\@verbatimquotes}}
+ {}%
+ \@ifpackageloaded{endnotes}
+ {\BlockquoteDisable{%
+ \renewcommand{\endnote}[2][]{%
+ \ifblank{#1}
+ {\endnotemark\relax}
+ {\endnotemark[#1]}}%
+ \renewcommand{\endnotetext}[2][]{}%
+ \let\addtoendnotes\@gobble}}
+ {}%
+ \ifdef\collect@body % amsmath
+ {\pretocmd\collect@body{\@disablequotes}
+ {}
+ {\csq@err@patch{'amsmath' package}}}
+ {}}
+
+\AtBeginDocument{%
+ \csq@setstyle{default}%
+ \csq@mkenable}
+
+% Restore catcodes
+
+\csq@catcodes
+\undef\csq@catcodes
+
+% Load predefined styles
+
+\input{csquotes.def}
+
+% Load configuration file
+
+\csq@info{Trying to load configuration file 'csquotes.cfg'..}
+\InputIfFileExists{csquotes.cfg}
+ {\csq@info{... configuration file loaded successfully}}
+ {\csq@info{... configuration file not used}}
+
+% Process options
+
+\DeclareOption*{%
+ \begingroup
+ \edef\csq@tempa{\endgroup
+ \noexpand\setkeys{csq}{\CurrentOption}}%
+ \csq@tempa}
+
+\ProcessOptions*
+
+\endinput