\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{bangla}[2021/05/13]
\RequirePackage{fontspec}
\RequirePackage{etoolbox}
\RequirePackage{polyglossia}

\setmainlanguage{english}
\setotherlanguage{bengali}
\newfontface\translitfont{Noto Serif}
\newfontface\banglaipafont{Doulos SIL}

\makeatletter
\def\zztable#1{#1}
\def\zzrow#1#2{\expandafter\gdef\csname B-#2\endcsname{#1}}
\def\banglaipa#1{\banglaipafont\xgenerateTransliteration#1@}
\def\xgenerateTransliteration{\futurelet\tmp\xxgenerateTransliteration}
\def\xxgenerateTransliteration{%
\ifx\tmp\@sptoken\space\fi
\xxxgenerateTransliteration
}
\def\xxxgenerateTransliteration#1{%
\expandafter\ifx\csname B-#1\endcsname\relax?%
\expandafter\show\csname B-#1\endcsname
\fi
\csname B-#1\endcsname
\xgenerateTransliteration}
\expandafter\def\csname B-@\endcsname#1{}
\input{b-map}
\makeatother

\makeatletter
\long\def\@gobbletorelax#1\relax{}
\newcommand\bengalinum[1]{\expandafter\@bengalinum\csname c@#1\endcsname}
\newcommand\@bengalinum[1]{\expandafter\@bengalinum@\the#1\relax}
\newcommand\@bengalinum@[1]
  {%
    \@gobbletorelax#1\@bengalinum@end\relax
    \@bengalinum@digit{#1}%
  }
\newcommand\@bengalinum@digit[1]
  {%
    \ifcase#1
      \banglatext{০}\or % 0
      \banglatext{১}\or % 1
      \banglatext{২}\or % 2
      \banglatext{৩}\or % 3
      \banglatext{৪}\or % 4
      \banglatext{৫}\or % 5
      \banglatext{৬}\or % 6
      \banglatext{৭}\or % 7
      \banglatext{৮}\or % 8
      \banglatext{৯}\fi % 9
    \@bengalinum@
  }
\def\@bengalinum@end#1\@bengalinum@digit#2{}
\makeatother
\newcommand{\banglapage}{\renewcommand\thepage{\bengalinum{page}}}
\newcommand{\banglasection}{\renewcommand*\thesection{\bengalinum{section}}
\renewcommand*\thesubsection{\thesection.\bengalinum{subsection}}}

\newcommand{\banglaequation}{\renewcommand\theequation{\bengalinum{equation}}}

\newcommand{\banglatable}{\renewcommand\thetable{\bengalinum{table}}}
\newcommand{\banglafigure}{\renewcommand\thefigure{\bengalinum{figure}}}

\makeatletter
\long\def\@gobbletorelax#1\relax{}
\newcommand\bengalialpha[1]{\expandafter\@bengalialpha\csname c@#1\endcsname}
\newcommand\@bengalialpha[1]{\expandafter\@bengalialpha@\the#1\relax}
\newcommand\@bengalialpha@[1]
  {%
    \@gobbletorelax#1\@bengalialpha@end\relax
    \@bengalialpha@digit{#1}%
  }
\newcommand\@bengalialpha@digit[1]
  {%
    \ifcase#1
      \banglatext{ক}\or % 0
      \banglatext{ক}\or % 0
      \banglatext{খ}\or % 1
      \banglatext{গ}\or % 2
      \banglatext{ঘ}\or % 3
      \banglatext{ঙ}\or % 4
      \banglatext{চ}\or % 5
      \banglatext{ছ}\or % 6
      \banglatext{জ}\or % 7
      \banglatext{ঝ}\or % 8
      \banglatext{ঞ}\fi % 9
    \@bengalialpha@
  }
\def\@bengalialpha@end#1\@bengalialpha@digit#2{}
\makeatother

\newcommand{\banglaenumerate}{\renewcommand\theenumi{\bengalinum{enumi}}\renewcommand\theenumii{\bengalialpha{enumii}}}


%\newcommand{\banglasubsectionnum}{\renewcommand\thesection{\bengalinumeral{section}}}


\ExplSyntaxOn
\tl_new:N \l_mytrans_tl

% transliteration
\NewDocumentCommand{\indictrans}{ m }
{
\tl_set:Nn \l_mytrans_tl { #1 }
\doindictrans
    { \translitfont
                    \tl_use:N \l_mytrans_tl
        }
}

% text (transliteration)
\NewDocumentCommand{\banglatranslit}{ m }
{
\tl_set:Nn \l_mytrans_tl { #1 }
\doindictrans
    { \translitfont
                    \tl_use:N \l_mytrans_tl
        } 
}

% multi-line environment
\NewDocumentEnvironment{isoindictranse}{ +b }
{
\tl_set:Nn \l_mytrans_tl { #1 }
\doindictrans
%\bengalifont
    { \translitfont
                    \tl_use:N \l_mytrans_tl
        }
}
{ }

% the mapping 
\newcommand\doindictrans{
\tl_replace_all:Nnn \l_mytrans_tl { ড় } { r^^^^0323a } 
\tl_replace_all:Nnn \l_mytrans_tl { ঢ় } { r^^^^0323ha } 
\tl_replace_all:Nnn \l_mytrans_tl { য় } { y^^^^0307a } 
\tl_replace_all:Nnn \l_mytrans_tl { ক় } { qa } 
\tl_replace_all:Nnn \l_mytrans_tl { খ় } { k͟ha } 
\tl_replace_all:Nnn \l_mytrans_tl { গ় } { g^^^^0307a } 
\tl_replace_all:Nnn \l_mytrans_tl { জ় } { za } 
\tl_replace_all:Nnn \l_mytrans_tl { ফ় } { fa } 
\tl_replace_all:Nnn \l_mytrans_tl { অ } { a } 
\tl_replace_all:Nnn \l_mytrans_tl { আ } { ā } 
\tl_replace_all:Nnn \l_mytrans_tl { ই } { i } 
\tl_replace_all:Nnn \l_mytrans_tl { ঈ } { ī } 
\tl_replace_all:Nnn \l_mytrans_tl { উ } { u } 
\tl_replace_all:Nnn \l_mytrans_tl { ঊ } { ū } 
\tl_replace_all:Nnn \l_mytrans_tl { ঋ } { r̥ } 
\tl_replace_all:Nnn \l_mytrans_tl { ৠ } { r̥̄ } 
\tl_replace_all:Nnn \l_mytrans_tl { ঌ } { l̥ } 
\tl_replace_all:Nnn \l_mytrans_tl { ৡ } { l̥̄ } 
\tl_replace_all:Nnn \l_mytrans_tl { এ } { ē } 
\tl_replace_all:Nnn \l_mytrans_tl { ঐ } { ai } 
\tl_replace_all:Nnn \l_mytrans_tl { ও } { ō } 
\tl_replace_all:Nnn \l_mytrans_tl { ঔ } { au } 
\tl_replace_all:Nnn \l_mytrans_tl { ং } { ṁ } 
\tl_replace_all:Nnn \l_mytrans_tl { ঁ } { m̐ } 
\tl_replace_all:Nnn \l_mytrans_tl { ঃ } { ḥ } 
\tl_replace_all:Nnn \l_mytrans_tl { ক } { ka } 
\tl_replace_all:Nnn \l_mytrans_tl { খ } { kha } 
\tl_replace_all:Nnn \l_mytrans_tl { গ } { ga } 
\tl_replace_all:Nnn \l_mytrans_tl { ঘ } { gha } 
\tl_replace_all:Nnn \l_mytrans_tl { ঙ } { ṅa } 
\tl_replace_all:Nnn \l_mytrans_tl { চ } { ca } 
\tl_replace_all:Nnn \l_mytrans_tl { ছ } { cha } 
\tl_replace_all:Nnn \l_mytrans_tl { জ } { ja } 
\tl_replace_all:Nnn \l_mytrans_tl { ঝ } { jha } 
\tl_replace_all:Nnn \l_mytrans_tl { ঞ } { ña } 
\tl_replace_all:Nnn \l_mytrans_tl { ট } { ṭa } 
\tl_replace_all:Nnn \l_mytrans_tl { ঠ } { ṭha } 
\tl_replace_all:Nnn \l_mytrans_tl { ড } { ḍa } 
\tl_replace_all:Nnn \l_mytrans_tl { ঢ } { ḍha } 
\tl_replace_all:Nnn \l_mytrans_tl { ণ } { ṇa } 
\tl_replace_all:Nnn \l_mytrans_tl { ত } { ta } 
\tl_replace_all:Nnn \l_mytrans_tl { থ } { tha } 
\tl_replace_all:Nnn \l_mytrans_tl { দ } { da } 
\tl_replace_all:Nnn \l_mytrans_tl { ধ } { dha } 
\tl_replace_all:Nnn \l_mytrans_tl { ন } { na } 
\tl_replace_all:Nnn \l_mytrans_tl { প } { pa } 
\tl_replace_all:Nnn \l_mytrans_tl { ফ } { pha } 
\tl_replace_all:Nnn \l_mytrans_tl { ব } { ba } 
\tl_replace_all:Nnn \l_mytrans_tl { ভ } { bha } 
\tl_replace_all:Nnn \l_mytrans_tl { ম } { ma } 
\tl_replace_all:Nnn \l_mytrans_tl { য } { ya } 
\tl_replace_all:Nnn \l_mytrans_tl { র } { ra } 
\tl_replace_all:Nnn \l_mytrans_tl { ৰ } { ra } 
\tl_replace_all:Nnn \l_mytrans_tl { ল } { la } 
\tl_replace_all:Nnn \l_mytrans_tl { ৱ } { va } 
\tl_replace_all:Nnn \l_mytrans_tl { শ } { śa } 
\tl_replace_all:Nnn \l_mytrans_tl { ষ } { ṣa } 
\tl_replace_all:Nnn \l_mytrans_tl { স } { sa } 
\tl_replace_all:Nnn \l_mytrans_tl { হ } { ha } 
\tl_replace_all:Nnn \l_mytrans_tl { ঽ } { ’ } 
\tl_replace_all:Nnn \l_mytrans_tl { । } { . } 
\tl_replace_all:Nnn \l_mytrans_tl { া } { -ā } 
\tl_replace_all:Nnn \l_mytrans_tl { ি } { -i } 
\tl_replace_all:Nnn \l_mytrans_tl { ী } { -ī } 
\tl_replace_all:Nnn \l_mytrans_tl { ু } { -u } 
\tl_replace_all:Nnn \l_mytrans_tl { ূ } { -ū } 
\tl_replace_all:Nnn \l_mytrans_tl { ৃ } { -r } 
\tl_replace_all:Nnn \l_mytrans_tl { ৄ } { -rr } 
\tl_replace_all:Nnn \l_mytrans_tl { ে } { -e } 
\tl_replace_all:Nnn \l_mytrans_tl { ৈ } { -ai } 
\tl_replace_all:Nnn \l_mytrans_tl { ো } { -o } 
\tl_replace_all:Nnn \l_mytrans_tl { ৌ } { -au } 
\tl_replace_all:Nnn \l_mytrans_tl { ্ } {  virama } 
\tl_replace_all:Nnn \l_mytrans_tl { ৎ } { t } 
\tl_replace_all:Nnn \l_mytrans_tl { ৗ } { - } 
\tl_replace_all:Nnn \l_mytrans_tl { ০ } { 0 } 
\tl_replace_all:Nnn \l_mytrans_tl { ১ } { 1 } 
\tl_replace_all:Nnn \l_mytrans_tl { ২ } { 2 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৩ } { 3 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৪ } { 4 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৫ } { 5 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৬ } { 6 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৭ } { 7 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৮ } { 8 } 
\tl_replace_all:Nnn \l_mytrans_tl { ৯ } { 9 } 


% tidy-up: inherent a, etc
\regex_replace_all:nnN { a\-(ai) } { \1 } \l_mytrans_tl
\regex_replace_all:nnN { a\-(au) } { \1 } \l_mytrans_tl
\regex_replace_all:nnN { a\-([āiueoīū]{1}) } { \1 } \l_mytrans_tl
\regex_replace_all:nnN { a\-(rr) } { \1 } \l_mytrans_tl
\regex_replace_all:nnN { a\-(r) } { \1 } \l_mytrans_tl
\tl_replace_all:Nnn \l_mytrans_tl { avirama } { } 
\tl_replace_all:Nnn \l_mytrans_tl { ṁ } { ng } 
\regex_replace_all:nnN { \-([āiueoīū]{1}) } { \1 } \l_mytrans_tl
%...
}
\ExplSyntaxOff

\newtoggle{langen}
\DeclareOption{vrinda}{\newcommand{\fooA}{font1}}
\DeclareOption{kalpurush}{\newcommand{\fooA}{font2}}
\DeclareOption{solaimanlipi}{\newcommand{\fooA}{font3}}
\ProcessOptions

\ifdefstring{\fooA}{font1}{
\newfontface{\banglatext}{vrinda.ttf}
\newfontfamily{\banglabold}{vrinda.ttf}[FakeBold=4.0]
\newfontfamily{\banglaitalic}{vrinda.ttf}[FakeSlant=0.2]
}
{
    \ifdefstring{\fooA}{font2}{
        \newfontface{\banglatext}{kalpurush.ttf}
        \newfontfamily{\banglabold}{kalpurush.ttf}[FakeBold=4.0]
        \newfontfamily{\banglaitalic}{kalpurush.ttf}[FakeSlant=0.2]
    }
    {
        \ifdefstring{\fooA}{font3}{
            \newfontface{\banglatext}{solaimanlipi.ttf}
            \newfontfamily{\banglabold}{solaimanlipi.ttf}[FakeBold=4.0]
            \newfontfamily{\banglaitalic}{solaimanlipi.ttf}[FakeSlant=0.2]
        }
        {
             \newfontface{\banglatext}{kalpurush.ttf}
             \newfontfamily{\banglabold}{kalpurush.ttf}[FakeBold=4.0]
             \newfontfamily{\banglaitalic}{kalpurush.ttf}[FakeSlant=0.2]
        }
    }

}



