Compare commits

...

2 Commits

Author SHA1 Message Date
Juergen Spitzmueller
d0b559a31d Improve version test in chkconfig
This now only loads the package until it has the version information
and then ends the package input.

This way, we do not need to care about package peculiarities (having
to be loaded after \documentclass or internal dependencies which, if
not given, might break the whole configuration, see #13112)
2024-10-18 10:10:41 +02:00
Juergen Spitzmueller
19fedea29a Fix hyphenation patterns check with recent babel
This was broken since 2016.

See discussion in https://www.lyx.org/trac/ticket/13112
2024-10-18 10:09:35 +02:00
2 changed files with 34 additions and 9 deletions

View File

@ -120,12 +120,22 @@
#6
\fi}
% For the version test below, we need to load the tested package.
% However, we are only interested in the version information, so
% we redefine an internal method of \ProvidesPackage to quit
% as soon as we have that information
\let\chk@pr@videpackage\@pr@videpackage
\def\@pr@videpackage[#1]{\chk@pr@videpackage[#1]\endinput}
% Tests whether an package is present and also adds the version to the package list
\newcommand{\TestPackageAddVersion}[2][\default]{
\def\default{#2}
\def\package@version{}
% The actual test only works after the package has been loaded
\IfFileExists{#1.sty}{%
% The actual test only works after the package has been loaded,
% but with the redefinition of \@pr@videpackage above, we quit
% as early as possible
\RequirePackage{#1}%
\protected@edef\package@@version{\csname ver@#1.sty\endcsname}%
\protected@edef\package@version{\expandafter\@parse@version\package@@version//00\@nil}%
@ -212,13 +222,14 @@
\AddPackage[\expandafter\@parse@version\fmtversion//00\@nil]{LaTeX}
%%% And now, the list of available languages
% The trick is to know that \the\everyjob contains something like
% Up to 2016 \the\everyjob contains something like
% \typeout{LaTeX2e <2001/06/01>}
% \typeout{Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, nohyphenation, loaded.}
% All we have to do is to extract the list from there:
% (1) concatenate all the messages that are displayed everytime the
% format is loaded. The is done by redefining locally \typeout to
% append its argument to the macro \mesg.
% But see below for recent versions of babel.
\def\mesg{}
{\def\typeout#1{\xdef\mesg{\mesg #1}}
\the\everyjob}
@ -226,19 +237,27 @@
% (2) strip the useless parts from \mesg. This uses the fact that TeX
% allows to define macros with parameters delimited by arbitrary text.
\def\platexname{pLaTeX2e}
\def\langs{}
\ifx\pfmtname\platexname
\def\langs{japanese}
\else
\def\strip#1patterns for #2, loaded.#3\endmark{\def\langs{#2}}
\expandafter\strip\mesg\endmark
\ifx\mesg\empty
% As of 2016, babel does not print out the loaded hyphenation patterns to
% the log anymore, so \mesg will be empty. For the following method,
% see https://tex.stackexchange.com/questions/330085/
\@ifundefined{bbl@languages}{}{
\def\bbl@elt#1#2#3#4{#1, }
\edef\@langs{\bbl@languages}
\def\strip#1, \endmark{\def\langs{#1}}
\expandafter\strip\@langs\endmark
}
\else
\def\strip#1patterns for #2, loaded.#3\endmark{\def\langs{#2}}
\expandafter\strip\mesg\endmark
\fi
\fi
% (3) handle the result
% FIXME: As of 2016, babel does not print out the loaded hyphenation patterns to
% the log anymore, so this discontinues to work. For possible workarounds
% (with babel), see https://tex.stackexchange.com/questions/330085/
% Leaving this activated for the time being, since it probably still
% works with older distributions.
\message{^^J\prefix checking for available hyphenation patterns... \langs}
\AddVariable{languages}{\langs}

View File

@ -106,3 +106,9 @@ What's new
* BUILD/INSTALLATION
- Fix (only informal) check for hyphenation patterns in (re)configuration.
- Improve check for package versions in (re)configuration. Particularly,
configuration does not break any longer if a sub-dependency of a
tested package is missing (bug 13112),