diff options
author | Norbert Preining <norbert@preining.info> | 2022-07-21 03:00:45 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-07-21 03:00:45 +0000 |
commit | 5cf5182b44c08dfb2bc977ce5aa5ca6d03b36923 (patch) | |
tree | b32d29c9fb1289ccc994ee099b27c4a45b621a0a /macros/jptex/generic/fixjfm/fixjfm.sty | |
parent | 2773132ea593028dafe764f7560fd94ecb827d3d (diff) |
CTAN sync 202207210300
Diffstat (limited to 'macros/jptex/generic/fixjfm/fixjfm.sty')
-rw-r--r-- | macros/jptex/generic/fixjfm/fixjfm.sty | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/macros/jptex/generic/fixjfm/fixjfm.sty b/macros/jptex/generic/fixjfm/fixjfm.sty new file mode 100644 index 0000000000..11887daafc --- /dev/null +++ b/macros/jptex/generic/fixjfm/fixjfm.sty @@ -0,0 +1,278 @@ + + +% fixjfm.sty +% Copyright 2017--2018 Yue ZHANG +% License: Knuth License (https://ctan.org/license/knuth) + +\csname ENDINPUTFIXJFMDOTSTY\endcsname + +\let\ENDINPUTFIXJFMDOTSTY=\endinput + +\begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \else + \ProvidesPackage{fixjfm}[2018/03/24 v0.8 Fix JFM (for *pTeX)]% + \fi + +\edef\FIXJFMDOTSTYRESTORECATCODE{\catcode`\noexpand\@=\the\catcode`\@\relax} + +\catcode`\@=11\relax + +% common utilities + +\def\fixjfm@ifprimitive#1{% + \begingroup + \edef\fixjfm@temp@meaning{\meaning#1}% + \edef\fixjfm@temp@string{\string#1}% + \expandafter + \endgroup + \ifx\fixjfm@temp@meaning\fixjfm@temp@string} + +\fixjfm@ifprimitive\tate +\else + \errmessage{pTeX / e-pTeX / upTeX / e-upTeX / ApTeX is required}% + \FIXJFMDOTSTYRESTORECATCODE + \expandafter\endinput +\fi + +\def\fixjfm@empty{} + +\begingroup + \let\CATCODE=\catcode + \let\RELAX=\relax + \let\GDEF=\gdef + \let\ENDGROUP=\endgroup + \CATCODE`\k=12\RELAX + \CATCODE`\a=12\RELAX + \CATCODE`\n=12\RELAX + \CATCODE`\j=12\RELAX + \CATCODE`\i=12\RELAX + \CATCODE`\c=12\RELAX + \CATCODE`\h=12\RELAX + \CATCODE`\r=12\RELAX + \CATCODE`\t=12\RELAX + \CATCODE`\e=12\RELAX + \GDEF\FIXJFM@KANJICHARACTER{kanji character }% +\ENDGROUP + +\def\fixjfm@get@inhibitxspcode#1{% + \expandafter\expandafter\expandafter\fixjfm@@get@inhibitxspcode + \expandafter\meaning\expandafter#1\FIXJFM@KANJICHARACTER\relax\fixjfm@nil} + +\expandafter\def\expandafter\fixjfm@@get@inhibitxspcode + \expandafter#\expandafter1\FIXJFM@KANJICHARACTER#2#3\fixjfm@nil{% + \count2=-1\relax + \def\fixjfm@temp@tokens{#1}% + \ifx\fixjfm@temp@tokens\fixjfm@empty + \count2=\inhibitxspcode`#2\relax + \fi} + +% \leavevmode + +\fixjfm@ifprimitive\quitvmode + \let\leavevmode=\quitvmode +\fi + +% \fixjfmspacing + +\def\fixjfmspacing{\FixJFMSpacing} + +\newif\iffixjfm@lastnodechar@available@ + +\fixjfm@ifprimitive\lastnodechar + \fixjfm@lastnodechar@available@true +\fi + +\iffixjfm@lastnodechar@available@ + \begingroup + \kansujichar1=\sjis"8ABF\relax % U+6F22: Kanji Han + \kansujichar2=\sjis"82A0\relax % U+3042: Hiragana A + \kansujichar3=\sjis"8142\relax % U+3002: CJK Full Stop + \xdef\fixjfm@kanji{\kansuji1}% + \xdef\fixjfm@kana{\kansuji2}% + \xdef\fixjfm@other{\kansuji3}% + \endgroup + \csname newif\expandafter\endcsname\csname iffixjfm@sp@status@\endcsname + \def\fixjfm@ifautospacing{% + \fixjfm@sp@status@false + \begingroup + \kanjiskip=10pt\relax + \setbox0=\hbox{\fixjfm@kanji\fixjfm@kanji\fixjfm@kanji}% + \dimen4=\wd0\relax + \noautospacing + \setbox0=\hbox{\fixjfm@kanji\fixjfm@kanji\fixjfm@kanji}% + \dimen2=\wd0\relax + \expandafter + \endgroup + \ifdim\dimen4>\dimen2\relax + \fixjfm@sp@status@true + \fi}% + \def\fixjfm@ifautoxspacing{% + \fixjfm@sp@status@false + \begingroup + \xspcode`\A=3\relax + \inhibitxspcode\sjis"8ABF=3\relax % U+6F22: Kanji Han + \xkanjiskip=20pt\relax + \setbox0=\hbox{\fixjfm@kanji A\fixjfm@kanji}% + \dimen4=\wd0\relax + \noautoxspacing + \setbox0=\hbox{\fixjfm@kanji A\fixjfm@kanji}% + \dimen2=\wd0\relax + \expandafter + \endgroup + \ifdim\dimen4>\dimen2\relax + \fixjfm@sp@status@true + \fi}% + \def\FixJFMSpacing{\futurelet\fixjfm@sp@temp@token\fixjfm@fixspacing}% + \def\fixjfm@fixspacing{% + \begingroup + \count0=\lastnodechar + \edef\fixjfm@sp@temp@tokens{\fixjfm@sp@temp@token}% + \expandafter\fixjfm@@fixspacing\fixjfm@sp@temp@tokens\relax\fixjfm@sp@nil + \ifnum\count0>-1\relax + \ifnum\count0<256\relax + \ifnum\xspcode\count0>1\relax + \ifnum\count2>1\relax + \fixjfm@ifautoxspacing + \iffixjfm@sp@status@ + \hskip\xkanjiskip + \fi + \fi + \fi + \else + \fixjfm@ifautospacing + \iffixjfm@sp@status@ + \hskip\kanjiskip + \fi + \fi + \setbox0=\hbox{% + \inhibitglue\char\count0\relax\fixjfm@sp@temp@token\inhibitglue}% + \setbox2=\hbox{% + \inhibitglue\char\count0 \fixjfm@sp@temp@token\inhibitglue}% + \dimen0=\wd2\relax + \advance\dimen0 by -\wd0\relax + \fixjfm@temp@hskip + \fi + \endgroup}% + \long\def\fixjfm@@fixspacing#1#2\fixjfm@sp@nil{% + \count2=1\relax + \ifcat#1\fixjfm@kanji + \else + \ifcat#1\fixjfm@kana + \else + \ifcat#1\fixjfm@other + \else + \count0=-1\relax + \count2=0\relax + \fi + \fi + \fi + \ifnum\count2>0\relax + \fixjfm@get@inhibitxspcode#1\relax + \fi}% + \def\SetFixJFMSpacingStretch#1{\def\fixjfm@temp@hskip@stretch{#1}}% + \def\SetFixJFMSpacingShrink#1{\def\fixjfm@temp@hskip@shrink{#1}}% + \def\fixjfm@temp@hskip{% + \hskip\dimen0 plus \fixjfm@temp@hskip@stretch + minus \fixjfm@temp@hskip@shrink\relax}% + \SetFixJFMSpacingStretch{0.05zw}% + \SetFixJFMSpacingShrink{0.05zw}% +\else + \let\FixJFMSpacing=\fixjfm@empty + \def\SetFixJFMSpacingStretch#1{}% + \def\SetFixJFMSpacingShrink#1{}% +\fi + +\newif\ifUseFixJFMCJKTextFontCommands +\newif\ifUseStandardCJKTextFontCommands + +\begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname DeclareTextFontCommand\endcsname\relax + \def\DeclareFixJFMCJKTextFontCommand#1#2{}% + \def\DeclareStandardCJKTextFontCommand#1#2{}% + \let\UseFixJFMCJKTextFontCommands=\fixjfm@empty + \let\UseStandardCJKTextFontCommands=\fixjfm@empty + \def\AppendToUseXCJKTextFontCommands#1#2{}% + \else + \def\DeclareFixJFMCJKTextFontCommand#1#2{% + \DeclareRobustCommand#1[1]{% + \relax\ifmmode\expandafter\nfss@text\fi + {#2\fixjfmspacing##1}\fixjfmspacing}}% + \def\DeclareStandardCJKTextFontCommand#1#2{% + \DeclareRobustCommand#1[1]{% + \relax\ifmmode\expandafter\nfss@text\fi{#2##1}}}% + \def\UseFixJFMCJKTextFontCommands{% + \UseFixJFMCJKTextFontCommandstrue + \UseStandardCJKTextFontCommandsfalse + \DeclareFixJFMCJKTextFontCommand\textmc{\mcfamily}% + \DeclareFixJFMCJKTextFontCommand\textgt{\gtfamily}}% + \def\UseStandardCJKTextFontCommands{% + \UseStandardCJKTextFontCommandstrue + \UseFixJFMCJKTextFontCommandsfalse + \DeclareStandardCJKTextFontCommand\textmc{\mcfamily}% + \DeclareStandardCJKTextFontCommand\textgt{\gtfamily}}% + \def\AppendToUseXCJKTextFontCommands#1#2{% + \g@addto@macro\UseFixJFMCJKTextFontCommands{% + \DeclareFixJFMCJKTextFontCommand#1{#2}}% + \g@addto@macro\UseStandardCJKTextFontCommands{% + \DeclareStandardCJKTextFontCommand#1{#2}}% + \ifUseFixJFMCJKTextFontCommands + \DeclareFixJFMCJKTextFontCommand#1{#2}% + \else + \DeclareStandardCJKTextFontCommand#1{#2}% + \fi}% + \UseFixJFMCJKTextFontCommands + \fi + +% \inhibitglue + +\fixjfm@ifprimitive\protected + \protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}% +\else + \def\<{\inhibitglue}% +\fi + +% \fixjfmparindent + +\def\fixjfmparindent{\FixJFMParindent} + +\begingroup + \expandafter\ifx\csname useparheadparenindent\endcsname\relax % bxjaprnind.sty + \else + \global\let\FixJFMParindent=\fixjfm@empty + \global\let\EveryparPreHook=\fixjfm@empty + \global\let\EveryparPostHook=\fixjfm@empty + \aftergroup\FIXJFMDOTSTYRESTORECATCODE + \aftergroup\endinput + \fi +\endgroup + +\def\FixJFMParindent{\futurelet\fixjfm@pi@temp@token\fixjfm@fixparindent} + +\def\fixjfm@fixparindent{% + \begingroup + \fixjfm@get@inhibitxspcode\fixjfm@pi@temp@token + \ifnum\count2=2\relax\inhibitglue\fi + \endgroup} + +\begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname PushPostHook\endcsname\relax % everyhook.sty + \def\EveryparPreHook{}% + \def\EveryparPostHook{\fixjfmparindent}% + \let\fixjfm@previous@everypar=\everypar + \csname newtoks\expandafter\endcsname\csname everypar\endcsname + \let\fixjfm@private@everypar=\everypar + \fixjfm@private@everypar=\fixjfm@previous@everypar + \fixjfm@previous@everypar={% + \EveryparPreHook + \the\expandafter\fixjfm@private@everypar + \EveryparPostHook}% + \else + \PushPostHook{par}{\fixjfmparindent}% + \let\EveryparPreHook=\fixjfm@empty + \let\EveryparPostHook=\fixjfm@empty + \fi + +\FIXJFMDOTSTYRESTORECATCODE + +\endinput |