% Language definition file (part of polyglossia v2.10 -- 2026/04/18)
%
\ProvidesFile{gloss-chinese.ldf}[polyglossia: module for Chinese]

\PolyglossiaSetup{chinese}{
    bcp47=zh,
    bcp47-language=zh,
    bcp47-region=CN,
    bcp47-script=Hans,
    script=CJK,
    scripttag=hani,
    language={Chinese Simplified},
    langtag=ZHS,
    hyphennames={nohyphenation},
    frenchspacing=false,
    localnumeral=chinesenumerals,
    Localnumeral=chinesenumerals
}

% BCP-47 compliant aliases
\setlanguagealias*{chinese}{zh}
\setlanguagealias*[variant=simplified]{chinese}{zh-CN}
\setlanguagealias*[variant=traditional]{chinese}{zh-TW}

\@ifundefined{ifchinese@traditional}%
  {\newif\ifchinese@traditional}{}

\@ifundefined{ifchinese@numerals}%
  {\newif\ifchinese@numerals}{}

\def\chinese@variant{chinese}

\DeclareKeys[polyglossia/gloss/chinese]
  {
    variant.choice:,
    variant / cn.code =
      {%
        \chinese@traditionalfalse
        \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
      },
    variant / simplified.code =
      {%
        \chinese@traditionalfalse
        \SetLanguageKeys{chinese}{language={Chinese Simplified},langtag=ZHS,bcp47=zh-CN,bcp47-language=zh,bcp47-region=CN,bcp47-script=Hans}%
      },
    variant / tw.code =
      {%
        \chinese@traditionaltrue
        \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
      },
    variant / traditional.code =
      {%
        \chinese@traditionaltrue
        \SetLanguageKeys{chinese}{language={Chinese Traditional},langtag=ZHT,bcp47=zh-TW,bcp47-language=zh,bcp47-region=TW,bcp47-script=Hant}%
      },
    variant.default:n = cn,
    variant/unknown.code = \xpg@warning{Unknown Chinese variant `#1'},
    numerals.choice:,
    numerals / arabic.code =
      {%
        \chinese@numeralsfalse
        \SetLanguageKeys{chinese}{bcp47-extension-u=nu-latn}%
      },
    numerals / chinese.code =
      {%
        \chinese@numeralstrue
        \SetLanguageKeys{chinese}{bcp47-extension-u=nu-hant}%
      },
    numerals.default:n = arabic,
    numerals/unknown.code = \xpg@warning{Unknown Chinese numerals value `#1'}
  }

% Register default options
\InitializeGlossOptions{chinese}{variant=cn,numerals=arabic}
%\InitializeGlossOptions{chinese}{variant=tw,numerals=arabic}
% Register alias options
\SetLanguageAliasValues{chinese}{variant}{cn,simplified}
\SetLanguageAliasValues{chinese}{variant}{tw,traditional}


\providecommand*\presection{}
\providecommand*\presubsection{}
\providecommand*\presubsubsection{}
\providecommand*\postsection{}
\providecommand*\postsubsection{}
\providecommand*\postsubsubsection{}
\let\xpg@save@presection\presection
\let\xpg@save@presubsection\presubsection
\let\xpg@save@presubsubsection\presubsubsection
\let\xpg@save@postsection\postsection
\let\xpg@save@postsubsection\postsubsection
\let\xpg@save@postsubsubsection\postsubsubsection
\let\xpg@save@seccntformat\@seccntformat

\def\chinese@capsformat{%
    \def\@seccntformat##1{%
        \csname pre##1\endcsname%
        \csname the##1\endcsname%
        \csname post##1\endcsname%
    }%
    \ifchinese@traditional
        \def\postsection{節\space}%
        \def\postsubsection{節\space}%
        \def\postsubsubsection{節\space}%
    \else
        \def\postsection{节\space}%
        \def\postsubsection{节\space}%
        \def\postsubsubsection{节\space}%
    \fi
    \def\presection{第}%
    \def\presubsection{第}%
    \def\presubsubsection{第}%
}

\def\nochinese@capsformat{%
    \let\presection\xpg@save@presection%
    \let\presubsection\xpg@save@presubsection%
    \let\presubsubsection\xpg@save@presubsubsection%
    \let\postsection\xpg@save@postsection%
    \let\postsubsection\xpg@save@postsubsection%
    \let\postsubsubsection\xpg@save@postsubsubsection%
    \let\@seccntformat\xpg@save@seccntformat%
}

\def\captionschinese{%
    \ifchinese@traditional
        \captions@chinese@traditional
    \else
        \captions@chinese@simplified
    \fi
}

\def\captions@chinese@traditional{%
    \def\contentsname{目錄}%
    \def\listfigurename{插圖}%
    \def\listtablename{表格}%
    \def\figurename{圖}%
    \def\tablename{表}%
    \def\abstractname{摘要}%
    \def\prefacename{前言}%
    \def\indexname{索引}%
    \def\bibname{參考文獻}%
    \def\appendixname{附錄}%
    \def\proofname{證明}%
    \def\refname{參考文獻}%
    \def\partname##1##2{第##1##2 部分}%
    \def\chaptername##1##2{第##1##2 章}%
    \def\pagename##1##2{第##1##2 頁}%
    \def\seename{參照}%
    \def\alsoname{參照}%
    \def\enclname{附件}%
    \def\ccname{抄送}%
    \def\headtoname{收件人}%
    \def\glossaryname{詞彙表}%
}
\def\captions@chinese@simplified{%
    \def\contentsname{目录}%
    \def\listfigurename{插图}%
    \def\listtablename{表格}%
    \def\figurename{图}%
    \def\tablename{表}%
    \def\abstractname{摘要}%
    \def\prefacename{前言}%
    \def\indexname{索引}%
    \def\bibname{参考文献}%
    \def\appendixname{附录}%
    \def\proofname{证明}%
    \def\refname{参考文献}%
    \def\partname##1##2{第##1##2 部分}%
    \def\chaptername##1##2{第##1##2 章}%
    \def\pagename##1##2{第##1##2 页}%
    \def\seename{参照}%
    \def\alsoname{参照}%
    \def\enclname{附件}%
    \def\ccname{抄送}%
    \def\headtoname{收件人}%
    \def\glossaryname{词汇表}%
}

\newcount\c@TempJNum%

\def\@ChineseDigit#1{%
    \ifcase#1\or 一\or 二\or 三\or 四\or 五\or%
        六\or 七\or 八\or 九\or 十\or%
        十一\or 十二\or 十三\or 十四\or 十五\or%
        十六\or 十七\or 十八\or 十九\or 二十\or%
        二十一\or 二十二\or 二十三\or 二十四\or 二十五\or%
        二十六\or 二十七\or 二十八\or 二十九\or 三十\or%
        三十一\or 三十二\or 三十三\or 三十四\or 三十五\or%
        三十六\or 三十七\or 三十八\or 三十九\or 四十\or%
        四十一\or 四十二\or 四十三\or 四十四\or 四十五\or%
        四十六\or 四十七\or 四十八\or 四十九\or 五十\or%
        五十一\or 五十二\or 五十三\or 五十四\or 五十五\or%
        五十六\or 五十七\or 五十八\or 五十九\or 六十\or%
        六十一\or 六十二\or 六十三\or 六十四\or 六十五\or%
        六十六\or 六十七\or 六十八\or 六十九\or 七十\or%
        七十一\or 七十二\or 七十三\or 七十四\or 七十五\or%
        七十六\or 七十七\or 七十八\or 七十九\or 八十\or%
        八十一\or 八十二\or 八十三\or 八十四\or 八十五\or%
        八十六\or 八十七\or 八十八\or 八十九\or 九十\or%
        九十一\or 九十二\or 九十三\or 九十四\or 九十五\or%
        九十六\or 九十七\or 九十八\or 九十九%
    \else
        \@ctrerr%
    \fi\relax%
}

\def\@ChineseNum#1{%
    \c@TempJNum=#1\divide\c@TempJNum by 1000\relax%
    \ifnum\c@TempJNum=\z@\c@TempJNum=#1%
        \divide\c@TempJNum by 100\relax%
        \ifnum\c@TempJNum=\z@\@ChineseDigit{#1}\relax%
        \else
            \ifcase\c@TempJNum\or 百\or 二百\or 三百\or 四百\or 五百\or
                六百\or 七百\or 八百\or 九百%
            \fi
            \c@TempJNum=#1\divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@ChineseDigit\c@TempJNum\relax%
        \fi%
    \else
        \ifcase\c@TempJNum\or 千\or 二千\or 三千\or 四千\or 五千\or
            六千\or 七千\or 八千\or 九千%
        \fi
        \c@TempJNum=#1\divide\c@TempJNum by 1000\multiply\c@TempJNum by -1000\advance\c@TempJNum#1\divide\c@TempJNum by 100\relax%
        \ifnum\c@TempJNum=\z@\c@TempJNum=#1%
            \divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@ChineseDigit\c@TempJNum\relax%
        \else
            \ifcase\c@TempJNum\or 百\or 二百\or 三百\or 四百\or 五百\or
                六百\or 七百\or 八百\or 九百%
            \fi
            \c@TempJNum=#1\divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@ChineseDigit\c@TempJNum\relax%
        \fi
    \fi
}

\def\@chinesenumber#1{%
    \@tempcnta=#1%
    \ifnum\@tempcnta=\z@{〇}%
    \else
        \ifnum\@tempcnta<\z@{負}%
            \multiply\@tempcnta by -1%
        \fi
        \@tempcntb=\@tempcnta\divide\@tempcntb by 10000\relax%
        \ifnum\@tempcntb=\z@\@ChineseNum%
            \@tempcnta%
        \else
            \@tempcntb=\@tempcnta\divide\@tempcntb by 100000000\relax%
            \ifnum\@tempcntb=\z@\@tempcntb=\@tempcnta%
                \divide\@tempcntb by 10000%
                \@ChineseNum\@tempcntb{万}\@tempcntb=\@tempcnta%
                \divide\@tempcntb by 10000\multiply\@tempcntb by -10000%
                \advance\@tempcntb\@tempcnta\relax\@ChineseNum\@tempcntb%
            \else
                \@ChineseNum\@tempcntb{億}\@tempcntb=\@tempcnta%
                \divide\@tempcntb by 100000000\multiply\@tempcntb by -100000000%
                \advance\@tempcntb\@tempcnta\divide\@tempcntb by 10000\relax%
                \ifnum\@tempcntb=\z@%
                \else
                    \@ChineseNum\@tempcntb{万}%
                \fi
                \@tempcntb=\@tempcnta\divide\@tempcntb by 10000%
                \multiply\@tempcntb by -10000\advance\@tempcntb\@tempcnta%
                \@ChineseNum\@tempcntb%
            \fi
        \fi
    \fi
}


\newcommand{\chinesenumerals}[2]{\chinesenumber{#2}}

\def\chinesenumber#1{%
  \ifchinese@numerals
    \@chinesenumber{\number#1}%
  \else
    \number#1%
  \fi}

\let\chinesenumeral=\chinesenumber

\def\datechinese{%
    \def\today{%
        \ifchinese@numerals
           \@chinesenumber{\number\year}%
        \else
           \number\year\,%
        \fi
        {年}%
        \ifchinese@numerals
           \@chinesenumber{\number\month}%
        \else
           \,\number\month\,%
        \fi
        {月}%
        \ifchinese@numerals
           \@chinesenumber{\number\day}%
        \else
           \,\number\day\,%
        \fi
        {日}%
    }%
}

\ifluatex
  \@ifundefined{xpg@attr@cjkspacing}{\newattribute\xpg@attr@cjkspacing}{}
  \directlua{ require"polyglossia-cjk-spacing" }
  \def\chinese@simplified@spacing {\xpg@attr@cjkspacing=\thr@@}  % chinese simplified
  \def\chinese@traditional@spacing{\xpg@attr@cjkspacing=4\relax} % chinese traditional
  \def\nochinese@spacing{\unsetattribute\xpg@attr@cjkspacing}
\else
  \@ifundefined{xpg@orig@XeTeXlinebreakskip}{\newskip\xpg@orig@XeTeXlinebreakskip}{}
  \xpg@orig@XeTeXlinebreakskip=\XeTeXlinebreakskip
  \def\chinese@simplified@spacing{%
    \XeTeXlinebreaklocale "zh"%
    \XeTeXlinebreakskip = 0pt plus 0.1em minus 0.01em%
  }
  \let\chinese@traditional@spacing\chinese@simplified@spacing
  \def\nochinese@spacing{%
    \XeTeXlinebreakskip=\xpg@orig@XeTeXlinebreakskip%
    \XeTeXlinebreaklocale ""%
  }
\fi

\def\noextras@chinese{%
    \nochinese@capsformat%
    \nochinese@spacing%
}

\def\blockextras@chinese{%
    \chinese@capsformat%
    \ifchinese@traditional
      \chinese@traditional@spacing%
    \else
      \chinese@simplified@spacing%
    \fi%
}

\def\inlineextras@chinese{%
    \chinese@capsformat%
    \ifchinese@traditional
      \chinese@traditional@spacing%
    \else
      \chinese@simplified@spacing%
    \fi%
}

\ifxetex
  % \XeTeXlinebreaklocale is global,
  % so we need to reset after nested language got closed
  \def\nestedextras@chinese{%
    \ifchinese@traditional
      \chinese@traditional@spacing%
    \else
      \chinese@simplified@spacing%
    \fi%
  }
\fi

% Based on contributions of Toru Inagaki, Norio Iwase, François Charette

