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

\RequirePackage{devanagaridigits}

\PolyglossiaSetup{sanskrit}{
  bcp47=sa-Deva,
  bcp47-language=sa,
  bcp47-script=Deva,
  bcp47-casing=sa-Deva,
  langtag=SAN,
  hyphennames={sanskrit,prakrit},
  hyphenmins={1,3},
  frenchspacing=true,
  localnumeral=sanskritnumerals,
  Localnumeral=sanskritnumerals
}

% BCP-47 compliant aliases
\setlanguagealias*{sanskrit}{sa}
\setlanguagealias*[script=devanagari]{sanskrit}{sa-Deva}
\setlanguagealias*[script=malayalam]{sanskrit}{sa-Mlym}
\setlanguagealias*[script=telugu]{sanskrit}{sa-Telu}
\setlanguagealias*[script=bengali]{sanskrit}{sa-Beng}
\setlanguagealias*[script=kannada]{sanskrit}{sa-Knda}
\setlanguagealias*[script=gujarati]{sanskrit}{sa-Gujr}
\setlanguagealias*[script=latin]{sanskrit}{sa-Latn}

\def\fontsetup@sanskrit@devanagari{%
  \SetLanguageKeys{sanskrit}{scripttag=deva,script=Devanagari,bcp47=sa-Deva,bcp47-language=sa,bcp47-script=Deva,bcp47-casing=sa-Deva}}
\def\fontsetup@sanskrit@gujarati{%
  \SetLanguageKeys{sanskrit}{scripttag=gujr,script=Gujarati,bcp47=sa-Gujr,bcp47-language=sa,bcp47-script=Gujr,bcp47-casing=sa-Gujr}}
\def\fontsetup@sanskrit@malayalam{%
  \SetLanguageKeys{sanskrit}{scripttag=mlym,script=Malayalam,bcp47=sa-Mlym,bcp47-language=sa,bcp47-script=Mlym,bcp47-casing=sa-Mlym}}
\def\fontsetup@sanskrit@bengali{%
  \SetLanguageKeys{sanskrit}{scripttag=beng,script=Bengali,bcp47=sa-Beng,bcp47-language=sa,bcp47-script=Beng,bcp47-casing=sa-Beng}}
\def\fontsetup@sanskrit@kannada{%
  \SetLanguageKeys{sanskrit}{scripttag=knda,script=Kannada,bcp47=sa-Knda,bcp47-language=sa,bcp47-script=Knda,bcp47-casing=sa-Knda}}
\def\fontsetup@sanskrit@telugu{%
  \SetLanguageKeys{sanskrit}{scripttag=telu,script=Telugu,bcp47=sa-Relu,bcp47-language=sa,bcp47-script=Relu,bcp47-casing=sa-Relu}}
\def\fontsetup@sanskrit@latin{%
  \SetLanguageKeys{sanskrit}{scripttag=latn,script=Latin,bcp47=sa-Latn,bcp47-language=sa,bcp47-script=Latn,bcp47-casing=sa-Latn}}

\newif\ifsanskrit@devanagari@numerals
\sanskrit@devanagari@numeralstrue

\DeclareKeys[polyglossia/gloss/sanskrit]
  {
    script.code = \@ifundefined{fontsetup@sanskrit@#1}%
      {\xpg@error{`#1' is not a valid script for Sanskrit}}%
      {\csname fontsetup@sanskrit@#1\endcsname},
    script.default:n = devanagari,
    numerals.choice:,
    numerals / devanagari.code = 
      {%
        \sanskrit@devanagari@numeralstrue
        \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-deva}%
      },
    numerals / western.code =
      {%
        \sanskrit@devanagari@numeralsfalse
        \SetLanguageKeys{sanskrit}{bcp47-extension-u=nu-latn}%
      },
    numerals.default:n = devanagari,
    numerals/unknown.code = \xpg@warning{Unknown Sanskrit numeral `#1'}
  }

% Register default options
\InitializeGlossOptions{sanskrit}{script=devanagari,numerals=devanagari}

% Use \providecommand here as the ldf file might
% be reloaded via BCP.
\providecommand{\sanskritnumerals}[2]{\sanskritnumber{#2}}

\def\sanskritnumber#1{%
  \ifsanskrit@devanagari@numerals
    \devanagaridigits{\number#1}%
  \else
    \number#1%
  \fi%
}

\ifluatex
  \directlua{require('polyglossia-sanskrit')}%
\else
  \newXeTeXintercharclass\sanskrit@questionexclamation % ! ? ‼ ⁇ ⁈ ⁉ ‽
  \newXeTeXintercharclass\sanskrit@punctthin % : ; danda double_danda
\fi

\def\sanskrit@punctthinspace{{\unskip\thinspace}}

\def\sanskrit@punctuation{%
  \ifluatex
    \directlua{polyglossia.activate_sanskrit_punct()}%
  \else
    \XeTeXinterchartokenstate=1%
    \XeTeXcharclass `\! \sanskrit@questionexclamation
    \XeTeXcharclass `\? \sanskrit@questionexclamation
    \XeTeXcharclass `\‼ \sanskrit@questionexclamation
    \XeTeXcharclass `\⁇ \sanskrit@questionexclamation
    \XeTeXcharclass `\⁈ \sanskrit@questionexclamation
    \XeTeXcharclass `\⁉ \sanskrit@questionexclamation
    \XeTeXcharclass `\‽ \sanskrit@questionexclamation % interrobang, U+203D
    \XeTeXcharclass `\: \sanskrit@punctthin
    \XeTeXcharclass `\; \sanskrit@punctthin
    \XeTeXcharclass `\। \sanskrit@punctthin % danda, U+0964
    \XeTeXcharclass `\॥ \sanskrit@punctthin % double danda, U+0965
    \XeTeXinterchartoks \z@ \sanskrit@questionexclamation = \sanskrit@punctthinspace
    \XeTeXinterchartoks \z@ \sanskrit@punctthin = \sanskrit@punctthinspace
    \XeTeXinterchartoks \sanskrit@questionexclamation \sanskrit@punctthin = \sanskrit@punctthinspace
  \fi
}

\def\nosanskrit@punctuation{%
  \ifluatex
    \directlua{polyglossia.deactivate_sanskrit_punct()}%
  \else
    \XeTeXcharclass `\! \z@
    \XeTeXcharclass `\? \z@
    \XeTeXcharclass `\‼ \z@
    \XeTeXcharclass `\⁇ \z@
    \XeTeXcharclass `\⁈ \z@
    \XeTeXcharclass `\⁉ \z@
    \XeTeXcharclass `\‽ \z@
    \XeTeXcharclass `\: \z@
    \XeTeXcharclass `\; \z@
    \XeTeXcharclass `\। \z@
    \XeTeXcharclass `\॥ \z@
    \XeTeXinterchartokenstate=0%
  \fi
}

\def\noextras@sanskrit{%
  \nosanskrit@punctuation%
}

\def\blockextras@sanskrit{%
  \sanskrit@punctuation%
}

\endinput
