Skip to content

Commit

Permalink
Fix issue #24 (Capitals in French)
Browse files Browse the repository at this point in the history
* fc-french.def: Fix issue #24, by adding \fc@gcase to capitalize 1st letter, and setting \fc@wcase to do nothing.
* fcnumparser.sty: Rename \fc@case to \fc@wcase also in docstrippable documentation.
* test/Makefile: Make pdftests dependant of sty files, and add target overwrite_pdftests.
* test/reference/fc-frlargenum.txt: overwrite reference with corrected content as a result of fixing issue #24.
* test/reference/test-crossref-french+ucf+Numberstring.txt: overwrite reference with corrected content as a result of fixing issue #24.
* test/reference/test-crossref-french+ucf+Ordinalstring.txt: overwrite reference with corrected content as a result of fixing issue #24.
  • Loading branch information
vincentb1 committed Jun 15, 2017
1 parent 1149585 commit 4ce0969
Show file tree
Hide file tree
Showing 6 changed files with 272 additions and 194 deletions.
107 changes: 65 additions & 42 deletions trunk/fc-french.def
Expand Up @@ -267,6 +267,24 @@
% \begin{macrocode}
\global\let\fc@wcase\fc@CaseIden
% \end{macrocode}
% \DescribeMacro{\fc@gcase}The macro \cs{fc@gcase} is the capitalizing macro for global (the completed number)
% capitalization. By default we set it to identity, ie.\ no capitalization.
% \changes{3.02}{2017/06/15}{Create new macro \cs{fc@gcase} for solving
% \uref{http://github.com/nlct/fmtcount/issues/24}{Issue \#24} about capitalization in French.}
% \begin{macrocode}
\global\let\fc@gcase\fc@CaseIden
% \end{macrocode}
% \DescribeMacro{\fc@apply@gcase}The macro \cs{fc@apply@gcase} simply applies \cs{fc@gcase} to \cs{@tempa},
% knowing that \cs{@tempa} is the macro containing the result of formatting.
% \begin{macrocode}
\gdef\fc@apply@gcase{%
% \end{macrocode}
% First of all we expand whatever \cs{fc@wcase}\ldots\cs{@nil} found within \cs{@tempa}.
% \begin{macrocode}
\protected@edef\@tempa{\@tempa}%
\protected@edef\@tempa{\expandafter\fc@gcase\@tempa\@nil}%
}
% \end{macrocode}
% \DescribeMacro{\@ordinalMfrench}
% \changes{3.01}{2014-11-12}{Protect \cs{`}, for solving
% \uref{http://github.com/nlct/fmtcount/issues/15}{Issue \#15}, and
Expand Down Expand Up @@ -487,6 +505,7 @@ z\'ero%
% French dialects \& formatting options.
% \begin{macrocode}
\newcommand*\fc@french@common{%
\let\fc@wcase\fc@CaseIden
\let\@unitstring=\@@unitstringfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
Expand All @@ -497,8 +516,8 @@ z\'ero%
% \end{macrocode}
% \begin{macrocode}
\newcommand*{\@numberstringMfrenchswiss}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
Expand All @@ -507,8 +526,8 @@ z\'ero%
\@@numberstringfrench{#1}{#2}}
\global\let\@numberstringMfrenchswiss\@numberstringMfrenchswiss
\newcommand*{\@numberstringMfrenchfrance}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -517,8 +536,8 @@ z\'ero%
\@@numberstringfrench{#1}{#2}}
\global\let\@numberstringMfrenchfrance\@numberstringMfrenchfrance
\newcommand*{\@numberstringMfrenchbelgian}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -528,8 +547,8 @@ z\'ero%
\global\let\@numberstringMfrenchbelgian\@numberstringMfrenchbelgian
\let\@numberstringMfrench=\@numberstringMfrenchfrance
\newcommand*{\@numberstringFfrenchswiss}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
Expand All @@ -538,8 +557,8 @@ z\'ero%
\@@numberstringfrench{#1}{#2}}
\global\let\@numberstringFfrenchswiss\@numberstringFfrenchswiss
\newcommand*{\@numberstringFfrenchfrance}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -548,8 +567,8 @@ z\'ero%
\@@numberstringfrench{#1}{#2}}
\global\let\@numberstringFfrenchfrance\@numberstringFfrenchfrance
\newcommand*{\@numberstringFfrenchbelgian}[2]{%
\let\fc@wcase\fc@CaseIden
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -560,72 +579,72 @@ z\'ero%
\global\let\@numberstringFfrench=\@numberstringFfrenchfrance
\global\let\@ordinalstringNfrench\@ordinalstringMfrench
\newcommand*{\@NumberstringMfrenchswiss}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
\let\fc@nbrstr@preamble\@empty
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringMfrenchswiss\@NumberstringMfrenchswiss
\newcommand*{\@NumberstringMfrenchfrance}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\let\fc@nbrstr@preamble\@empty
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringMfrenchfrance\@NumberstringMfrenchfrance
\newcommand*{\@NumberstringMfrenchbelgian}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\let\fc@nbrstr@preamble\@empty
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringMfrenchbelgian\@NumberstringMfrenchbelgian
\global\let\@NumberstringMfrench=\@NumberstringMfrenchfrance
\newcommand*{\@NumberstringFfrenchswiss}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringFfrenchswiss\@NumberstringFfrenchswiss
\newcommand*{\@NumberstringFfrenchfrance}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringFfrenchfrance\@NumberstringFfrenchfrance
\newcommand*{\@NumberstringFfrenchbelgian}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble
\let\fc@nbrstr@postamble\@empty
\let\fc@nbrstr@postamble\fc@apply@gcase
\@@numberstringfrench{#1}{#2}}
\global\let\@NumberstringFfrenchbelgian\@NumberstringFfrenchbelgian
\global\let\@NumberstringFfrench=\@NumberstringFfrenchfrance
\global\let\@NumberstringNfrench\@NumberstringMfrench
\newcommand*{\@ordinalstringMfrenchswiss}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first\fc@@firstfrench
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
Expand All @@ -641,18 +660,18 @@ z\'ero%
\newcommand*\fc@@firstFfrench{premi\protect\`ere}
\global\let\fc@@firstFfrench\fc@@firstFfrench
\newcommand*{\@ordinalstringMfrenchfrance}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first=\fc@@firstfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\@@ordinalstringfrench{#1}{#2}}
\global\let\@ordinalstringMfrenchfrance\@ordinalstringMfrenchfrance
\newcommand*{\@ordinalstringMfrenchbelgian}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first=\fc@@firstfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -661,29 +680,29 @@ z\'ero%
\global\let\@ordinalstringMfrenchbelgian\@ordinalstringMfrenchbelgian
\global\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance
\newcommand*{\@ordinalstringFfrenchswiss}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstFfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first\fc@@firstFfrench
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@ordinalstringFfrenchswiss\@ordinalstringFfrenchswiss
\newcommand*{\@ordinalstringFfrenchfrance}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstFfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first=\fc@@firstFfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@ordinalstringFfrenchfrance\@ordinalstringFfrenchfrance
\newcommand*{\@ordinalstringFfrenchbelgian}[2]{%
\let\fc@wcase\fc@CaseIden
\let\fc@first=\fc@@firstFfrench
\fc@french@common
\let\fc@gcase\fc@CaseIden
\let\fc@first=\fc@@firstFfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -693,29 +712,29 @@ z\'ero%
\global\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance
\global\let\@ordinalstringNfrench\@ordinalstringMfrench
\newcommand*{\@OrdinalstringMfrenchswiss}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstfrench
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@OrdinalstringMfrenchswiss\@OrdinalstringMfrenchswiss
\newcommand*{\@OrdinalstringMfrenchfrance}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first\fc@@firstfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@OrdinalstringMfrenchfrance\@OrdinalstringMfrenchfrance
\newcommand*{\@OrdinalstringMfrenchbelgian}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first\fc@@firstfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand All @@ -724,29 +743,29 @@ z\'ero%
\global\let\@OrdinalstringMfrenchbelgian\@OrdinalstringMfrenchbelgian
\global\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance
\newcommand*{\@OrdinalstringFfrenchswiss}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first\fc@@firstfrench
\let\@seventies=\@@seventiesfrenchswiss
\let\@eighties=\@@eightiesfrenchswiss
\let\@nineties=\@@ninetiesfrenchswiss
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@OrdinalstringFfrenchswiss\@OrdinalstringFfrenchswiss
\newcommand*{\@OrdinalstringFfrenchfrance}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstFfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first\fc@@firstFfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
\@@ordinalstringfrench{#1}{#2}%
}%
\global\let\@OrdinalstringFfrenchfrance\@OrdinalstringFfrenchfrance
\newcommand*{\@OrdinalstringFfrenchbelgian}[2]{%
\let\fc@wcase\fc@UpperCaseFirstLetter
\let\fc@first=\fc@@firstFfrench
\fc@french@common
\let\fc@gcase\fc@UpperCaseFirstLetter
\let\fc@first\fc@@firstFfrench
\let\@seventies=\@@seventiesfrench
\let\@eighties=\@@eightiesfrench
\let\@nineties=\@@ninetiesfrench
Expand Down Expand Up @@ -1698,6 +1717,10 @@ z\'ero%
\fi
\fi
% \end{macrocode}
% Apply \cs{fc@gcase} to the result.
% \begin{macrocode}
\fc@apply@gcase
% \end{macrocode}
% Propagate the result --- i.e. expansion of \cs{@tempa} --- into macro \texttt{\#2} after closing brace.
% \begin{macrocode}
\def\@tempb##1{\def\@tempa{\def#2{##1}}}%
Expand Down
16 changes: 8 additions & 8 deletions trunk/fcnumparser.sty
Expand Up @@ -474,24 +474,24 @@
\def\fc@get@last@word#1#2#3{%
{%
% \end{macrocode}
% First we split \texttt{\#1} into two parts: everything that is upto \cs{fc@case} exclusive goes to
% \cs{toks0}, and evrything from \cs{fc@case} exclusive upto the final \cs{@nil} exclusive goes to \cs{toks1}.
% First we split \texttt{\#1} into two parts: everything that is upto \cs{fc@wcase} exclusive goes to
% \cs{toks0}, and evrything from \cs{fc@wcase} exclusive upto the final \cs{@nil} exclusive goes to \cs{toks1}.
% \begin{macrocode}
\def\@tempa##1\fc@wcase##2\@nil\fc@end{%
\toks0{##1}%
% \end{macrocode}
% Actually a dummy \cs{fc@case} is appended to \cs{toks1}, because that makes easier further checking that it
% does not contains any other \cs{fc@case}.
% Actually a dummy \cs{fc@wcase} is appended to \cs{toks1}, because that makes easier further checking that it
% does not contains any other \cs{fc@wcase}.
% \begin{macrocode}
\toks1{##2\fc@wcase}%
}%
\@tempa#1\fc@end
% \end{macrocode}
% Now leading part upto last word should be in \cs{toks0}, and last word should be in \cs{toks1}. However we
% need to check that this is really the last word, i.e. we need to check that there is no \cs{fc@case} inside
% need to check that this is really the last word, i.e. we need to check that there is no \cs{fc@wcase} inside
% \cs{toks1} other than the tailing dummy one. To that purpose we will loop while we find that \cs{toks1}
% contains some \cs{fc@case}. First we define \cs{@tempa} to split \cs{the}\cs{toks1} between parts before and
% after some potential \cs{fc@case}.
% contains some \cs{fc@wcase}. First we define \cs{@tempa} to split \cs{the}\cs{toks1} between parts before and
% after some potential \cs{fc@wcase}.
% \begin{macrocode}
\def\@tempa##1\fc@wcase##2\fc@end{%
\toks2{##1}%
Expand All @@ -509,7 +509,7 @@
\expandafter\@tempa\the\toks1 \fc@end
\ifx\@tempb\@empty
% \end{macrocode}
% \cs{@tempb} empty means that the only \cs{fc@case} found in \cs{the}\cs{toks1} is the dummy one. So we end
% \cs{@tempb} empty means that the only \cs{fc@wcase} found in \cs{the}\cs{toks1} is the dummy one. So we end
% the loop here, \cs{toks2} contains the last word.
% \begin{macrocode}
\let\next\relax
Expand Down

0 comments on commit 4ce0969

Please sign in to comment.