diff options
author | Karl Berry <karl@freefriends.org> | 2017-06-05 23:15:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-06-05 23:15:32 +0000 |
commit | c684ba451bf548bdb24c40ed54caa9f11ac21422 (patch) | |
tree | 9e2d943480a32ad77b221c277aa97f6ebe251d01 /Master/texmf-dist/tex/platex/pxbase/pxbabel.sty | |
parent | caef61ed4952aee5804397dbdc93deb54f043a98 (diff) |
pxbase (30may17)
git-svn-id: svn://tug.org/texlive/trunk@44482 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/platex/pxbase/pxbabel.sty')
-rw-r--r-- | Master/texmf-dist/tex/platex/pxbase/pxbabel.sty | 435 |
1 files changed, 318 insertions, 117 deletions
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty b/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty index aaa9feff101..97b5e4ad568 100644 --- a/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty +++ b/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty @@ -1,120 +1,309 @@ -% -% pxbabel.sty -% -%%%% package declaration +%% +%% This is file 'pxbabel.sty'. +%% +%% Copyright (c) 2017 Takayuki YATO (aka. "ZR") +%% GitHub: https://github.com/zr-tex8r +%% Twitter: @zr_tex8r +%% +%% This package is distributed under the MIT License. +%% + +%% package declaration \NeedsTeXFormat{pLaTeX2e} -\ProvidesPackage{pxbabel}[2017/05/04 v0.5i PX Babel interface for CJK] +\ProvidesPackage{pxbabel}[2017/05/29 v1.1 PX Babel interface for CJK] +\def\pxbb@pkgname{pxbabel} + +%--------------------------------------- general + +%% packages \RequirePackage{pxbase} +\RequirePackage{ifptex} \safecaret -\RequirePackage{keyval} +\bxPrepareSetKeysSafe -%%%% error message -\def\pxbb@pkgname{pxbabel} -\def\pxbb@error{\PackageError\pxbb@pkgname} -\def\pxbb@warn{\PackageWarningNoLine\pxbb@pkgname} +%% error messages +\bxSetModuleName\pxbb@pkgname \def\pxbb@eha{\MessageBreak I aborted loading it.} -\def\pxbb@err@nobbl{\pxbb@error - {babel is not yet loaded, load aborted}% - {This package must be loaded after babel package.}} -\@onlypreamble\pxbb@err@nobbl -\def\pxbb@warn@nocjk{\pxbb@warn - {No multi-CJK support found, font switch disabled\MessageBreak - (I need upTeX-extension or otf package with `multi')}} -\@onlypreamble\pxbb@warn@nocjk - -%%%% \pxbb@foreach@lang\CS -\def\pxbb@foreach@lang#1{% - #1{japanese}#1{korean}#1{schinese}#1{tchinese}} - -%%%% keyval settings -\def\pxbb@setkey{% - \edef\pxbb@nxt{\noexpand\setkeys{pxbabel}{\CurrentOption}}% - \pxbb@nxt} -\def\pxbb@do#1{% - \define@key{pxbabel}{#1}{\@namedef{pxbb@LN/#1}{##1}}% - \@namedef{pxbb@LN/#1}{#1}} -\pxbb@foreach@lang\pxbb@do -\define@key{pxbabel}{main}{\def\pxbb@main{#1}} -\let\pxbb@main\relax - -%%%% option handler -\newif\ifpxbb@switchcaption \pxbb@switchcaptionfalse -\DeclareOption{switchcaption}{\pxbb@switchcaptiontrue} -\DeclareOption{noswitchcaption}{\pxbb@switchcaptionfalse} -\newif\ifpxbb@switchfont \pxbb@switchfonttrue +\bxPreamble\def\pxbb@err@nobbl{% + \PackageError\pxbb@pkgname + {babel is not yet loaded, load aborted}% + {This package must be loaded after babel package.}} +\bxPreamble\def\pxbb@warn@nocjk{% + \PackageWarningNoLine\pxbb@pkgname + {No multi-CJK support found, font switch disabled\MessageBreak + (I need upTeX-extension or otf package with `multi')}} +\bxPreamble\def\pxbb@err@noldf#1{% + \PackageError\pxbb@pkgname + {Language definition file #1.ldf not found}% + {Maybe you misspelled the language option?}} + +%--------------------------------------- Processing package options + +%% \pxbb@cjk@langid@list +% The list of all CJK language ids. +\bxPreamble\def\pxbb@cjk@langid@list{% + japanese,korean,schinese,tchinese% +} + +%% \pxbb@lang@load@list +% The list of language options to be loaded. +\bxPreamble\let\pxbb@lang@load@list\@empty + +%% \pxbb@set@lang@spec{<lang_id>}{[+]<lang_name>} +\bxPreamble\def\pxbb@set@lang@spec#1#2{% + \edef\pxbb@args{#2}% + \expandafter\pxbb@set@lang@spec@a\pxbb@args\@nil{#1}} +\bxPreamble\def\pxbb@set@lang@spec@a#1#2\@nil#3{% + \bxIf{+#1}% + {\csdef{pxbb@langname/#3}{#2}% + \appto\pxbb@lang@load@list{,#2}}% + {\csdef{pxbb@langname/#3}{#1#2}}} + +%% keyval settings +% (<lang_id>=[+]<lang_name>) +\bxForEachIn\pxbb@cjk@langid@list\do{% + \define@key{pxbabel}{#1}{\pxbb@set@lang@spec{#1}{##1}}% + \pxbb@set@lang@spec{#1}{#1}} +% (main=<lang_name>) +\bxPreamble\let\pxbb@main@lang\relax +\define@key{pxbabel}{main}{\def\pxbb@main@lang{#1}} +% (caption=<lang_name>) +\bxPreamble\def\pxbb@caption@lang{default} +\define@key{pxbabel}{caption}{\def\pxbb@caption@lang{#1}} + +%% option handling +\DeclareOption{switchcaption}{% + \def\pxbb@caption@lang{switch}} +\DeclareOption{noswitchcaption}{% + \def\pxbb@caption@lang{default}} +\newbool{pxbb@switchfont}\pxbb@switchfonttrue \DeclareOption{switchfont}{\pxbb@switchfonttrue} \DeclareOption{noswitchfont}{\pxbb@switchfontfalse} -\newif\ifpxbb@prefermmixjis -\DeclareOption{prefer2004jis}{\pxbb@prefermmixjistrue} -\DeclareOption{noprefer2004jis}{\pxbb@prefermmixjisfalse} -\DeclareOption*{\pxbb@setkey} +\newbool{pxbb@prefermmivjis} +\DeclareOption{prefer2004jis}{\pxbb@prefermmivjistrue} +\DeclareOption{noprefer2004jis}{\pxbb@prefermmivjisfalse} +% (<lang_id>, +<lang_id>) +\bxForEachIn\pxbb@cjk@langid@list\do{% + \DeclareOption{#1}{% + \pxbb@set@lang@spec{#1}{#1}% + \def\pxbb@last@lang{#1}}% + \DeclareOption{+#1}{% + \pxbb@set@lang@spec{#1}{+#1}% + \def\pxbb@last@lang{#1}}} +% (options processed by keyval) +\DeclareOption*{% + \bxWithArgExpd{\CurrentOption}\do{% + \bxSetKeysSafe{pxbabel}{#1}% + \bxIfx{\bxRestKeys\@empty}{}% + {\appto\pxbb@lang@load@list{,#1}% + \def\pxbb@last@lang{#1}}}} \ProcessOptions* +\bxChompComma\pxbb@lang@load@list + +%% 'triv' language check table +\bxForEachIn\pxbb@cjk@langid@list\do{% + \cslet{pxbb@triv/\@nameuse{pxbb@langname/#1}}{t}} +\bxForEachIn\pxbb@lang@load@list\do{% + \csundef{pxbb@triv/#1}} -%%%% \ifpxbb@otfmulti, \ifpxbb@uptex -%%%% \ifpxbb@pxotf -\newif\ifpxbb@otfmulti \newif\ifpxbb@pxotf -\@ifpackageloaded{mlutf}{\pxbb@otfmultitrue}{\pxbb@otfmultifalse} +%--------------------------------------- Resolving settings + +%% \ifpxbb@otfmulti +%% \ifpxbb@pxotf +\newbool{pxbb@otfmulti} +\newbool{pxbb@pxotf} +\@ifpackageloaded{mlutf}{\pxbb@otfmultitrue}{} \@ifpackageloaded{pxotf}{\pxbb@otfmultitrue\pxbb@pxotftrue}{} -\newif\ifpxbb@uptex -\let\ifpxbb@uptex\ifupTeX - -%%%% environment check -\@ifpackageloaded{babel}{}{\pxbb@err@nobbl\endinput} -\ifpxbb@switchfont \ifpxbb@otfmulti\else \ifpxbb@uptex\else - \pxbb@warn@nocjk \fi\fi\fi - -%%%% set caption language to 'default' -\ifpxbb@switchcaption\else - \ifx\bx@bbl@captlang\@undefined - \bxcaptionlanguage{default} -\fi\fi - -%%------ language declarations - -%%%% \pxlanguagename{<langcode>} -\def\pxlanguagename#1{\@nameuse{pxbb@LN/#1}} - -%%%% declare languages -\def\pxbb@decl@triv@lang#1{% - \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}}% - \expandafter\pxbb@decl@triv@lang@a\pxbb@arg} -\def\pxbb@decl@triv@lang@a#1{% - \expandafter\ifx\csname date#1\endcsname\relax - \bxTrivLangDef{#1}\fi} -\pxbb@foreach@lang\pxbb@decl@triv@lang -\pxbb@decl@triv@lang@a{cjkmulti} -\ifx\pxbb@main\relax\else - \bxmainlanguage{\pxbb@main}\fi -\@onlypreamble\pxb@decl@triv@lang -\@onlypreamble\pxb@decl@triv@lang@a - -\ifpxbb@otfmulti %====================== for OTF -%%------ \UTF switch - -%%%% add \UTF switch to Babel \extras + +%% \ifpxbb@babel +\newbool{pxbb@babel} +\@ifpackageloaded{babel}{\pxbb@babeltrue}{} + +%% environment check +% The feature 'switchfont' requires multi-CJK support. +\ifpxbb@switchfont + \ifpxbb@otfmulti\else + \ifupTeX\else + \pxbb@warn@nocjk +\fi\fi\fi + +%% resolve the expected main language +\ifundef\pxbb@main@lang{%then + % if 'main' is not specified + \ifbool{pxbb@babel}% + % in separate loading, main is unchanged + {\let\pxbb@main@lang\bbl@main@language}% + % in lumped loading, main is the one specified last + {\let\pxbb@main@lang\pxbb@last@lang}% +}{} + +%% resolve the caption language setting +\bxIfExpToEqual{\pxbb@caption@lang}{auto}{%then + % if 'caption=auto' is given + \bxIfcsundef{pxbb@triv/\pxbb@main@lang} + % if main is not triv then caption=switch + {\def\pxbb@caption@lang{switch}}% + % if main is triv then caption=default + {\def\pxbb@caption@lang{default}}% +}{} + +\ifx t\bxUseDebug +\def\pxbb@bool#1{\ifbool{#1}{yes}{no}} +\bxForEachIn\pxbb@cjk@langid@list\do{% +\bxDebug{#1 = \@nameuse{pxbb@langname/#1}}} +\bxDebug{main = \pxbb@main@lang} +\bxDebug{caption = \pxbb@caption@lang} +\bxDebug{switchfont = \pxbb@bool{pxbb@switchfont}} +\bxDebug{load-list = \pxbb@lang@load@list} +\bxDebug{last = \pxbb@last@lang} +\bxDebug{babel = \pxbb@bool{pxbb@babel}} +\bxDebug{otfmulti = \pxbb@bool{pxbb@otfmulti}} +\fi + +%--------------------------------------- lumped loading +\ifpxbb@babel\else + +%% load Babel +\let\pxbb@tmpa\pxbb@lang@load@list +\ifx\pxbb@tmpa\@empty \def\pxbb@tmpa{english}\fi +\edef\pxbb@tmpa{% + \noexpand\RequirePackage[\pxbb@tmpa]{babel}% +}\pxbb@tmpa + +\fi +%--------------------------------------- separate loading +\ifpxbb@babel + +%% \pxbb@g@add@lang@proc +\bxPreamble\let\pxbb@g@add@lang@proc\@empty +\begingroup + +%% remove languages that are already loaded +\let\pxbb@tmpa\@empty +\bxForEachIn\pxbb@lang@load@list\do{% + \bxIfcsundef{date#1}{\appto\pxbb@tmpa{,#1}}{}} +\bxChompComma\pxbb@tmpa +\let\pxbb@lang@load@list\pxbb@tmpa +\bxDebug{\pxbb@lang@load@list} + +%% if some language should be added... +\ifx\pxbb@lang@load@list\@empty\else + \ifdef\bbl@load@language{% + \PackageWarning\pxbb@pkgname + {Some languages need to be added. Note that the\MessageBreak + process of addition is unreliable}% + }{%else + \PackageError\pxbb@pkgname + {Some languages need to be added, but the addition\MessageBreak + is not supported because Babel in use is too old}% + {The languages to be added will be ignored.\MessageBreak + \@ehc}} +\fi + +%% build \pxbb@g@add@lang@proc +\bxForEachIn\pxbb@lang@load@list\do{% + \csdef{pxbb@use/#1}{t}} +\def\pxbb@babel@alias#1#2{% + \bxIfcsundef{pxbb@use/#1}{}{%else + % if the real name is available, then ok + \IfFileExists{#1.ldf}{}{%else + \csdef{pxbb@bbl@opt/#1}{\bbl@load@language{#2}}}}} +\def\pxbb@babel@load@proc#1{% + \bxIfcsundef{pxbb@use/#1}{\@gobble}{%else + \csdef{pxbb@bbl@opt/#1}}} +% the alias list +\pxbb@babel@alias{acadian}{frenchb} +\pxbb@babel@alias{afrikaans}{dutch} +\pxbb@babel@alias{american}{english} +\pxbb@babel@alias{australian}{english} +\pxbb@babel@alias{austrian}{germanb} +\pxbb@babel@alias{bahasa}{bahasai} +\pxbb@babel@alias{bahasai}{bahasai} +\pxbb@babel@alias{bahasam}{bahasam} +\pxbb@babel@alias{brazil}{portuges} +\pxbb@babel@alias{brazilian}{portuges} +\pxbb@babel@alias{british}{english} +\pxbb@babel@alias{canadian}{english} +\pxbb@babel@alias{canadien}{frenchb} +\pxbb@babel@alias{francais}{frenchb} +\pxbb@babel@alias{french}{frenchb} +\pxbb@babel@alias{german}{germanb} +\pxbb@babel@alias{hungarian}{magyar} +\pxbb@babel@alias{indon}{bahasai} +\pxbb@babel@alias{indonesian}{bahasai} +\pxbb@babel@alias{lowersorbian}{lsorbian} +\pxbb@babel@alias{malay}{bahasam} +\pxbb@babel@alias{melayu}{bahasam} +\pxbb@babel@alias{meyalu}{bahasam} +\pxbb@babel@alias{naustrian}{ngermanb} +\pxbb@babel@alias{newzealand}{english} +\pxbb@babel@alias{ngerman}{ngermanb} +\pxbb@babel@alias{nynorsk}{norsk} +\pxbb@babel@alias{portuguese}{portuges} +\pxbb@babel@alias{russian}{russianb} +\pxbb@babel@alias{UKenglish}{english} +\pxbb@babel@alias{ukrainian}{ukraineb} +\pxbb@babel@alias{uppersorbian}{usorbian} +\pxbb@babel@alias{USenglish}{english} +\pxbb@babel@load@proc{hebrew}{% + \input{rlbabel.def}\bbl@load@language{hebrew}} +\pxbb@babel@load@proc{polutonikogreek}{% + \bbl@load@language{greek}\languageattribute{greek}{polutoniko}} + +%% load addtional languages +\bxForEachIn\pxbb@lang@load@list\do{% + \gappto\pxbb@g@add@lang@proc{\def\CurrentOption{#1}}% + \bxIfcsundef{pxbb@bbl@opt/#1}% + {\gappto\pxbb@g@add@lang@proc{\bbl@load@language{#1}}}% + {\letcs\pxbb@tmpa{pxbb@bbl@opt/#1}% + \xappto\pxbb@g@add@lang@proc{\expandonce{\pxbb@tmpa}}}} +\gappto\pxbb@g@add@lang@proc{\let\CurrentOption\@empty} + +\endgroup +% dispatch +\pxbb@g@add@lang@proc + +\fi +%--------------------------------------- post-load process + +%% declare 'triv' languages +\bxForEachIn\pxbb@cjk@langid@list\do{% + \bxWithArgFullExpd{\@nameuse{pxbb@langname/#1}}\do{% + \bxIfcsundefX{date##1}{\bxTrivLangDef{##1}}{}}} +\ifundef\datecjkmulti{\bxTrivLangDef{cjkmulti}}{} + +%% set main language +\setmainlanguage{\pxbb@main@lang} + +%% set caption language +\bxIfExpToEqual{\pxbb@caption@lang}{switch}{}%else + {\bxProvideCaptionLanguage{\pxbb@caption@lang}} + +%--------------------------------------- Adding font switch to 'extra's + +\ifpxbb@otfmulti %----<*otfmulti> + +%% add \UTF switch to Babel \extras \ifpxbb@switchfont -\def\pxbb@addtoextras@otf#1{% - \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}}% - \expandafter\pxbb@addtoextras@otf@a\pxbb@arg} -\def\pxbb@addtoextras@otf@a#1#2{% - \expandafter\addto\csname extras#1\endcsname{% - \babel@save\UTF \let\UTF#2}} +\bxPreamble\def\pxbb@addtoextras@otf#1{% + \pxbb@addtoextras@otf@a{\bxCsuseX{pxbb@langname/#1}}} +\bxPreamble\def\pxbb@addtoextras@otf@a#1#2{% + \csappto{extras#1}{\babel@save\UTF \let\UTF#2}} \pxbb@addtoextras@otf{korean}{\UTFK} \pxbb@addtoextras@otf{schinese}{\UTFC} \pxbb@addtoextras@otf{tchinese}{\UTFT} \pxbb@addtoextras@otf@a{cjkmulti}{\UTFM} -\@onlypreamble\pxbb@addtoextras@otf -\@onlypreamble\pxbb@addtoextras@otf@a \fi % pxbb@switchfont -\fi %=================================== end +\fi %----</otfmulti> -\ifupTeX %============================== for upTeX -%%------ encoding switch according to NFSS -\bxInputDefFile{pxbasenc} +\ifupTeX %----<*upTeX> + +%% preparations +\bxRequireDefinition{pxbasenc} \pxBDHookEncSwitchOTF -%%%% declarations for upTeX standatd CJK fonts +%% declarations for upTeX standatd CJK fonts \ifpxbb@pxotf\else \pxDeclareBasicCJKEncoding{J20}{J30}% UniJIS \pxDeclareBasicCJKFamily{J20}{!upjpnrm-h}{!upjpngt-h}{*gt}{*gt} @@ -130,42 +319,53 @@ \pxDeclareBasicCJKFamily{J33}{!uptchrm-v}{!uptchgt-v}{*gt}{*gt} \fi -%%%% add font switch to Babel \extras +%--------------------------------------- add font switch to Babel \extras \ifpxbb@switchfont -\def\pxbb@addtoextras#1#2#3{% - \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}% + +%% \pxbb@set@full@ja@enc +% Sets to \pxbb@ful@ja@enc the destination encoding. +\bxForEachIn{J20,J24}\do{% all full japanese encodings + \csdef{pxbb@is@fje/#1}{t}} +\edef\pxbb@dflt@ja@enc{% default full japanese encoding + \ifbool{pxbb@prefermmivjis}{J24}{J20}} +\def\pxbb@set@full@ja@enc{% + \edef\pxbb@full@ja@enc{% + \bxIfcsundefX{pxbb@is@fje/\cy@encoding}% + {\pxbb@dflt@ja@enc}{\cy@encoding}}} + +%% \pxbb@addtoextras +\bxPreamble\def\pxbb@addtoextras#1#2#3{% + \edef\pxbb@arg{{\@nameuse{pxbb@langname/#1}}% \if t#2{\noexpand\pxbb@full@ja@enc}{\noexpand\@undefined}% \else{#3}{t}\fi}% \expandafter\pxbb@addtoextras@a\pxbb@arg} -\def\pxbb@addtoextras@a#1#2#3{% - \expandafter\addto\csname extras#1\endcsname{% - \pxbb@set@full@ja@enc \let\pxInNonJaLanguage=#3% +\bxPreamble\def\pxbb@addtoextras@a#1#2#3{% + \csappto{extras#1}{% + \pxbb@set@full@ja@enc + \let\pxInNonJaLanguage=#3% \let\pxbb@org@encoding\cy@encoding \kanjiencoding{#2}\selectfont}% - \expandafter\addto\csname noextras#1\endcsname{% + \csappto{noextras#1}{% \let\pxInNonJaLanguage\@undefined \kanjiencoding{\pxbb@org@encoding}\selectfont}} \pxbb@addtoextras{japanese}{t}{} \pxbb@addtoextras{korean}{f}{J21} \pxbb@addtoextras{schinese}{f}{J22} \pxbb@addtoextras{tchinese}{f}{J23} -\@onlypreamble\pxbb@addtoextras -\@onlypreamble\pxbb@addtoextras@a -%% \pxbb@set@full@ja@enc -\edef\pxbb@dflt@ja@enc{\ifpxbb@prefermmixjis J24\else J20\fi} -\@namedef{pxbb@SFJE/J20}{\def\pxbb@full@ja@enc{J20}} -\@namedef{pxbb@SFJE/J24}{\def\pxbb@full@ja@enc{J24}} -\def\pxbb@set@full@ja@enc{% - \let\pxbb@full@ja@enc\pxbb@dflt@ja@enc - \csname pxbb@SFJE/\cy@encoding\endcsname} + \fi % pxbb@switchfont -\fi %=================================== end +\fi %----</upTeX> -%%------ all done -\endinput -%% EOF +%--------------------------------------- Other user commands +%%<*> \cjklanguagename{<lang_id>} +% Expands to the babel language name for <lang_id>. +\newcommand*\cjklanguagename[1]{% + \@nameuse{pxbb@langname/#1}} + +%--------------------------------------- all done +\endinput % % Roman, H Gothic, H Roman, V Gothic, H : metric encod. % ------------ ------------ ------------ ------------ : ------ -------- @@ -184,3 +384,4 @@ % * upstsl-h upstht-h upstsl-v upstht-v : RAW GB % uptchrm-h uptchgt-h uptchrm-v uptchgt-v : uptch CNS % * upmsl-h upmhm-h upmsl-v upmhm-v : RAW CNS +%% EOF |