texlive[72445] Master: udiss (1oct24)

commits+karl at tug.org commits+karl at tug.org
Tue Oct 1 22:00:43 CEST 2024


Revision: 72445
          https://tug.org/svn/texlive?view=revision&revision=72445
Author:   karl
Date:     2024-10-01 22:00:43 +0200 (Tue, 01 Oct 2024)
Log Message:
-----------
udiss (1oct24)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/udiss/
    trunk/Master/texmf-dist/doc/latex/udiss/README.txt
    trunk/Master/texmf-dist/doc/latex/udiss/logos/
    trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png
    trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex
    trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex
    trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex
    trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex
    trunk/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex
    trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf
    trunk/Master/texmf-dist/source/latex/udiss/
    trunk/Master/texmf-dist/source/latex/udiss/udiss.dtx
    trunk/Master/texmf-dist/source/latex/udiss/udiss.ins
    trunk/Master/texmf-dist/tex/latex/udiss/
    trunk/Master/texmf-dist/tex/latex/udiss/udiss.cls
    trunk/Master/tlpkg/tlpsrc/udiss.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/udiss/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/README.txt	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/README.txt	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,7 @@
+------------------------------------------------------------
+Class:       udiss
+Author:      TUGIndia
+Description: A LaTeX bundle for typesetting dissertations
+Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+Licenses:    GPLv3+, GFDLv1.3+
+------------------------------------------------------------


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/README.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png	2024-10-01 19:51:28 UTC (rev 72444)
+++ trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png	2024-10-01 20:00:43 UTC (rev 72445)

Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,75 @@
+%%
+%% This is file `udiss-fonts-english.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `babel-en')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\babelfont[english]{rm}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCM10-BookItalic},%
+  BoldFont               = {NewCM10-Bold},%
+  BoldItalicFont         = {NewCM10-BoldItalic},%
+  SlantedFont            = {NewCM10-Book},%
+  BoldSlantedFont        = {NewCM10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCM10-Book}
+\babelfont[english]{sf}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCMSans10-BookOblique},%
+  BoldFont               = {NewCMSans10-Bold},%
+  BoldItalicFont         = {NewCMSans10-BoldOblique},%
+  SlantedFont            = {NewCMSans10-Book},%
+  BoldSlantedFont        = {NewCMSans10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCMSans10-Book}
+\babelfont[english]{tt}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  BoldFont               = {NewCMMono10-Bold},%
+  ItalicFont             = {NewCMMono10-Italic},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCMMono10-Book}
+\endinput
+%%
+%% End of file `udiss-fonts-english.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,100 @@
+%%
+%% This is file `udiss-fonts-hindi.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `babel-hi')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\IfLanguageName{hindi}{%
+  \ekvset{udiss}{%
+    rmfont               = {Mukta-Regular.ttf},%
+    rmitfont             = {Mukta-Regular.ttf},%
+    rmbffont             = {Mukta-Bold.ttf},%
+    rmbfitfont           = {Mukta-Bold.ttf},%
+    rmfeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    sffont               = {Mukta-Regular.ttf},%
+    sfitfont             = {Mukta-Regular.ttf},%
+    sfbffont             = {Mukta-Bold.ttf},%
+    sfbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    ttfont               = {Mukta-Regular.ttf},%
+    ttitfont             = {Mukta-Regular.ttf},%
+    ttbffont             = {Mukta-Bold.ttf},%
+    ttbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    }%
+  }%
+}{%
+  \babelfont[hindi]{rm}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[hindi]{sf}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[hindi]{tt}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+}
+\endinput
+%%
+%% End of file `udiss-fonts-hindi.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,94 @@
+%%
+%% This is file `udiss-fonts-malayalam.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `babel-ml')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\IfLanguageName{malayalam}{%
+  \ekvset{udiss}{%
+    rmfont               = {RIT-Rachana-Regular.ttf},%
+    rmitfont             = {RIT-Rachana-Italic.ttf},%
+    rmbffont             = {RIT-Rachana-Bold.ttf},%
+    rmbfitfont           = {RIT-Rachana-BoldItalic.ttf},%
+    rmfeatures           = {%
+      Script               = {Malayalam}%
+    },%
+    sffont               = {RIT-MeeraNew.ttf},%
+    sfitfont             = {RIT-MeeraNew.ttf},%
+    sfbffont             = {RIT-tnjoy-bold.ttf},%
+    sfbfitfont           = {RIT-tnjoy-bold.ttf},%
+    sffeatures           = {%
+      Script               = {Malayalam}%
+    },%
+    ttfont               = {RIT-MeeraNew.ttf},%
+    ttitfont             = {RIT-MeeraNew.ttf},%
+    ttbffont             = {RIT-tnjoy-bold.ttf},%
+    ttbfitfont           = {RIT-tnjoy-bold.ttf},%
+    sffeatures           = {%
+      Script               = {Malayalam}%
+    }%
+  }%
+}{%
+  \babelfont[malayalam]{rm}[%
+    IgnoreFontspecFile,%
+    Script               = {Malayalam},%
+    ItalicFont           = {RIT-Rachana-Italic.ttf},%
+    BoldFont             = {RIT-Rachana-Bold.ttf},%
+    BoldItalicFont       = {RIT-Rachana-BoldItalic.ttf},%
+    \ifLuaTeX
+      Renderer             = {HarfBuzz}%
+    \fi
+  ]{RIT-Rachana-Regular.ttf}
+  \babelfont[malayalam]{sf}[%
+    IgnoreFontspecFile,%
+    Script                 = {Malayalam},%
+    ItalicFont             = {RIT-tnjoy-regular.ttf},%
+    BoldFont               = {RIT-tnjoy-bold.ttf},%
+    BoldItalicFont         = {RIT-tnjoy-bold.ttf},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{RIT-tnjoy-regular.ttf}
+  \babelfont[malayalam]{tt}[%
+    IgnoreFontspecFile,%
+    Script               = {Malayalam},%
+    ItalicFont           = {RIT-tnjoy-regular.ttf},%
+    BoldFont             = {RIT-tnjoy-bold.ttf},%
+    BoldItalicFont       = {RIT-tnjoy-bold.ttf},%
+    \ifLuaTeX
+      Renderer             = {HarfBuzz}%
+    \fi
+  ]{RIT-tnjoy-regular.ttf}%
+}
+\endinput
+%%
+%% End of file `udiss-fonts-malayalam.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,126 @@
+%%
+%% This is file `udiss-fonts-marathi.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `babel-mr')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\babelprovide[%
+  mapdigits,%
+  counters/स्वर = अ आ इ ई उ ऊ ए ऐ ओ औ अं अः ॲ ऋ ऌ ऑ,%
+  counters/अंक = एक दोन तीन चार पाच सहा सात आठ नऊ दहा अकरा
+  बारा तेरा चौदा पंधरा सोळा सतरा अठरा एकोणीस वीस एकवीस बावीस
+  तेवीस चोवीस पंचवीस सव्वीस सत्तावीस अठ्ठावीस एकोणतीस तीस एकतीस
+  बत्तीस तेहतीस चौतीस पस्तीस छत्तीस सदतीस अडतीस एकोणचाळीस चाळीस
+  एकेचाळीस बेचाळीस त्रेचाळीस चव्वेचाळीस पंचेचाळीस शेहेचाळीस सत्तेचाळीस
+  अठ्ठेचाळीस एकोणपन्नास पन्नास एकावन्न बावन्न त्रेपन्न चौपन्न पंचावन्न
+  छप्पन्न सत्तावन्न अठ्ठावन्न एकोणसाठ साठ एकसष्ट बासष्ट त्रेसष्ट चौसष्ट
+  पासष्ट सहासष्ट सदुष्ट अडुसष्ट एकोणसत्तर सत्तर एकाहत्तर बाहत्तर
+  त्र्याहत्तर चौऱ्याहत्तर पंचाहत्तर शाहत्तर सत्त्याहत्तर अठ्ठ्याहत्तर
+  एकोणऐंशी ऐंशी एक्याऐंशी ब्याऐंशी त्र्याऐंशी चौऱ्याऐंशी पंच्याऐंशी श्याऐंशी
+  सत्त्याऐंशी अठ्ठ्याऐंशी एकोणनव्वद नव्वद एक्याण्णव ब्याण्णव त्र्याण्णव
+  चौऱ्याण्णव पंचाण्णव शहाण्णव सत्त्याण्णव अठ्याण्णव नव्याण्णव शंभर,%
+  counters/व्यंजन = क ख ग घ ङ%
+  च छ ज झ ञ%
+  ट ठ ड ढ ण%
+  त थ द ध न%
+  प फ ब भ म%
+  य र ल व श ष स ह ळ,%
+  Alph = अंक,%
+  alph = स्वर%
+]{marathi}
+\def\theenumiii{\localecounter{व्यंजन}{enumiii}}
+\def\theenumiv{\localecounter{अंक}{enumiii}}
+\IfLanguageName{marathi}{%
+  \ekvset{udiss}{%
+    rmfont               = {Mukta-Regular.ttf},%
+    rmitfont             = {Mukta-Regular.ttf},%
+    rmbffont             = {Mukta-Bold.ttf},%
+    rmbfitfont           = {Mukta-Bold.ttf},%
+    rmfeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    sffont               = {Mukta-Regular.ttf},%
+    sfitfont             = {Mukta-Regular.ttf},%
+    sfbffont             = {Mukta-Bold.ttf},%
+    sfbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    ttfont               = {Mukta-Regular.ttf},%
+    ttitfont             = {Mukta-Regular.ttf},%
+    ttbffont             = {Mukta-Bold.ttf},%
+    ttbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    }%
+  }%
+}{%
+  \babelfont[marathi]{rm}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[marathi]{sf}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[marathi]{tt}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}%
+}
+\endinput
+%%
+%% End of file `udiss-fonts-marathi.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,43 @@
+%%
+%% This is file `udiss-style-ukerala.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `ukerala')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\ekvset{udiss}{%
+  university               = {University of Kerala},%
+  logo                     = {udiss-logo-ukerala.png},%
+  logoheight               = {0.11}%
+}
+\endinput
+%%
+%% End of file `udiss-style-ukerala.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf	2024-10-01 19:51:28 UTC (rev 72444)
+++ trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf	2024-10-01 20:00:43 UTC (rev 72445)

Property changes on: trunk/Master/texmf-dist/doc/latex/udiss/udiss.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/udiss/udiss.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/udiss/udiss.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/udiss/udiss.dtx	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,4143 @@
+% \iffalse meta-comment
+% 
+% File: udiss.dtx
+% ----------------------------------------------------------
+% Bundle:      udiss
+% Version:     v0.1 (October 1, 2024)
+% Author:      TUGIndia
+% Description: A LaTeX bundle for typesetting dissertations
+% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+% Licenses:    GPLv3+, GFDLv1.3+
+% ----------------------------------------------------------
+% The LaTeX bundle udiss v0.1
+% Copyright © 2024 TUGIndia
+% 
+% This program is free software: you can redistribute it
+% and/or modify it under the terms of the GNU General Public
+% License as published by the Free Software Foundation,
+% either version 3 of the License, or (at your option) any
+% later version.
+% 
+% This program is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied
+% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+% PURPOSE. See the GNU General Public License for more
+% details.
+% 
+% You should have received a copy of the GNU General Public
+% License along with this program. If not, see
+% <https://www.gnu.org/licenses/>.
+% ----------------------------------------------------------
+% arara: lualatex
+% arara: lualatex
+% arara: clean: {
+% arara: -->      extensions: [
+% arara: -->        log,aux,glo,idx,ist,
+% arara: -->        out,toc,hd
+% arara: -->      ]
+% arara: -->    }
+% ----------------------------------------------------------
+% \fi
+% \iffalse
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+------------------------------------------------------------
+Class:       udiss
+Author:      TUGIndia
+Description: A LaTeX bundle for typesetting dissertations
+Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+Licenses:    GPLv3+, GFDLv1.3+
+------------------------------------------------------------
+%</readme>
+%<*internal>
+\fi
+%</internal>
+%<*driver>
+\documentclass{l3doc}
+\usepackage[provide*=*]{babel}
+\babelprovide[import,main]{english}
+\babelprovide[import,onchar={ids fonts}]{marathi}
+\usepackage[svgnames]{xcolor}
+\usepackage{fontawesome5}
+\usepackage{gfdl}
+\usepackage{microtype}
+\usepackage{unicode-math}
+\usepackage{hologo}
+\babelfont{rm}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCM10-BookItalic},%
+  BoldFont               = {NewCM10-Bold},%
+  BoldItalicFont         = {NewCM10-BoldItalic},%
+  SlantedFont            = {NewCM10-Book},%
+  BoldSlantedFont        = {NewCM10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6}%
+]{NewCM10-Book}
+\babelfont{sf}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCMSans10-BookOblique},%
+  BoldFont               = {NewCMSans10-Bold},%
+  BoldItalicFont         = {NewCMSans10-BoldOblique},%
+  SlantedFont            = {NewCMSans10-Book},%
+  BoldSlantedFont        = {NewCMSans10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6}%
+]{NewCMSans10-Book}
+\babelfont{tt}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  BoldFont               = {NewCMMono10-Bold},%
+  ItalicFont             = {NewCMMono10-Italic}%
+]{NewCMMono10-Book}
+\setmathfont[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  CharacterVariant       = {1}%
+]{NewCMMath-Book}
+\newfontfamily\newcmnewnum[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf}%
+]{NewCM10-Book}
+\newfontfamily\newcmnewone[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  Numbers                = {OldStyle}%
+]{NewCM10-Book}
+\newfontfamily\expkvkp[%
+  BoldFont               = {KpRoman-Bold.otf}%
+]{KpRoman-Regular.otf}
+\babelfont[marathi]{tt}[%
+  IgnoreFontspecFile,%
+  Script                 = {Devanagari},%
+  Language               = {Marathi},%
+  Renderer               = {HarfBuzz},%
+  ItalicFont             = {NewCMMono10-Book.otf}%
+]{Mukta-Regular.ttf}
+\colorlet{udisslink}{red!60!black}
+\colorlet{udissurl}{blue!60!black}
+\colorlet{udisscite}{green!60!black}
+\hypersetup{%
+  unicode,%
+  colorlinks,%
+  linkcolor              = {udisslink},%
+  citecolor              = {udisscite},%
+  urlcolor               = {udissurl},%
+  pdftitle               = {The udiss bundle},%
+  pdfauthor              = {TUGIndia},%
+  pdfcreator             = {TUGIndia},%
+  pdfsubject             = {%
+    A LaTeX bundle for typesetting dissertations%
+  },%
+  pdfkeywords            = {%
+    LaTeX, dissertations, thesis, bundle, academia%
+  }%
+}
+\gfdlcopyrightholders{%
+  \texorpdfstring{%
+    \TUGIndia
+  }{%
+    TUGIndia%
+  }%
+}
+\gfdlcopyrightdescription{%
+  \texorpdfstring{The \cls{udiss} bundle}%
+                 {The udiss bundle}%
+}
+\gfdlcopyrightableyears{2024}
+\usepackage{cleveref}
+\usepackage{stackengine}
+\setquotestyle{british}
+\def\udisstval{%
+  \hfill
+  \begingroup
+  \ttfamily
+  \textcolor{udisslink}{true}\,\textbar\,false%
+  \endgroup
+}
+\def\udissfval{%
+  \hfill
+  \begingroup
+  \ttfamily
+  true\,\textbar\,\textcolor{udisslink}{false}%
+  \endgroup
+}
+\def\udisscolorred{%
+  \hfill
+  \begingroup
+  \ttfamily
+  \color{udisslink}%
+  udisslink%
+  \endgroup
+}
+\def\udisscolorblue{%
+  \hfill
+  \begingroup
+  \ttfamily
+  \color{udisslink}%
+  udissurl%
+  \endgroup
+}
+\def\udisscolorgreen{%
+  \hfill
+  \begingroup
+  \ttfamily
+  \color{udisslink}%
+  udisscite%
+  \endgroup
+}
+\def\udissarr{%
+  \hfill
+  \begingroup
+  \ttfamily
+  \color{udisslink}%
+  all-rights-reserved%
+  \endgroup
+}
+\makeatletter
+% Adapted from manfnt.sty (LPPL v1.0+)
+\DeclareFontFamily{U}{manfnt}{}
+\DeclareFontShape{U}{manfnt}{m}{n}{ <->  manfnt }{}
+\def\manfntsymbol#1{%
+  \begingroup
+  \fontencoding{U}
+  \fontfamily{manfnt}\selectfont
+  \symbol{#1}%
+  \endgroup
+}
+\def\dbend{%
+  \manfntsymbol{127}%
+  \hspace*{0.5em}%
+}
+\def\ddbend{%
+  \manfntsymbol{127}%
+  \manfntsymbol{127}%
+  \hspace*{0.5em}%
+}
+\makeatother
+\ExplSyntaxOn
+%% Answer on TopAnswers by Udi Fogiel (LPPL v1.3c+)
+%% URL: https://topanswers.xyz/tex?q=8033
+\NewDocumentCommand \textfunction { v }{
+  \__codedoc_function_index:n { #1 }
+  \__codedoc_function_label:nN { #1 } \c_false_bool
+  \texttt{#1}
+}
+\ExplSyntaxOff
+\def\TUGIndia{\textsc{tugindia}}
+\def\babelurl{%
+  https://latex3.github.io/babel/guides/%
+  which-method-for-which-language.html%
+}
+\definecolor{ekvred}{HTML}{9F393D}
+\colorlet{ekvgrey}{black!75}
+\NewDocumentCommand\expkvlogo{ m }{%
+  %% Stolen from Jonathan's sources: preamble-logos.tex
+  %% LPPL 1.3c+
+  %% /texmf-dist/doc/latex/expkv-bundle/preamble-logos.tex
+  \begingroup
+  \expkvkp
+  \bfseries
+  {%
+    \color{ekvgrey}e%
+    \kern-.05em x\kern-.05em%
+  }%
+  \lower.493ex\hbox{%
+    {\color{ekvgrey}P}%
+    \kern-.1em{\color{ekvred}k}}%
+  \kern-.18em{\color{ekvred}v}%
+  \IfBlankF{#1}{%
+    \begingroup
+    \color{ekvgrey}%
+    \kern.05em\rule[-.1ex]{.08em}{1.2ex}%
+    \kern.05em\textsc{#1}%
+    \endgroup
+  }%
+  \endgroup
+}
+
+\begin{document}
+\DocInput{udiss.dtx}
+\end{document}
+%</driver>
+% \fi
+% \title{The \cls{udiss} bundle}
+% \author{\TUGIndia}
+% \date{^^A
+%   Version 0.1---October 1, 2024\\[1ex]^^A
+%   {^^A
+%     \small\faIcon{link}\quad
+%     \url{https://ctan.org/pkg/udiss}^^A
+%   }\\^^A
+%   {^^A
+%     \small\faIcon{bug}\quad
+%     \url{https://puszcza.gnu.org.ua/bugs/?group=udiss}^^A
+%   }^^A
+% }
+% 
+% \maketitle
+% 
+% \tableofcontents
+% 
+% \DoNotIndex{%
+% \@empty,\@percentchar,\AddToHook,\ClassError,
+% \ClassWarningNoLine,\IfBlankTF,\IfBooleanTF,
+% \IfFileExists,\IfLanguageName,\LoadClass,
+% \MessageBreak,\NewDocumentCommand,\PassOptionsToClass,
+% \PassOptionsToPackage,\ProcessList,\ProvidesClass,
+% \RenewDocumentCommand,\RequirePackage,\RequireTUTeX,
+% \SplitList,\addcontentsline,\addfontfeature,
+% \addtocounter,\alph,\babelfont,\babelprovide,\begin,
+% \begingroup,\bfseries,\bigskip,\clearpage,\color,
+% \colorlet,\def,\definecolor,\dimexpr,\docLicenseThis,
+% \documentclass,\edef,\ekvdefinekeys,
+% \ekvoProcessGlobalOptions,\ekvoProcessLocalOptions,
+% \ekvset,\else,\empty,\end,\endcsname,\endgroup,\enquote,
+% \expandafter,\expanded,\fbox,\fboxsep,\fi,
+% \fontspec,\hrule,\hspace,\hypersetup,\ifLuaTeX,
+% \ifnum,\ifx,\includegraphics,\input,\itshap,
+% \udiss at lgbbl,\let,\linewidth,\loop,\medskip,
+% \newcounter,\newif,\newpage,\noindent,\normalfont,
+% \numexpr,\pagestyle,\parindent,\protected,\relax,
+% \repeat,\setlength,\setmathfont,\space,\stepcounter,
+% \stretch,\string,\tableofcontents,\textLF,
+% \textheight,\the,\thispagestyle,\unexpanded,\vfill,
+% \vspace,\year,\itshape,\csname,\fboxrule,\flushleft,
+% \flushright,\LARGE,\listoffigures,\listoftables,
+% \localecounter,\makeatletter,\makeatother,\normalsize,
+% \Require,\theenumiii,\theenumiv^^A
+% }
+% 
+% \begin{documentation}
+% \section{Introduction}
+% \label{int}
+% 
+% The \cls{udiss} bundle is a \LaTeX-class-file developed to
+% assist students in typesetting their \emph{u}niversity
+% \emph{diss}ertations. It is a collection of multiple
+% support files. This is the first experimental version. We
+% need feedback and comments from the community to make it
+% better. Currently, nothing should be considered
+% \enquote{stable}. Soon after getting comments and reviews
+% from the community, we will move towards a stable version.
+% 
+% Universities often have strict requirements regarding the
+% formatting of the dissertations/theses submitted to them.
+% This bundle pre-supplies a generic style
+% (university-agnostic) for creating dissertations. It can
+% be loaded simply with:
+% 
+% \begin{verbatim}
+% \documentclass{udiss}
+% \end{verbatim}
+% 
+% But, apart from the generic style, it also supplies
+% university or department specific files for some selected
+% institutions. Each specialised class file comes
+% with an identifier. E.g., if you want to use the template
+% for the Kerala university, you may use the |ukerala| tag
+% and load its template like in the following:
+% 
+% \begin{verbatim}
+% \documentclass{udiss}
+% \dissertationstyle{ukerala}
+% \end{verbatim}
+% 
+% We are willing to expand. If you want your institution to
+% be supported by us, please have a look at the instructions
+% given in \cref{req}. If you want to develop your own
+% style, please have a look at the developer's instruction
+% given in \cref{dev}. If you want to get your class
+% published under this bundle, please have a look at the
+% contribution guidelines given in \cref{con}.
+% 
+% This document explains the user interface as well as the
+% implementation of the class. It has three major parts.
+% The first one contains the documentation of the class
+% (\cref{doc}), the second one contains the developer's
+% manual (\cref{dev}) and the third one contains the
+% implementation of it (\cref{imp}).
+% 
+% Before getting started with the documentation, just a
+% brief note about our approach. As of version 0.1, we are
+% planning to have a radically all-modern and
+% backwards-blind approach. This is a Unicode-only package,
+% meaning, it won't work with the classic PDF\LaTeX. We load
+% the modern, well maintaned and inclusive implementation of
+% the Latin Modern family, i.e., the New Computer Modern
+% family (\url{ctan.org/pkg/newcm}). For using/testing the
+% class, please use the latest \TeX\ Live (all packages
+% updated, as of 2024-09-27). Both \hologo{XeLaTeX} and
+% Lua\LaTeX\ supported, but the latter is recommended as it
+% identifies scripts without markup.
+% 
+% \section{Documentation}
+% \label{doc}
+% 
+% This part of the document describes everything that a
+% normal user of this class should know. It enlists all the
+% features of the class.
+% 
+% \subsection{User manual}
+% 
+% Since this is a class that typesets dissertations, it
+% requires some basic information which is provided using
+% the following macros.
+% 
+% We provide the usual \LaTeX-like macros for the
+% convenience, but these macros have
+% \emph{key-value}-equivalents as well.
+% 
+% \begin{function}{\title,\author,\pronouns}
+%   \begin{syntax}
+%     \cs{title}\marg{the-title-of-the-dissertation}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{author}\marg{name-of-the-author}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{pronouns}\marg{the-pronouns-of-the-author}
+%   \end{syntax}
+%   Like in most standard \LaTeX\ classes, |\title|
+%   command saves the title of the dissertation from its
+%   argument. This is one of the commands which we mark as
+%   \emph{strict}. In the manual, all such commands are
+%   marked with a
+%   {\footnotesize\faIcon{exclamation-triangle}} symbol at
+%   the right end. If such commands (or their parametric
+%   equivalents as shown in the following paragraph) are not
+%   provided, the compilation is interrupted with an error.
+%   The |\author| command doesn't return any error if the
+%   class option |blind| is loaded. Since the |blind| option
+%   is used for anonymous submissions, the author
+%   information is irrelevant anyways and hence, is ignored.
+%   
+%   These macros are available as class options too. One
+%   just has to use |title=|\marg{title} in the optional
+%   argument of the |\documentclass| command. Similarly,
+%   |author| and |pronouns| also are available.
+% \end{function}
+% 
+% \begin{function}{\subtitle,\shorttitle}
+%   \begin{syntax}
+%     \cs{subtitle}\marg{the-subtitle-of-the-dissertation}
+%     \cs{shorttitle}\marg{a-short-title-for-headers}
+%   \end{syntax}
+%   Dissertations often have a subtitle too, but it is not
+%   an absolute requirement, so optionally, one may want to
+%   use |\subtitle| command. Sometimes the title and the
+%   subtitle are too long for the running header. One may
+%   provide a short title with |\shorttitle| for this
+%   purpose. Depending on the selected template and options,
+%   it will be printed.
+%   
+%   These commands are also available as class options
+%   |subtitle| and |shorttitle|.
+% \end{function}
+% 
+% \begin{function}{\stream,\discipline,\degree}
+%   \begin{syntax}
+%     \cs{stream}\marg{the-name-of-the-stream}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{discipline}\marg{the-name-of-the-discipline}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{degree}\marg{the-name-of-the-degree}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%   \end{syntax}
+%   These details are used at several places in the class.
+%   E.g., the declaration, the \enquote{fulfilment}
+%   statement printed on the first page. Like most other
+%   macros, these too have straight forward
+%   \emph{key-value}-equivalents |stream|, |discipline| and
+%   |degree|.
+% \end{function}
+% 
+% \begin{function}{\supervisor,\university,\department}
+%   \begin{syntax}
+%     \cs{supervisor}\marg{name-of-the-supervisor}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{university}\marg{name-of-the-university}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%     \cs{department}\marg{name-of-the-department}^^A
+%     \ignorespaces\hfill^^A
+%     {\footnotesize\faIcon{exclamation-triangle}}
+%   \end{syntax}
+%   These commands are not seen in other standard
+%   \LaTeX-classes, but \cls{udiss} requires them
+%   obligatorily (only except in the |blind| mode).
+%   
+%   |supervisor|, |university| and |department| are the
+%   \emph{key-value}-equivalents.
+% \end{function}
+% 
+% \begin{function}{\logo,\logo*}
+%   \begin{syntax}
+%     \cs{logo}\marg{file-name}
+%     \cs{logo*}\marg{\TeX-code}
+%   \end{syntax}
+%   Some departments mandate printing the university logos
+%   in the dissertation. If this command is used, the logo
+%   is printed. The location of the logo can be customised
+%   as per the requirement. The class provides options for
+%   that.
+%   
+%   If you are mad about \TeX\ and have a code for printing
+%   the logo of your institute, use this command with a star
+%   and in its argument, paste your code to get it printed
+%   at an appropriate place.
+%   
+%   We have |logo| and |logo*| as the
+%   \emph{key-value}-equivalents.
+% \end{function}
+% 
+% \begin{function}{language,ldfbabel,nofontwarning}
+%   \begin{syntax}
+%     |language|=\marg{babel-language-names}
+%     |ldfbabel|=\marg{babel-ldf-language-names}
+%     |nofontwarning|=\marg{truth-value}\udissfval
+%   \end{syntax}
+%   The \pkg{babel} package has a complex mechanism for
+%   loading languages. The complex design has its own
+%   advantages, especially with regards to backwards
+%   compatibility. For detailed explanation, it's best to go
+%   through the user manual of \pkg{babel}, or its official
+%   online documentation, especially the web-page at:
+%   \url{\babelurl}.
+%   
+%   To help those who are completely at sea, we briefly will
+%   have a look at the two mechanisms \pkg{babel} provides.
+%   One is the original method of loading the
+%   language-name(s) as class option(s), so something like:
+%   
+%   \begin{verbatim}
+%     \usepackage[italian,hindi,english]{babel}
+%   \end{verbatim}
+%   
+%   The last one from the list is understood as the
+%   \enquote{main} language of the document. These languages
+%   are defined using the so-called |.ldf|-files. A lot of
+%   support for some languages is available using this
+%   mechanism. For some European languages, e.g., French,
+%   the difference between the two mechanisms is too sharp
+%   and it has been found that a lot of native speakers
+%   still prefer the old, stable way of using |.ldf|-files.
+%   If you are one of them and you are used to loading
+%   language-names as options to package \pkg{babel}, you
+%   should use the |ldfbabel| option of \cls{udiss}. But we
+%   advise against it.
+%   
+%   The second approach provided by \pkg{babel} for loading
+%   languages is as follows:
+%   
+%   \bigskip
+%   |\babelprovide|\marg{language-name}
+%   \bigskip
+%   
+%   This method follows and uses the Unicode Common Locale
+%   Data Repository (CLDR) for creating the resources. This
+%   data is saved in |.ini| files. This is a more modern
+%   approach, in our opinion. But it may cost us a little
+%   bit of inconvenience since it doesn't support the common
+%   short-hands which are provided by the |.ldf| files. But
+%   short-hands make the input more and more \TeX-dependent
+%   and thus less productive, so we don't endorse it. That
+%   is why the more intuitive name for language-options in
+%   this class is for the |.ini|-based approach. We load the
+%   |english| language by default if no other is loaded. For
+%   this too, we go with the |.ini| file developed for
+%   English.
+%   
+%   The syntax of both these options is exactly like the one
+%   provided by \pkg{babel}. One may provide a
+%   comma-separated list and the last one of them will be
+%   set as the main language of the document. Have a look at
+%   \cref{dev} for more details regarding this.
+%   
+%   We also provide some auxiliary \TeX\ files with the
+%   class for setting the font-families as well as the
+%   language-specifics as required by \pkg{babel}. If a file
+%   like that it is not found, we issue a warning. If the
+%   users want that warning to be silent, they can use the
+%   option |nofontwarning|.
+% \end{function}
+% 
+% \begin{function}{license,copyright-yrs,localcopyright}
+%   \begin{syntax}
+%     |license|=\marg{all-rights-reserved/CC-BY-SA/GFDL}^^A
+%     \udissarr
+%     |copyright-yrs|=\marg{copyrightable-years}\hfill^^A
+%     {\color{udisslink}|\the\year|}
+%     |localcopyright|=\marg{the-word-for-copyright}^^A
+%     \hfill{\color{udisslink}|Copyright|}
+%   \end{syntax}
+%   This is an option to set a license for the dissertation.
+%   We encourage users to use free culture licenses.
+%   Currently we support two popular licenses, i.e.,
+%   \enquote{CC-BY-SA 4.0+ International} and \enquote{GFDL
+%     v1.3+}. We don't set any license by default as we
+%   believe making a work \enquote{free} (as in freedom)
+%   should be the decision of the author and hence
+%   \enquote{all rights are reserved} by default. If you are
+%   not using the |blind| package option, your output will
+%   have a copyright notice with your (author's) name and
+%   the current year as the copyrightable year in the
+%   metadata of the PDF. If you are wondering why, the
+%   |blind| option is for preserving the anonymity of the
+%   author and the copyright-notices require a
+%   copyright-holder by default, thus with |blind| option,
+%   we have disabled choosing licenses. If you want to
+%   change the copyrightable year(s), you may use the option
+%   |copyright-yrs|. Since the package is supposed to
+%   support multilingual typesetting, we have provided an
+%   option to change the word \enquote{Copyright} to the one
+%   in the main language of your document.
+% \end{function}
+% 
+% \begin{function}{placeholders}
+%   \begin{syntax}
+%     |placeholders|
+%   \end{syntax}
+%   If you want to see how the things so far discussed come
+%   together, you may just load this option. It places
+%   placeholders for all the options discussed for creating
+%   a sample document.
+% \end{function}
+% 
+% \begin{function}{^^A
+%   lot,lof,declaration,declarationtxt,decllocal^^A
+% }
+%   \begin{syntax}
+%     |lot|=\marg{truth-value}\udissfval
+%     |lof|=\marg{truth-value}\udissfval
+%     |declaration|=\marg{truth-value}\udissfval
+%   \end{syntax}
+%   By default, the class only prints the table of contents.
+%   If the author requires the list of figures (|lof|) or
+%   tables (|lot|), they may use the respective option.
+%   These are boolean keys which take either |true| or
+%   |false| as their values. Not passing any truth-value to
+%   a |key| is equivalent to using |key=true|. Similarly,
+%   many universities require a declaration from the
+%   candidate regarding the originality of the work. We have
+%   provided a sample draft of the declaration in a
+%   renewable macro, but it is not enabled by default. After
+%   getting comments from the community, we will decide what
+%   should be done with it. Note that the default value for
+%   all these keys is |false|\footnote{^^A
+%     Throughout the documentation, at the right corner, we
+%     enlist the possible values to a key and the default
+%     one is marked in red.^^A
+%   }. Declaration text can be edited using |declarationtxt|
+%   option. The local word for declaration is stored in
+%   |decllocal| (defaulting to \enquote{Declaration}).
+% \end{function}
+% 
+% \begin{function}{blind}
+%   \begin{syntax}
+%     |blind|=\marg{truth-value}\udissfval
+%   \end{syntax}
+%   At times, anonymous submissions are required where the
+%   name of the author and supervisor is hidden. 
+% \end{function}
+% 
+% \begin{function}{framed-title}
+%   \begin{syntax}
+%     |framed-title|=\marg{truth-value}\udissfval
+%   \end{syntax}
+%   By default the title-page is very minimal. If a user
+%   wants to have a frame around the title-page, they may
+%   use this option. 
+% \end{function}
+% 
+% \begin{function}{^^A
+%   print,norefcolors,colorprint,udisslinkclr,^^A
+%   udissurlclr,udissciteclr^^A
+% }
+%   \begin{syntax}
+%     |print|=\marg{truth-value}\udissfval
+%     |norefcolors|=\marg{truth-value}\udissfval
+%     |udisslinkclr|=\marg{link-colour}\udisscolorred
+%     |udissurlclr|=\marg{url-colour}\udisscolorblue
+%     |udissciteclr|=\marg{cite-colour}\udisscolorgreen
+%   \end{syntax}
+%   Many departments require the submissions to be made in
+%   the print form as well. For that, |print| is a boolean
+%   option. It creates outputs suitable for the print
+%   submissions. The class, by default, does not use |print|
+%   option. The default output of the class is suitable for
+%   digital submissions. The following settings are always
+%   turned on by the class in normal circumstances:
+%   
+%   \begin{itemize}
+%   \item The \pkg{hyperref} package is loaded.
+%   \item The \pkg{xcolor} package is loaded. Some colours
+%     for the internal cross-references are pre-selected.
+%   \end{itemize}
+%   
+%   If you don't want colours for the hyperlinks in your
+%   digital document, you may use the |norefcolors|
+%   option. If you don't like the pre-defined colour-scheme
+%   given by us for the digital documents, you may use the
+%   class options specifically developed for changing them.
+%   They are |udisslinkclr|, |udissurlclr| and
+%   |udissciteclr|. The arguments of these options are
+%   either the pre-defined colours by package |xcolor| or
+%   user-defined colours with the |\colorlet| or
+%   |\definecolor| commands. The default colour-scheme
+%   used by us is as seen in the macro explanation above.
+%   
+%   More importantly though, if a PDF with colours is given
+%   for printing and the printer is using the black and
+%   white mode, then the coloured words look faded in the
+%   print out. To avoid this, we load the \pkg{xcolor}
+%   package only when the |print| option is \emph{not}
+%   loaded (basically always, by default). For performance
+%   reasons, we don't load  the |hyperref| package when
+%   |print| is loaded. Hyper-references make sense only in a
+%   digital PDF, so to optimise PDF compilation, in |print|
+%   mode, we don't load |hyperref|.
+% \end{function}
+% 
+% Note that if you are using the |license| option with
+% |CC-BY-SA|, the \pkg{doclicense} package |\Require|d for
+% printing the license automatically loads the
+% \pkg{hyperref} package. We don't have any control over it
+% and hence, you will see the hyperlink boxes around the
+% CC-text. You can safely ignore them as the text is still
+% in black colour and your objective is anyways just to
+% \emph{print} the output.
+% 
+% \begin{function}{oldstylenumoff,oldone}
+%   \begin{syntax}
+%     |oldstylenumoff|=\marg{truth-value}\udissfval
+%     |oldone|=\marg{truth-value}\udissfval
+%   \end{syntax}
+%   In text, the old style numbers look better. The numbers
+%   in the current document are old style. Lining numbers,
+%   on the other hand, don't have ascenders and descenders.
+%   
+%   If you prefer the lining numbers, you may turn this
+%   option on and all the fonts will start showing lining
+%   numbers. Note that printing of old style numbers also
+%   depends upon whether the font has old style numbers or
+%   not. The relevant settings are added to the font
+%   automatically, but while selecting the font, first make
+%   sure whether the old style table is present or not.
+%   
+%   Apart from that, the New Computer Modern font family
+%   provides an old-style shape for the number 1 (this exact
+%   shape!), but this shape is provided as a character
+%   variant and character variants cannot be loaded
+%   globally, since various fonts may have various variants
+%   at that slot, hence if someone wants this shape, they
+%   will have to use the |oldone| option. Without this
+%   option the number looks like as seen on the first line
+%   and that's the default style of \cls{udiss}.
+%   
+%   \begin{quote}
+%     {\newcmnewone 0123456789}\hfill
+%     \begingroup
+%     \ttfamily\footnotesize\color{udisslink}^^A
+%     Old style with default 1^^A
+%     \endgroup
+%   
+%     0123456789\hfill
+%     \texttt{\footnotesize Old style with the old 1}^^A
+%   
+%     {\newcmnewnum 0123456789}\hfill
+%     \texttt{\footnotesize Lining}^^A
+%   \end{quote}
+% \end{function}
+% 
+% \begin{function}{fulfilment}
+%   \begin{syntax}
+%     |fulfilment|=\ignorespaces^^A
+%     \marg{the-titlepage-sentence-about-course-requirement}
+%   \end{syntax}
+%   The title-page prints a sentence which says:
+%   
+%   \begin{quote}
+%     A dissertation submitted in the partial fulfilment of
+%     the requirements for the |\udiss at degree|\ program
+%     in |\udiss at discipline|.
+%   \end{quote}
+%   
+%    In order to change it, one may use this package option.
+%    If you want to use the internal macros for univesity
+%    and department names, don't forget to use
+%    |\makeatletter| and |\makeatother|.
+% \end{function}
+% 
+% As described in the introduction (\cref{int}), the users
+% can choose to load the generic style or a specialised
+% style. For that, we have the following macro:
+% 
+% \begin{function}{\dissertationstyle}
+%   \begin{syntax}
+%     \cs{dissertationstyle}\marg{style-for-dissertation}
+%   \end{syntax}
+%   With this command, you may select the institute or the
+%   style. It will set certain defaults.
+%   
+%   We provide limited support as of v0.1 (only for
+%   university of Kerala). We wish to expand more. Send us
+%   support requests for adding your institute to the list.
+% \end{function}
+% 
+% \subsection{Multilingual typesetting}
+% 
+% The \cls{udiss} class aims at supporting multilingual
+% typesetting by default. We load the \pkg{babel} package
+% for linguistic support, \pkg{fontspec} and
+% \pkg{unicode-math} package for loading fonts. It's the
+% best to not load them again. For loading languages, it's
+% best to use the package internal mechanism. If you find
+% something missing in the mechanism, you may load
+% \pkg{babel} or \pkg{fontspec} commands directly. Please
+% consider reporting a missing feature so that we can
+% implement it in the future versions.
+% 
+% We will see two examples of loading languages.
+% 
+% \subsection[Developer's manual]{^^A
+%   Developer's manual\marginpar{\hfill\dbend}\\[0.5ex]^^A
+%   \small\normalfont\itshape
+%   \quad Only if you sure about what you are doing^^A
+% }
+% \label{dev}
+% 
+% As the section title and the double bend suggests, this
+% area is for advanced customisation. Only enter it if you
+% have sufficient confidence to avoid errors.
+% 
+% 
+% \subsubsection{Fonts}
+% 
+% We are a Unicode-only class, so we need to take care of
+% three major font families, i.e., Roman,
+% \texttt{Typewriter} and \textsf{Sans} (stylisation
+% intentional, for demonstration). The \pkg{fontspec}
+% package takes care of Unicode fonts in \LaTeX, but we,
+% additionally, load package \pkg{unicode-math} too, to set
+% math-fonts. Even though, this much is practically enough
+% for font-selection, we go with the \pkg{babel}'s mechanism
+% of loading language-specific fonts, so that the fonts
+% don't apply globally. Our class already takes care of most
+% of the requirements regarding font, but if you want to
+% tinker with the defaults, you are advised to read this
+% section. The following parameters are for you.
+% 
+% \begin{function}{explicitext,ignorefsoff}
+%   \begin{syntax}
+%     |explicitext|=\marg{truth-value}\udissfval
+%     |ignorefsoff|=\marg{truth-value}\udisstval
+%   \end{syntax}
+%   Without this option, one cannot use the |Extension|
+%   parameter of package \pkg{fontspec}/\pkg{unicode-math}.
+%   We have some options later which set the extension for
+%   |rm|, |sf| and |tt| families. They are also useless if
+%   this key is not used. A word of caution: loading
+%   explicit extensions for fonts is restrictive. Suppose
+%   you want to use KpRoman-Regular as your normal font,
+%   but, say, FreeSerifBold as your bold font (please don't,
+%   this is solely for exemplification :P), loading an
+%   explicit extension will cause errors as the former is an
+%   OpenType font and the latter is a TrueType one. So if
+%   you are 200\% sure that all the fonts you need use one
+%   particular extension \emph{only}, then use this option.
+%   Otherwise, you are better off without it.
+%   
+%   The \TeX-tree contains many files having the
+%   |.fontspec| extension. These files contain predefined
+%   settings for fonts which the users may not always want.
+%   Thus, we ignore these files by default. If you are very
+%   sure that you want to load |.fontspec| files, you may
+%   turn our conditional off and the |.fontspec|-files, will
+%   be loaded correctly.
+% \end{function}
+% 
+% \begin{function}{^^A
+%   rmfeatures,sffeatures,ttfeatures,mathfeatures^^A
+% }
+%   \begin{syntax}
+%     |rmfeatures|=\marg{font-features-for-serif-fonts}
+%     |sffeatures|=\marg{font-features-for-sans-fonts}
+%     |ttfeatures|=\marg{font-features-for-mono-fonts}
+%     |mathfeatures|=\marg{font-features-for-math-fonts}
+%   \end{syntax}
+%   We have |udiss|-options for most commonly used optional
+%   parameters of fonts, still there are a lot of them
+%   available which we didn't consider important for the
+%   purpose of this class, e.g., |Scale|, |Color|. If you
+%   want to use these features with your fonts, you may use
+%   these four options as per your need. The value of this
+%   key is directly injected in the font-loading commands.
+% \end{function}
+% 
+% \begin{function}{rmfntext,sffntext,ttfntext,mathfntext}
+%   \begin{syntax}
+%     |rmfntext|=\ignorespaces^^A
+%     \marg{font-extension-for-serif-fonts}\ignorespaces^^A
+%     \hfill\texttt{ttf\,\textbar\,otf}
+%     |sffntext|=\ignorespaces^^A
+%     \marg{font-extension-for-sans-fonts}\ignorespaces^^A
+%     \hfill\texttt{ttf\,\textbar\,otf}
+%     |ttfntext|=\ignorespaces^^A
+%     \marg{font-extension-for-mono-fonts}\ignorespaces^^A
+%     \hfill\texttt{ttf\,\textbar\,otf}
+%     |mathfntext|=\ignorespaces^^A
+%     \marg{font-extension-for-math-fonts}\ignorespaces^^A
+%     \hfill\texttt{ttf\,\textbar\,otf}
+%   \end{syntax}
+%   With these four options, one may choose either
+%   |ttf| or |otf| extension for a particular font family.
+%   As mentioned before, it applies to all the fonts loaded
+%   in that family. Note that these options are only used
+%   when the |explicitext| option is active. This is why
+%   there is no default value set. By default this explicit
+%   extension method itself is not used.
+% \end{function}
+% 
+% If you want to know the default fonts we load always with
+% \cls{udiss}, you may refer to \cref{udissenfonts}.
+% 
+% \begin{table}
+%   \centering
+%   \small
+%   \begin{tabular}{llll}
+%       \toprule
+%       \textfunction{rmfont} &
+%         \textfunction{sffont} &
+%           \textfunction{ttfont} \\
+%       NewCM10-Book &
+%         NewCMSans10-Book &
+%           NewCMMono10-Book \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{rmbffont} &
+%         \textfunction{sfbffont} &
+%           \textfunction{ttbffont} \\
+%       NewCM10-Bold &
+%         NewCMSans10-Bold &
+%           NewCMMono10-Bold \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{rmitfont} &
+%         \textfunction{sfitfont} &
+%           \textfunction{ttitfont} \\
+%       NewCM10-BookItalic &
+%         NewCMSans10-BookItalic &
+%           NewCMMono10-BookItalic \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{rmbfitfont} &
+%         \textfunction{sfbfitfont} &
+%           \textfunction{ttbfitfont} \\
+%       NewCM10-BoldItalic &
+%         NewCMSans10-BoldOblique &
+%           NewCMMono10-BoldOblique \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{rmslfont} &
+%         \textfunction{sfslfont} &
+%           \textfunction{ttslfont} \\
+%       NewCM10-Book &
+%         NewCMSans10-BookOblique &
+%           NewCMMono10-Book \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{rmbfslfont} &
+%         \textfunction{sfbfslfont} &
+%           \textfunction{ttbfslfont} \\
+%       NewCM10-Bold &
+%         NewCMSans10-BoldOblique &
+%           NewCMMono10-BoldOblique \\
+%       \midrule
+%       \textfunction{mathfont}   & & \\
+%       NewCMMath-Book            & & \\
+%       \specialrule{0pt}{\aboverulesep}{\aboverulesep}
+%       \textfunction{mathbffont} & & \\
+%       NewCMMath-Bold            & & \\
+%       \bottomrule
+%   \end{tabular}
+%   \caption{Default fonts for English language (all otfs)}
+%   \label{udissenfonts}
+% \end{table}
+% 
+% \subsubsection{Title-page customisation}
+% 
+% The title-page prints several fields and very often
+% authors are very picky about it. Most of the things we
+% offer in it are customisable. One may change the following
+% things for all the major fields on the title-page.
+% 
+% \begin{enumerate}
+% \item The font
+% \item The font-size
+% \item The font-color
+% \item The font-shape (e.g., |\itshape|, |\scshape| etc.)
+% \item Additional features to the font loaded
+% \end{enumerate}
+% 
+% All the parameters (along with their default values) are
+% listed in \cref{titlepagetbl}. The table uses \enquote{-}
+% when there is no change in the default, only the fields
+% having a special value are marked.
+% 
+% \begin{table}
+%   \small
+%   \centering
+%   \begin{tabular}{>{\itshape\normalsize}llllll}
+%     \toprule
+%     Title &
+%       - &
+%         |\bfseries| &
+%           huge &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{titlefont} &
+%       \scriptsize\textfunction{titleshape} &
+%         \scriptsize\textfunction{titlesize} &
+%           \scriptsize\textfunction{titlecolor} &
+%             \scriptsize\textfunction{titleffeat}\\
+%     \cmidrule{2-6}
+%     Subtitle &
+%       - &
+%         |\normalfont| &
+%           large &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{subtitlefont} &
+%       \scriptsize\textfunction{subtitleshape} &
+%         \scriptsize\textfunction{subtitlesize} &
+%           \scriptsize\textfunction{subtitlecolor} &
+%             \scriptsize\textfunction{subtitleffeat}\\
+%     \cmidrule{2-6}
+%     Author &
+%       - &
+%         |\normalfont| &
+%           large &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{authorfont} &
+%       \scriptsize\textfunction{authorshape} &
+%         \scriptsize\textfunction{authorsize} &
+%           \scriptsize\textfunction{authorcolor} &
+%             \scriptsize\textfunction{authorffeat}\\
+%     \cmidrule{2-6}
+%     University &
+%       - &
+%         |\normalfont| &
+%           |\normalsize| &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{unifont} &
+%       \scriptsize\textfunction{unishape} &
+%         \scriptsize\textfunction{unisize} &
+%           \scriptsize\textfunction{unicolor} &
+%             \scriptsize\textfunction{uniffeat}\\
+%     \cmidrule{2-6}
+%     Department &
+%       - &
+%         |\normalfont| &
+%           |small| &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{deptfont} &
+%       \scriptsize\textfunction{deptshape} &
+%         \scriptsize\textfunction{deptsize} &
+%           \scriptsize\textfunction{deptcolor} &
+%             \scriptsize\textfunction{deptffeat}\\
+%     \cmidrule{2-6}
+%     Fulfilment &
+%       - &
+%         |\normalfont| &
+%           small &
+%             black &
+%               -\\
+%     & \scriptsize\textfunction{fffont} &
+%       \scriptsize\textfunction{ffshape} &
+%         \scriptsize\textfunction{ffsize} &
+%           \scriptsize\textfunction{ffcolor} &
+%             \scriptsize\textfunction{fffeat}\\
+%     \bottomrule
+%   \end{tabular}
+%   \caption{Customising title-page}
+%   \label{titlepagetbl}
+% \end{table}
+% 
+% \begin{function}{logowidth,logoheight}
+%   \begin{syntax}
+%     |logowidth|=\marg{logo-width-proportion}\hfill^^A
+%     \begingroup^^A
+%     \ttfamily\color{udisslink}^^A
+%     0.3^^A
+%     \endgroup
+%     |logoheight|=\marg{logo-height-proportion}\hfill^^A
+%     \begingroup^^A
+%     \ttfamily\color{udisslink}^^A
+%     0.075^^A
+%     \endgroup
+%   \end{syntax}
+%   By default the width of the logo is
+%   0.3$\times$|\linewidth| and 0.075$\times$|\textheight|.
+%   If you want to change these default numbers, you may use
+%   these parameters.
+% \end{function}
+% \subsection[^^A
+%   Contributing to our repository^^A
+% ]{^^A
+%   Contributing to the bundle^^A
+%   \marginpar{\hfill\ddbend}\\[0.5ex]^^A
+%   \small\normalfont\itshape
+%   \quad Only if you are ready to bear with us :P^^A
+% }
+% \label{con}
+% 
+% We welcome contributions to our code. Our code is hosted
+% at Puszcza, a free-software-based web-space. But for
+% consistency, we request our supporters to write the code
+% using 60 characters per line limit. Try to adhere to the
+% coding conventions. If there is a slight violation here
+% and there in your patches, please don't mind us editing
+% your code first and then merging it in the main branch.
+% 
+% We release our code with GPLv3+ and the documentation with
+% GFDLv1.3+. Your patches also will have to comply with the
+% conditions of these licenses.
+% 
+% If you wish to document your patches, please avoid
+% gendered language. Use \emph{they/them} pronouns when
+% referring to users.
+% 
+% Apart from university-styles, we also need support for
+% language and fonts. If you know free/libre Unicode fonts
+% for your language, please release them on CTAN or let us
+% know about them, so that we will release using our
+% templates. Provide appropriate translations for the fields
+% provided in class.
+%
+% The class comes with a test-suit. You are advised to run
+% |l3build check| command before pushing a patch. This way
+% we can be sure that the patch doesn't break any of the
+% already existing features. If you think something was
+% buggy in the original design and you got a fix for that,
+% kindly run |l3build save| on the concerned test file and
+% push the changed |.lvt| and |.tlg|s also.
+% 
+% \section{Requests for new templates}
+% \label{req}
+% 
+% We are open to your support-requests too. Just let us know
+% the norms and conventions of your institution. Let us know
+% which fields you would like to have pre-filled in the
+% style file. If you require the logo to be printed on the
+% title-page, send it to us in a decent resolution. We will
+% include it in our bundle.
+% \end{documentation}
+% 
+% \begin{implementation}
+% \section{Implementation}
+% \label{imp}
+% 
+% In this section, we explain how this program was
+% developed. We discuss the tools used by us for developing
+% the features offered in this class. The features can be
+% seen in the left margin hyperlinked to their respective
+% place in the documentation section \cref{doc}.
+% 
+% We first declare the tag used by the |.ins| file for
+% stripping the source-code of the generic class. We will
+% have several tags for generating the other class-files,
+% but for the convenience of maintenance, we will have all
+% the code in this central |.dtx| file.
+% 
+%    \begin{macrocode}
+%<*class>
+%    \end{macrocode}
+% 
+% First we declare the class with some elementary
+% information.
+% 
+%    \begin{macrocode}
+\ProvidesClass{udiss}[2024/10/01 v0.1
+  A LaTeX bundle for typesetting dissertations (TUGIndia)]
+%    \end{macrocode}
+% 
+% We develop the options for the class using
+% |\ekvdefinekeys| command. This command is provided by the
+% \expkvlogo{def} package, whereas for creating
+% class/package options, we use the \expkvlogo{opt}
+% package. For performance reasons, we don't use the entire
+% \expkvlogo{bundle}.
+% 
+%    \begin{macrocode}
+\RequirePackage{expkv-def,expkv-opt}
+%    \end{macrocode}
+% 
+% \begin{macro}{\pronouns,pronouns}
+%   Mostly we have implemented the macros in the same order
+%   as they are documented, but the exception is of the
+%   first two, i.e., |\title| and |\author|. These commands
+%   are developed by the standard classes too and hence,
+%   after loading the class (\cls{memoir} in our case) their
+%   definitions are rewritten. Thus these two macros are
+%   developed a little late in the code. Rest is still in
+%   line with the documentation. The method of saving the
+%   values of the macros is an indirect one. We use internal
+%   macros (e.g., |\udiss at title|) for saving them.
+%   
+%   We start with the |pronouns| field. Since it is
+%   optional, we don't need any errors here. At each step,
+%   we set some if-conditionals. All of them follow the
+%   standard convention of prefixing the class/package name
+%   and the |@| symbol for internalising. Have a look at the
+%   following two conditionals which we use immediately
+%   while defining the |pronouns| field:
+%   
+%    \begin{macrocode}
+\newif\ifudiss at pronouns
+\newif\ifudiss at blind
+%    \end{macrocode}
+%   
+%   We use the \pkg{xparse}-syntax for developing user-side
+%   macros. First we check if the class option |blind| is
+%   loaded. If it is so, there is no point in saving
+%   |pronouns|, hence it is skipped. The following code does
+%   that:
+%   
+%    \begin{macrocode}
+\NewDocumentCommand{ \pronouns }{ m }{%
+  \ifudiss at blind
+  \else
+    \def\udiss at pronouns{#1}%
+  \fi
+}
+%    \end{macrocode}
+% 
+%   As mentioned before, we use \expkvlogo{def} and
+%   \expkvlogo{opt} packages for developing the
+%   \emph{key-values}. The former proives a command
+%   |\ekvdefinekeys| that defines all the \emph{key}s. We
+%   could have called it just once in the code and developed
+%   all the \emph{key}s at one go, but in order to keep the
+%   implementation in line with the documentation and for a
+%   generally better readable code, we segment it in several
+%   pieces and develop the respective options with different
+%   calls of |\ekvdefinekeys|. Note that the set used for
+%   all of them is still the same, i.e., |udiss|. Storing a
+%   value passed to a key in a specific macro for later use
+%   is quite straight-forward in \expkvlogo{def}, but since
+%   we need to set some macros conditionally, we will use
+%   the |code| \emph{type} of \expkvlogo{}. The first
+%   non-space-token followed by the invocation of this type
+%   is the name of the \emph{key}. Its argument is an
+%   arbitrary \TeX-code where we can use have the usual
+%   \TeX-argument-call, i.e., |#1|.
+%   
+% 
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  code    pronouns       = {%
+    \ifudiss at blind
+    \else
+      \def\udiss at pronouns{(#1)}%
+    \fi
+    \udiss at pronounstrue
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% The |\ifudiss at blind| conditional was developed in order to
+% conditionally save (and print) some information which
+% identifies the author. If a user loads the option |blind|,
+% they don't need that information to be printed and since
+% it is not supposed to be printed, why to even save it?
+% Thus we save it only when needed.
+% 
+% \begin{macro}{title,author}
+% 
+%   Since we don't allow blank arguments for \emph{strict}
+%   commands/parameters, we check their existence there and
+%   there and generate an error if found blank. Since we
+%   need to error twice (once with the macro, once with the
+%   parameter, we save the code for generating the error in
+%   a handy internal macro. Let's have a look at one
+%   developed for the |title| field.
+%   
+%    \begin{macrocode}
+\newif\ifudiss at title
+\def\udiss at blank@title at err{%
+  \ClassError{udiss}{%
+    The `title' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `title'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+%    \end{macrocode}
+% 
+%   We use the same method for all the other \emph{strict}
+%   commands too.
+% 
+%    \begin{macrocode}\newif\ifudiss at author
+\def\udiss at blank@author at err{%
+  \ClassError{udiss}{%
+    The `author' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `author'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+%    \end{macrocode}
+% 
+%   Now we start developing the code for the |title| and
+%   |author| parameters. In order to check whether a macro
+%   is empty or not, we need to use the
+%   |\ifx\macro|$_{1}$|\macro|$_{2}$ construct. But since
+%   we have an argument and not a ready macro for
+%   comparison, we first we develop an internal macro with
+%   the argument as its value.
+% 
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  code    title          = {%
+    \def\udiss at tmp@title{#1}%
+%    \end{macrocode}
+% 
+%   The true branch of this conditional, i.e., everything
+%   till either |\else| or |\fi| is found, defines the
+%   actual macro to be used while typesetting, i.e.,
+%   |\udiss at title|, but since the user has provided a blank
+%   macro, we give a cryptic value to the macro, e.g.,
+%   |-NoValidTitle-|. Note that this gets printed in the
+%   document even though the user gets an error. Since we
+%   use this regularly, a user may search for |-NoValid| in
+%   the output to find out all the values they missed
+%   providing.
+% 
+%    \begin{macrocode}
+    \ifx\udiss at tmp@title\empty
+      \def\udiss at title{-NoValidTitle-}%
+%    \end{macrocode}
+% 
+%   After this, we print the error for the blank argument.
+%   In the |\else| branch (which means the user did
+%   \emph{not} pass a blank argument, but provided a
+%   legit value), we define the command with the actual
+%   user-given-value. This is the most ideal condition.
+% 
+%    \begin{macrocode}
+      \udiss at blank@title at err
+    \else
+      \def\udiss at title{#1}%
+    \fi
+  },%
+%    \end{macrocode}
+% 
+% We repeat the same pattern for the \emph{strict} commands
+% now. Here is the code for |author|.
+% 
+%    \begin{macrocode}
+  code    author         = {%
+    \def\udiss at tmp@author{#1}%
+    \ifx\udiss at tmp@author\empty
+      \def\udiss at author{-NoValidAuthor-}%
+      \udiss at blank@author at err
+    \else
+      \def\udiss at author{#1}%
+    \fi
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{subtitle,\subtitle,shorttitle,\shorttitle}
+%   Here is the code for the |subtitle| and |shorttitle|
+%   fields. As they aren't \emph{strict}, no errors needed
+%   for them. We need a conditional though. We set it to
+%   true so that it is understood that this field was not
+%   forgotten by the author. Only if their value is true, we
+%   print them later.
+%   
+%    \begin{macrocode}
+\newif\ifudiss at subtitle
+\newif\ifudiss at shorttitle
+\ekvdefinekeys{udiss}{%
+  code    subtitle       = {%
+    \IfBlankTF{#1}{%
+      \def\udiss at subtitle{-NoValidSubtitle-}%
+      \udiss at subtitletrue
+    }{%
+      \def\udiss at subtitle{#1}%
+      \udiss at subtitletrue
+    }%
+  },%
+  code    shorttitle     = {%
+    \IfBlankTF{#1}{%
+      \def\udiss at shorttitle{-NoValidSubtitle-}%
+      \udiss at shorttitletrue
+    }{%
+      \def\udiss at shorttitle{#1}%
+      \udiss at shorttitletrue
+    }%
+  }%
+}
+\NewDocumentCommand{ \subtitle }{ m }{%
+  \def\udiss at subtitle{#1}%
+  \udiss at subtitletrue
+}
+\NewDocumentCommand{ \shorttitle }{ m }{%
+  \def\udiss at shorttitle{#1}%
+  \udiss at shorttitletrue
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   stream,\stream,discipline,\discipline,^^A
+%   degree,\degree^^A
+% }
+%   Again some compulsory fields, so we develop the errors,
+%   then the \emph{key}s and then the macros.
+%
+%    \begin{macrocode}
+\newif\ifudiss at stream
+\def\udiss at blank@stream at err{%
+  \ClassError{udiss}{%
+    The `stream' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `stream'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\newif\ifudiss at discipline
+\def\udiss at blank@discipline at err{%
+  \ClassError{udiss}{%
+    The `discipline' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `discipline'
+    field. This is not\MessageBreak permitted by the class.% 
+  }%
+}
+\newif\ifudiss at degree
+\def\udiss at blank@degree at err{%
+  \ClassError{udiss}{%
+    The `degree' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `degree'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  code    stream         = {%
+    \def\udiss at tmp@stream{#1}%
+    \ifx\udiss at tmp@stream\empty
+      \def\udiss at stream{-NoValidStream-}%
+      \udiss at blank@stream at err
+    \else
+      \def\udiss at stream{#1}%
+    \fi
+  },%
+  code    discipline     = {%
+    \def\udiss at tmp@discipline{#1}%
+    \ifx\udiss at tmp@discipline\empty
+      \def\udiss at discipline{-NoValidDiscipline-}%
+      \udiss at blank@discipline at err
+    \else
+      \def\udiss at discipline{#1}%
+    \fi
+  },%
+  code    degree         = {%
+    \def\udiss at tmp@degree{#1}%
+    \ifx\udiss at tmp@degree\empty
+      \def\udiss at degree{-NoValidDegree-}%
+      \udiss at blank@degree at err
+    \else
+      \def\udiss at degree{#1}%
+    \fi
+  }%
+}
+\NewDocumentCommand{ \stream }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@stream at err
+    \def\udiss at stream{-NoValidStream-}%
+  }{%
+    \def\udiss at stream{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at streamtrue
+  }{%
+    \def\udiss at stream{#1}%
+    \udiss at streamtrue
+  }%
+}
+\NewDocumentCommand{ \discipline }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@discipline at err
+    \def\udiss at discipline{-NoValidDiscipline-}%
+  }{%
+    \def\udiss at discipline{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at disciplinetrue
+  }{%
+    \def\udiss at discipline{#1}%
+    \udiss at disciplinetrue
+  }%
+}
+\NewDocumentCommand{ \degree }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@degree at err
+    \def\udiss at degree{-NoValidDegree-}%
+  }{%
+    \def\udiss at degree{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at degreetrue
+  }{%
+    \def\udiss at degree{#1}%
+    \udiss at degreetrue
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% We then develop the last set of \emph{strict} macros which
+% are used in the declaration and some on the title-page
+% too. The method is no different.
+% 
+% \begin{macro}{^^A
+%   supervisor,\supervisor,university,\university,^^A
+%   department,\department^^A
+% }
+%    \begin{macrocode}
+\newif\ifudiss at supervisor
+\newif\ifudiss at university
+\newif\ifudiss at department
+\def\udiss at blank@supervisor at err{%
+  \ClassError{udiss}{%
+    The `supervisor' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `supervisor'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\def\udiss at blank@university at err{%
+  \ClassError{udiss}{%
+    The `university' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `university'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\def\udiss at blank@department at err{%
+  \ClassError{udiss}{%
+    The `department' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `department'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  code    supervisor         = {%
+    \def\udiss at tmp@supervisor{#1}%
+    \ifx\udiss at tmp@supervisor\empty
+      \def\udiss at supervisor{-NoValidSupervisor-}%
+      \udiss at blank@supervisor at err
+    \else
+      \def\udiss at supervisor{#1}%
+    \fi
+  },%
+  code    university         = {%
+    \def\udiss at tmp@university{#1}%
+    \ifx\udiss at tmp@university\empty
+      \def\udiss at university{-NoValidUniversity-}%
+      \udiss at blank@university at err
+    \else
+      \def\udiss at university{#1}%
+    \fi
+  },%
+  code    department         = {%
+    \def\udiss at tmp@department{#1}%
+    \ifx\udiss at tmp@department\empty
+      \def\udiss at department{-NoValidDepartment-}%
+      \udiss at blank@department at err
+    \else
+      \def\udiss at department{#1}%
+    \fi
+  }%
+}
+\NewDocumentCommand{ \supervisor }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@supervisor at err
+    \def\udiss at supervisor{-NoValidSupervisor-}%
+  }{%
+    \def\udiss at supervisor{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at supervisortrue
+  }{%
+    \def\udiss at supervisor{#1}%
+    \udiss at supervisortrue
+  }%
+}
+\NewDocumentCommand{ \university }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@university at err
+    \def\udiss at author{-NoValidUniversity-}%
+  }{%
+    \def\udiss at university{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at universitytrue
+  }{%
+    \def\udiss at university{#1}%
+    \udiss at universitytrue
+  }%
+}
+\NewDocumentCommand{ \department }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@department at err
+    \def\udiss at author{-NoValidDepartment-}%
+  }{%
+    \def\udiss at department{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at departmenttrue
+  }{%
+    \def\udiss at department{#1}%
+    \udiss at departmenttrue
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{ \logo,\logo* }
+%   We develop the |\logo| command with a starred variant
+%   using the intuitive \pkg{xparse} trickery. Notice the
+%   use of two different conditionals |\ifudiss at logo| and
+%   |\ifudiss at texlogo|.
+% 
+%    \begin{macrocode}
+\newif\ifudiss at logo
+\newif\ifudiss at texlogo
+\NewDocumentCommand{ \logo }{ s +m }{%
+  \IfBooleanTF{#1}{%
+    \def\udiss at texlogo{#2}%
+    \udiss at texlogotrue
+  }{%
+    \def\udiss at logo{#2}%
+  }%
+  \udiss at logotrue
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{logo,logo*}
+%   \expkvlogo{} doesn't have a way to have starred
+%   variants of the keys, but we can always create a
+%   different key with an additional star. That's what we do
+%   here.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  code    logo           = {%
+    \def\udiss at logo{#1}%
+    \udiss at logotrue
+  },%
+  code    logo*          = {%
+    \def\udiss at texlogo{#1}%
+    \udiss at logotrue
+    \udiss at texlogotrue
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% Now we move to the complicated task of developing the
+% mechanism for loading languages. In order to imitate the
+% syntax of |babel|, we need a parser which inteprets
+% comma-separated language-names. We develop a new counter
+% called |udiss at langbabel| and use it with |\alph| inside
+% |\csname| in order to produce an ordered sequence of
+% macros that store the different language-names. After
+% parsing, the language macros should look like
+% |\udiss at langbabel@a|, |\udiss at langbabel@a| etc. The
+% following code does that. The |\udiss at lgbbl| macro is the
+% internal parser for the language-names.
+% 
+%    \begin{macrocode}
+\newcounter{udiss at langbabel}
+\stepcounter{udiss at langbabel}
+\def\udiss at int@langbabel#1{%
+  \expandafter\edef
+    \csname
+      udiss at langbabel@\alph{udiss at langbabel}%
+    \endcsname{#1}%
+  \stepcounter{udiss at langbabel}%
+}
+\NewDocumentCommand\udiss at lgbbl{ >{ \SplitList{,} } m }{%
+  \ProcessList{#1}{\udiss at int@langbabel}%
+}
+%    \end{macrocode}
+% 
+% \begin{macro}{language,ldfbabel,nofontwarning}
+%   We first create the if-conditionals required for this
+%   job.
+%   
+%    \begin{macrocode}
+\newif\ifudiss at lg@used
+\newif\ifudiss at ldfbabel
+%    \end{macrocode}
+% 
+%   The |language| key takes the comma-separated list as its
+%   argument and passes the list to the |\udiss at lgbbl|
+%   macro which we just saw. So whenever we pass multiple
+%   languages to the option |language|, it is parsed by
+%   |\udiss at lgbbl|. We then turn the |\ifudiss at lg@used|
+%   conditional on, so that when neither of these options
+%   are used by the user, we can do something. 
+% 
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  code    language       = {%
+    \udiss at lgbbl{#1}%
+    \udiss at lg@usedtrue
+  },%
+%    \end{macrocode}
+% 
+%   On the other hand though, the process is quite simple
+%   and straight forward. We need to store the list of the
+%   |.ldf|-languages in a macro and later pass it to the
+%   \pkg{babel} package as \pkg{babel} already understands
+%   how to parse it. We store the list in the
+%   |\udiss at ldfbabel@list| macro. With this option, we have
+%   to turn an additional conditional on, i.e.,
+%   |\ifudiss at ldfbabel|. Usually we don't use the |.ldf|
+%   mechanism at all as mentioned in \cref{doc}.
+% 
+%    \begin{macrocode}
+  code    ldfbabel       = {%
+    \def\udiss at ldfbabel@list{#1}%
+    \udiss at lg@usedtrue
+    \udiss at ldfbabeltrue
+  },%
+%    \end{macrocode}
+% 
+% The |nofontwarning| option is developed using the
+% |invbool| \emph{type} which creates (or uses, if present)
+% a conditional and sets it to true. In this case, it is
+% |\ifudiss at font@warning|. Unless the option |nofontwarning|
+% is used, the aforementioned condition is true.
+% 
+%    \begin{macrocode}
+  invbool nofontwarning  = {\ifudiss at font@warning}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{license,copyright-yrs,localcopyright}
+%   Now we develop the options for setting a license with
+%   the legit copyrightable years. As usual, we first
+%   develop the required conditionals.
+%   
+%    \begin{macrocode}
+\newif\ifudiss at free@culture
+\newif\ifudiss at ccbysa
+\newif\ifudiss at gfdl
+%    \end{macrocode}
+% 
+%   We use a new \expkvlogo{} \emph{type}s for license which
+%   is |choice|. It takes a definite list of |choice|s that
+%   run some arbitrary code. We define an internal macro
+%   |\udiss at license@notice| which holds the notice text of
+%   the selected licenses. We set the
+%   |\ifudiss at free@culture| conditional to true if the
+%   user's |choice| is |CC-BY-SA| or |GFDL|. Why we do this
+%   is because if the choice is |all-rights-reserved|, it
+%   need not be explicitly mentioned. It is always assumed.
+%   Also, it is seen in PDF's metadata. For this, we enable
+%   the conditional. Using the |initial| \emph{prefix} of
+%   \expkvlogo{}, we set the |all-rights-reserved| as the
+%   default choice of users.
+% 
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  choice  license        = {%
+    all-rights-reserved    = {%
+      \def\udiss at license@notice{%
+        All rights reserved.\textLF
+      }%
+    },%
+    CC-BY-SA               = {%
+      \def\udiss at license@notice{%
+        This work is available under the "Creative Commons
+        Attribution ShareAlike 4.0 International" license.%
+      }%
+      \def\udiss at free@license at url{%
+        https://creativecommons.org/licenses/%
+        by-sa/4.0/legalcode.txt%
+      }%
+      \udiss at free@culturetrue
+      \udiss at ccbysatrue
+    },%
+    GFDL                   = {%
+      \def\udiss at license@notice{%
+        Permission is granted to copy, distribute and/or
+        modify this document under the terms of the GNU Free
+        Documentation License, Version 1.3 or any later
+        version published by the Free Software Foundation;
+        with no Invariant Sections, no Front-Cover Texts,
+        and no Back-Cover Texts. A copy of the license is
+        included in the section entitled “GNU Free
+        Documentation License”.%
+      }%
+      \def\udiss at free@license at url{%
+        https://www.gnu.org/licenses/fdl-1.3.txt%
+      }%
+      \udiss at free@culturetrue
+      \udiss at gfdltrue
+    },%
+  },%
+  initial license        = {all-rights-reserved},%
+%    \end{macrocode}
+% 
+%   Then we use the |store| \emph{type} which, as the name
+%   suggests, |store|s the value given by the user in a
+%   macro. Again, with the |initial| \emph{prefix}, we set
+%   the initial values for the two options.
+% 
+%    \begin{macrocode}
+  store   copyright-yrs  = {\udiss at copyrightable@years},%
+  initial copyright-yrs  = {\the\year},%
+  store   localcopyright = {\udiss at local@copyright},%
+  initial localcopyright = {Copyright},%
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{placeholders}
+%   This option pre-fills all the necessary fields with some
+%   random (and rather delusional :P) values. We use the
+%   |nmeta| \emph{type} of \expkvlogo{} for this. This type
+%   uses the already developed keys with some values. When
+%   the key developed with |nmeta| is used by the user, it
+%   behaves as if the user has passed the keys inside it
+%   with the corresponding values.
+%   
+%    \begin{macrocode}
+  nmeta   placeholders   = {%
+            title          = {%
+              A groundbreaking dissertation%
+            },%
+            author         = {%
+              Jane Doe%
+            },%
+            pronouns       = {She/her},%
+            subtitle       = {%
+              A milestone study on a longstanding question
+              in a discipline%
+            },%
+            shorttitle     = {A Milestone study},%
+            stream         = {intriguing stream},%
+            discipline     = {rigorous discipline},
+            degree         = {enriching degree},%
+            supervisor     = {A kind supervisor},%
+            university     = {An ideal university},%
+            department     = {A homely department},%
+            license        = {CC-BY-SA},%
+            copyright-yrs  = {2022, 2023, 2024}%
+          }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   lot,lof,declaration,declarationtxt,decllocal^^A
+% }
+%   The list of tables and figures are conditionals
+%   developed with the |bool| \emph{type} of \expkvlogo{}
+%   which creates (or uses, if already present) a boolean.
+%   It is by default set to the false value. The declaration
+%   also is a |bool|ean as it is turned off by default.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  bool    lot            = {\ifudiss at lot},%
+  bool    lof            = {\ifudiss at lof},%
+  bool    declaration    = {\ifudiss at declaration},%
+%    \end{macrocode}
+% 
+%   The |declarationtxt| \emph{key} contains text which has
+%   paragraphs inside it and the default \emph{key-value}s
+%   of \expkvlogo{} are |\def| type (meaning, they don't
+%   accept |\par| tokens). So in order to have the effect of
+%   |\long\def|, we need to use |long| \emph{prefix} of
+%   \expkvlogo{}. We set an initial value for this too. Then
+%   we store the value for the local word for declaration.
+% 
+%    \begin{macrocode}
+  long
+  store   declarationtxt = {\udiss at declaration},%
+  initial declarationtxt = {%
+    \noindent As required by the university regulations, I
+    wish to state that the work embodied in this thesis
+    titled \enquote{\udiss at title: \udiss at subtitle} forms
+    my own contribution to the research work carried out
+    under the guidance of \udiss at supervisor\ at the
+    \udiss at university, \udiss at department.
+    
+    This work has not been submitted for any other degree
+    of this or any other university. Whenever references
+    have been made to previous works of others, it has
+    been clearly indicated as such and included in the
+    bibliography.
+    
+    \bigskip
+    \flushright{%
+      Date: \today
+      
+      \vspace{4em}%
+      
+      Name: \udiss at author
+    }%
+    
+    \bigskip\bigskip
+    \flushleft{%
+      Certified by:%
+      
+      \vspace{4em}%
+      
+      \udiss at supervisor
+    }%
+  },%
+  store   decllocal      = {\udiss at decllocal},%
+  initial decllocal      = {Declaration}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   print,norefcolors,udisslinkclr,^^A
+%   udissurlclr,udissciteclr^^A
+% }
+%   The |print| key is created using the |bool| \emph{type}.
+%   The |norefcolors| option, on the other hand, uses the
+%   |invbool| \emph{type}. For |udisslinkclr|, |udissurlclr|
+%   and |udissciteclr| we use the |store| \emph{type} along
+%   with some |initial| values.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  bool    print          = {\ifudiss at print},%
+  invbool norefcolors    = {\ifudiss at colors},%
+  store   udisslinkclr   = {\udiss at int@link at color},%
+  initial udisslinkclr   = {udisslink},%
+  store   udissurlclr    = {\udiss at int@url at color},%
+  initial udissurlclr    = {udissurl},%
+  store   udissciteclr   = {\udiss at int@cite at color},%  
+  initial udissciteclr   = {udisscite}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{blind}
+%   The next boolean is for printing blind documents.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  bool    blind          = {\ifudiss at blind}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{framed-title}
+%   We provide a conditional for producing a framed
+%   title-page. The conditional will be used later while
+%   typesetting.
+% 
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  bool    framed-title   = {\ifudiss at ftitle}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{oldone,oldstylenumoff}
+%   We set the old style numerals as the default for
+%   typesetting. We provide an inverse boolean for setting
+%   the old style numbers off. The special shape for number
+%   one is enabled only with the boolean key |oldone|. We
+%   develop it here.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  invbool oldstylenumoff = {\ifudiss at oldstylenum},%
+  bool    oldone         = {\ifudiss at oldone}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{explicitext,ignorefsoff}
+%   To turn on the explicit extension mechanism of the
+%   font-loading packages, we provide a conditional. It is
+%   disabled by default and hence is of the |bool| type.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  bool    explicitext    = {\ifudiss at explicitext},%
+  invbool ignorefsoff    = {\ifudiss at ignorefontspec}%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{fulfilment}
+%   In order to store the sentence written on the
+%   title-page, we again use the common |store| and
+%   |initial store| pair.
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   fulfilment     = {\udiss at fulfilment},%
+  initial fulfilment     = {%
+    A dissertation submitted in the partial fulfilment of
+    the requirements for the \udiss at degree\ program in
+    \udiss at discipline.%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% All of the upcoming \emph{key}s are font-selection keys.
+% We set their defaults as explained in \cref{udissenfonts}.
+% 
+% \begin{macro}{^^A
+%   rmfont,rmbffont,rmitfont,rmbfitfont,^^A
+%   rmslfont,rmbfslfont^^A
+% }
+%   The following sets the default text font for the
+%   document. We are using NewCM family as the default
+%   font-family. But as of now, the NewCM fonts don't have
+%   all the variants. E.g., it lacks slanted/oblique shapes
+%   in the natural weight, but we provide the regular ones
+%   in place of them.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   rmfont         = {\udiss at rmfont},%
+  initial rmfont         = {NewCM10-Book.otf},%
+  store   rmbffont       = {\udiss at rmbffont},%
+  initial rmbffont       = {NewCM10-Bold.otf},%
+  store   rmitfont       = {\udiss at rmitfont},%
+  initial rmitfont       = {NewCM10-BookItalic.otf},%
+  store   rmbfitfont     = {\udiss at rmbfitfont},%
+  initial rmbfitfont     = {NewCM10-BoldItalic.otf},%
+  store   rmslfont       = {\udiss at rmslfont},%
+  initial rmslfont       = {NewCM10-Book.otf},%
+  store   rmbfslfont     = {\udiss at rmbfslfont},%
+  initial rmbfslfont     = {NewCM10-Bold.otf},%
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   sffont,sfbffont,sfitfont,sfbfitfont,^^A
+%   sfslfont,sfbfslfont^^A
+% }
+%   
+%   Similarly, we store values for the sans fonts too. NewCM
+%   lacks certain variants in sans, but again, the options
+%   are set font-agnostically and hence they are more in
+%   number than the actually available variants. The sans
+%   fonts in NewCM, don't have an Italic design. We have
+%   used the oblique version of the fonts there instead.
+%   Note that the same designs are used for the slanted
+%   fonts too.
+%   
+%    \begin{macrocode}
+  store   sffont         = {\udiss at sffont},%
+  initial sffont         = {NewCMSans10-Book.otf},%
+  store   sfbffont       = {\udiss at sfbffont},%
+  initial sfbffont       = {NewCMSans10-Bold.otf},%
+  store   sfitfont       = {\udiss at sfitfont},
+  initial sfitfont       = {NewCMSans10-BookOblique.otf},%
+  store   sfbfitfont     = {\udiss at sfbfitfont},%
+  initial sfbfitfont     = {NewCMSans10-BoldOblique.otf},%
+  store   sfslfont       = {\udiss at sfslfont},%
+  initial sfslfont       = {NewCMSans10-BookOblique.otf},%
+  store   sfbfslfont     = {\udiss at sfbfslfont},%
+  initial sfbfslfont     = {NewCMSans10-BoldOblique.otf},%
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   ttfont,ttbffont,ttitfont,ttbfitfont,^^A
+%   ttslfont,ttbfslfont^^A
+% }
+% The settings for typewriter fonts are loaded in the below
+% code. We have a strange situation here. NewCM provides
+% |BookItalic|, but doesn't have a |BoldItalic|. We instead
+% have |BoldOblique|. Thus we set the |BookItalic| as the
+% |ttitfont| and |BoldOblique| as the |ttbfit| font. The
+% same pair for |ttslfont| and |ttbfslfont|.
+% 
+%    \begin{macrocode}
+  store   ttfont         = {\udiss at ttfont},%
+  initial ttfont         = {NewCMMono10-Book.otf},%
+  store   ttbffont       = {\udiss at ttbffont},
+  initial ttbffont       = {NewCMMono10-Bold.otf},%
+  store   ttitfont       = {\udiss at ttitfont},%
+  initial ttitfont       = {NewCMMono10-BookItalic.otf},%
+  store   ttbfitfont     = {\udiss at ttbfitfont},%
+  initial ttbfitfont     = {NewCMMono10-BoldOblique.otf},%
+  store   ttslfont       = {\udiss at ttslfont},%
+  initial ttslfont       = {NewCM10-Book.otf},%
+  store   ttbfslfont     = {\udiss at ttbfslfont},%
+  initial ttbfslfont     = {NewCMMono10-BoldOblique.otf},%
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{mathfont,mathbffont}
+% Maths fonts have very little variation, so we just have
+% two parameters for selecting the fonts and two of the
+% usual parameters for features and extensions.
+% 
+%    \begin{macrocode}
+  store   mathfont       = {\udiss at mathfont},%
+  initial mathfont       = {NewCMMath-Book.otf},%
+  store   mathbffont     = {\udiss at mathbffont},%
+  initial mathbffont     = {NewCMMath-Bold.otf},%
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   rmfeatures,rmfntext,sffeatures,sffntext,^^A
+%   ttfeatures,ttfntext,mathfeatures,mathfntext^^A
+% }
+%   If the user wants to add features to the selected fonts,
+%   they are allowed to use these commands and if they use
+%   the |explicitext| option, they can choose the font
+%   extensions too using the \emph{key}s specifically
+%   developed for that. We use |store| and |choice|
+%   \emph{type}s for this.
+% 
+%    \begin{macrocode}
+  store   rmfeatures     = {\udiss at rmfeatures},%
+  choice  rmfntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at rmfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `rmfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeSerif, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {FreeSerif.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {FreeSerif},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at rmfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `rmfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpRoman-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {KpRoman-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {KpRoman-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   sffeatures     = {\udiss at sffeatures},%
+  choice  sffntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at sffntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `sffntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeSans, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {FreeSans.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {FreeSans},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at sffntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `sffntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpSans-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {KpSans-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {KpSans-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   ttfeatures     = {\udiss at ttfeatures},%
+  choice  ttfntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at ttfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `ttfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeMono, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {FreeMono.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {FreeMono},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at ttfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `ttfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpMono-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {KpMono-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {KpMono-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   mathfeatures   = {\udiss at mathfeatures},%
+  choice  mathfntext     = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at mathfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `mathfntext'
+                  to add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  NotoSansMath-Regular, you may choose one
+                  of the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {NotoSansMath-Regular.ttf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {NotoSansMath-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at mathfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `mathfntext'
+                  to add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  XITSMath-Regular, you may choose one of
+                  the following two\MessageBreak methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {XITSMath-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {XITSMath-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{^^A
+%   titleshape,titlefont,titleffeat,titlesize,titlecolor^^A
+% }
+%   We store various variables in these keys for customising
+%   the layout of the title-page. The following are the keys
+%   specifically developed for customising the title. The
+%   sizing is done with internal macros specifically
+%   designed for consistent size-changing. We use
+%   \pkg{fontspec}-scaling for that.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   titleshape     = {\udiss at title@shape},%
+  initial titleshape     = {\bfseries},%
+  store   titlefont      = {\udiss at title@font},%
+  store   titlesize      = {\udiss at title@size},%
+  initial titlesize      = {\udiss at int@huge},%
+  store   titlecolor     = {\udiss at title@color},%
+  initial titlecolor     = {black},%
+  store   titleffeat     = {\udiss at title@fontfeats},%
+  initial titleffeat     = {}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   subtitleshape,subtitlefont,subtitleffeat,^^A
+%   subtitlesize,subtitlecolor^^A
+% }
+%   The same logic is applied for subtitles and these
+%   variables are created.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   subtitleshape  = {\udiss at subtitle@shape},%
+  initial subtitleshape  = {\normalfont},%
+  store   subtitlefont   = {\udiss at subtitle@font},%
+  store   subtitlesize   = {\udiss at subtitle@size},%
+  initial subtitlesize   = {\udiss at int@large},%
+  store   subtitlecolor  = {\udiss at subtitle@color},%
+  initial subtitlecolor  = {black},%
+  store   subtitleffeat  = {\udiss at subtitle@fontfeats},%
+  initial subtitleffeat  = {}% 
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   authorshape,authorfont,authorsize,authorcolor,^^A
+%   authorffeat^^A
+% }
+%   Similarly, we have the following keys for author.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   authorshape    = {\udiss at author@shape},%
+  initial authorshape    = {\normalfont},%
+  store   authorfont     = {\udiss at author@font},%
+  store   authorsize     = {\udiss at author@size},%
+  initial authorsize     = {\udiss at int@large},%
+  store   authorcolor    = {\udiss at author@color},%
+  initial authorcolor    = {black},%
+  store   authorffeat    = {\udiss at author@fontfeats},%
+  initial authorffeat    = {}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   unishape,unifont,unisize,unicolor,uniffeat^^A
+% }
+%   The same pattern for printing the university name.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   unishape       = {\udiss at uni@shape},%
+  initial unishape       = {\itshape},%
+  store   unifont        = {\udiss at uni@font},%
+  store   unisize        = {\udiss at uni@size},%
+  initial unisize        = {\normalsize},%
+  store   unicolor       = {\udiss at uni@color},%
+  initial unicolor       = {black},%
+  store   uniffeat       = {\udiss at uni@fontfeats}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   deptshape,deptfont,deptsize,deptcolor,deptffeat^^A
+% }
+%   The following keys for the department.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   deptshape      = {\udiss at dept@shape},%
+  initial deptshape      = {\normalfont},%
+  store   deptfont       = {\udiss at dept@font},%
+  store   deptsize       = {\udiss at dept@size},%
+  initial deptsize       = {\udiss at int@small},%
+  store   deptcolor      = {\udiss at dept@color},%
+  initial deptcolor      = {black},%
+  store   deptffeat      = {\udiss at dept@fontfeats},%
+  initial deptffeat      = {}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   ffshape,fffont,ffsize,ffcolor,ffffeat^^A
+% }
+%   These are for the fulfilment-text.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   ffshape        = {\udiss at fulfilment@shape},%
+  initial ffshape        = {\normalfont},%
+  store   fffont         = {\udiss at fulfilment@font},%
+  store   ffsize         = {\udiss at fulfilment@size},%
+  initial ffsize         = {\udiss at int@small},%
+  store   ffcolor        = {\udiss at fulfilment@color},%
+  initial ffcolor        = {black},%
+  store   fffeat         = {\udiss at fulfilment@fontfeats},%
+  initial fffeat         = {}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{^^A
+%   logowidth,logoheight^^A
+% }
+%   The following parameters save the values for the
+%   logo-height and the logo-width. These are the last
+%   options after which we |\Process| our options.
+%   
+%    \begin{macrocode}
+\ekvdefinekeys{udiss}{%
+  store   logowidth      = {\udiss at logo@width},%
+  initial logowidth      = {0.3},%
+  store   logoheight     = {\udiss at logo@hght},%
+  initial logoheight     = {0.075}%
+}
+\ekvoProcessGlobalOptions{udiss}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\dissertationstyle}
+%   We develop the command for loading custom styles. It
+%   just inputs files starting with |udiss-style-| followed
+%   by the designated tag, e.g., |ukerala| for the
+%   university of Kerala.
+%   
+%    \begin{macrocode}
+\NewDocumentCommand{ \dissertationstyle }{ m }{%
+  \AddToHook{begindocument/before}{%
+    \input{udiss-style-#1}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% To minimise loading a lot of packages, we use the
+% \cls{memoir} class which provides many features useful for
+% document-creation. But we also need to set print and
+% digital versions of the dissertations. For that we use our
+% conditional.
+% 
+%    \begin{macrocode}
+\ifudiss at print
+\else
+  \PassOptionsToClass{oneside}{memoir}%
+\fi
+\LoadClass{memoir}
+%    \end{macrocode}
+% 
+% \begin{macro}{\title,\author}
+%   We defined most other commands as per the flow of the
+%   documentation, but as mentioned before, we had kept
+%   |\title| and |\author| aside. As mentioned before, we
+%   did so because these commands are defined by the
+%   \cls{memoir} class. If we had defined it before loading
+%   the memoir class (which we just loaded), the commands
+%   would have got renewed after loading the class and thus
+%   our internal macros would have failed. On the other
+%   hand, we could not have loaded the memoir class in the
+%   beginning, because we use the |\ifudiss at print|
+%   conditional, i.e., developed with the help of
+%   \expkvlogo{def} package. Even if we had separated the
+%   code of |print| key, it would have been necessary to
+%   process the keys using |\ekvoProcessGlobalOptions|, but
+%   we could not have done that since there were a lot of
+%   other options pending. This is why, we develop the
+%   |\title| and |\author| commands now.
+%   
+%    \begin{macrocode}
+\RenewDocumentCommand{ \title }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@title at err
+    \def\udiss at title{-NoValidTitle-}%
+  }{%
+    \def\udiss at title{#1}%
+  }%
+}
+\RenewDocumentCommand{ \author }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@author at err
+    \def\udiss at author{-NoValidAuthor-}%
+  }{%
+    \def\udiss at author{#1}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% We are using OpenType fonts for better accessibility. They
+% are incompatible with the classic PDF\LaTeX\ and require
+% either Lua\LaTeX\ or \hologo{XeLaTeX} for compilation. To
+% ensure that one of these two is loaded, we load the
+% \pkg{iftex} package and mandate a Unicode engine with the
+% |\RequireTUTeX| command.
+% 
+%    \begin{macrocode}
+\RequirePackage{iftex}
+\RequireTUTeX
+%    \end{macrocode}
+% 
+% We used custom \cls{udiss} size commands. They are
+% developed with \pkg{fontspec}-scaling as follows:
+% 
+%    \begin{macrocode}
+\def\udiss at int@HUGE{%
+  \addfontfeature{Scale={2.5}}%
+}
+\def\udiss at int@Huge{%
+  \addfontfeature{Scale={2}}%
+}
+\def\udiss at int@huge{%
+  \addfontfeature{Scale={1.7}}%
+}
+\def\udiss at int@LARGE{%
+  \addfontfeature{Scale={1.4}}%
+}
+\def\udiss at int@Large{%
+  \addfontfeature{Scale={1.2}}%
+}
+\def\udiss at int@large{%
+  \addfontfeature{Scale={1.1}}%
+}
+\def\udiss at int@small{%
+  \addfontfeature{Scale={0.9}}%
+}
+\def\udiss at int@footnotesize{%
+  \addfontfeature{Scale={0.8}}%
+}
+\def\udiss at int@scriptsize{%
+  \addfontfeature{Scale={0.7}}%
+}
+\def\udiss at int@tiny{%
+  \addfontfeature{Scale={0.6}}%
+}
+\def\udiss at int@miniscule{%
+  \addfontfeature{Scale={0.5}}%
+}
+%    \end{macrocode}
+% 
+% We require the \pkg{babel} package for loading the
+% language settings. We have the following three situations
+% with loading languages in \cls{udiss}:
+% 
+% \begin{enumerate}
+% \item Users don't load any of the language options at all.
+% \item Users load languages with option |ldfbabel|.
+% \item Users load languages with option |language|.
+% \end{enumerate}
+% 
+% If a user has used |ldfbabel|, then the macro which stores
+% the language-list is directly passed to the package using
+% |\PassOptionsToPackage|.
+% 
+%    \begin{macrocode}
+\ifudiss at lg@used
+  \ifudiss at ldfbabel
+    \PassOptionsToPackage{%
+      \udiss at ldfbabel@list
+    }{babel}%
+  \fi
+%    \end{macrocode}
+% 
+% If user hasn't loaded any language options, we assume that
+% they have no intent to load languages that require |.ldf|
+% files and hence we mandate loading |.ini| files for all
+% the languages. In addition to that, we load |english| as
+% the main language. This takes care of the first two
+% situations.
+% 
+%    \begin{macrocode}
+\else
+  \PassOptionsToPackage{english,provide*=*}{babel}%
+\fi
+\RequirePackage{babel}
+%    \end{macrocode}
+% 
+% We also load package \pkg{iflang} for testing
+% language-names.
+% 
+%    \begin{macrocode}
+\RequirePackage{iflang}
+%    \end{macrocode}
+% 
+% First we check if the user has loaded |ldf| languages. We
+% ignore that branch completely. If it is not loaded and
+% they have loaded exactly one language, then we set that
+% language as the main language. Note that when user uses
+% one language, the value of the counter is 2 as it is
+% increased by the counter each time.
+% 
+%    \begin{macrocode}
+\newcounter{udiss at tmp@langcnt}
+\ifudiss at ldfbabel
+\else
+  \ifudiss at lg@used
+    \ifnum\theudiss at langbabel=2\relax
+      \addtocounter{udiss at langbabel}{-1}%
+      \ifLuaTeX
+        \babelprovide[%
+          main,%
+          import,%
+          onchar                 ={ids fonts}%
+        ]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \else
+        \babelprovide[main,import]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \fi
+    \fi
+%    \end{macrocode}%
+% 
+% When users use multiple languages, the situation is a bit
+% more complicated. Because the parser parses and increases
+% the counter each time. Suppose, the user provided 5
+% languages, the parser will create 5 macros \emph{and}
+% increase the counter for one last time resulting in the
+% value 6. In order to stop processing when the number of
+% actually used languages is reached, we need to store the
+% current number \emph{minus one} because of this. We have
+% to start a loop from value 1 till it reaches the last
+% value. For this, we reset the counter. In order % to stop
+% when all the languages are parsed, we need to remember the
+% actual value of the counter somewhere. Hence we create a
+% temporary counter for this and equate it with the value of
+% our actual counter minus 1. Note that we escape
+% |\ifudiss at ldfbabel| too. Now we start the calculation when
+% the counter's value is 3 or more, basically the author has
+% to use at least two languages in order to activate the
+% loop ahead.
+%   
+%    \begin{macrocode}
+    \ifnum\theudiss at langbabel>2\relax
+      \setcounter{udiss at tmp@langcnt}{%
+        \numexpr\theudiss at langbabel -1\relax
+      }%
+%    \end{macrocode}
+% 
+% We now can safely manipulate our actual counter. Starting
+% from the first language, we load all of them with the
+% |\babelprovide| command. We reset the counter to 1:
+% 
+%    \begin{macrocode}
+      \setcounter{udiss at langbabel}{1}%
+%    \end{macrocode}
+% 
+% Now we start a loop.
+% 
+%    \begin{macrocode}
+      \loop
+%    \end{macrocode}
+% 
+% Only Lua\LaTeX\ supports the |ids fonts| parameter with
+% |\babelprovide| for applying fonts to the input text with
+% respect to their Unicode slots. That is why we start the
+% |\ifLuaTeX| conditional and load the |onchar| option.
+% Loading a conditional inside |\babelprovide| wasn't
+% permitted because of expansion, hence we load the entire
+% command in the else branch. Notice that there is no space
+% after the |=| sign of the |onchar| option. To know why,
+% you may want to read this wonderful answer by Jonathan P.
+% Spratte: \url{https://topanswers.xyz/tex?q=8039#a7652}.
+% 
+%    \begin{macrocode}
+        \ifLuaTeX
+          \babelprovide[%
+            import,%
+            onchar                 ={ids fonts}%
+          ]{%
+%    \end{macrocode}
+% 
+% Now we pass |\udiss at langbabel@a| as an argument to
+% |\babelprovide| command (the value of the counter is as of
+% now 1).
+% 
+%    \begin{macrocode}
+            \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname
+          }%
+%    \end{macrocode}
+% 
+% We start the |\else| branch and use the same thing again,
+% just without the |onchar| option .
+% 
+%    \begin{macrocode}
+        \else
+          \babelprovide[import]{%
+            \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname
+          }%
+        \fi
+%    \end{macrocode}
+% 
+% Woohoo! We loaded the first language successfully. Now, we
+% increment the counter, but there is another situation
+% which we have to take into account. What if the user just
+% loaded a single language with the |language| option? The
+% loop will run into trouble, that's why we only run the
+% loop if the value of the total number of languages is more
+% than one. We had saved it in a temporary counter.
+% 
+%    \begin{macrocode}
+        \ifnum\theudiss at tmp@langcnt=1\relax
+        \else
+          \addtocounter{udiss at langbabel}{1}%
+        \fi
+%    \end{macrocode}
+% 
+% Now the value of the counter is 2 which means the second
+% language. We need to again load the same settings for it,
+% but we can't keep doing this manually since 1) we are lazy
+% (the most important) 2) we have no idea how many languages
+% the user has loaded, so now we actually activate the
+% |\loop| that we had started with the |\repeat| command. It
+% runs all the commands seen after the |\loop| command (this
+% includes the one used for increasing the counter too) till
+% the value of the counter is less than the value of
+% |udiss at tmp@langcnt|. Remember we had already set it to the
+% value of the original counter (before setting it to 1)
+% \emph{minus one}. Now the next command will stop at one
+% number even lesser than it as we have used the |<|
+% relation while comparing. Also, here we will close the
+% if-conditional that checked if more than one languages
+% were used or not.
+% 
+%    \begin{macrocode}
+        \ifnum\theudiss at langbabel<\theudiss at tmp@langcnt
+        \relax
+      \repeat
+    \fi
+%    \end{macrocode}
+% 
+% Are you wondering why we did this? Because we want to set
+% the \emph{exact} last language as the |main| language! The
+% current value of our counter at this point has that
+% language. But remember we are out of the loop as well as
+% the if-conditional. Thus we have to again consider the
+% situation where user just passed one language. So far what
+% we have done is load all the languages except the last one
+% with |\babelprovide|. This includes the single-language
+% case. Thus we need no further processing in that case. So
+% we only parse the last pending language if the user had
+% passed multiple languages. We start an if-conditional and
+% keep its |if|-branch empty and write the rest in the
+% |else|-branch.
+% 
+%    \begin{macrocode}
+    \ifnum\theudiss at langbabel=1\relax
+%    \end{macrocode}
+% 
+% We again use |\babelprovide|, but this time with |main|
+% option. Load the last language successfully.
+% 
+%    \begin{macrocode}
+    \else
+      \ifLuaTeX
+        \babelprovide[%
+          main,%
+          import,%
+          onchar                 ={ids fonts}%
+        ]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \else
+        \babelprovide[main,import]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \fi
+    \fi
+%    \end{macrocode}
+% 
+% Now it's the time to load language support files. We need
+% to load all the language support files and here we don't
+% have the constraint to treat the last language specially.
+% Therefore we add 1 to the temporary counter (the one that
+% was decreased before).
+% 
+%    \begin{macrocode}
+    \setcounter{udiss at tmp@langcnt}{%
+      \numexpr\theudiss at langbabel + 1\relax
+    }%
+%    \end{macrocode}
+% 
+% We again start from the first language. If the support
+% file exists for that language, we |\input| it.
+% 
+%    \begin{macrocode}
+    \setcounter{udiss at langbabel}{1}%
+    \loop
+      \IfFileExists{%
+        udiss-fonts-\csname
+          udiss at langbabel@\alph{udiss at langbabel}%
+        \endcsname
+      }{%
+        \input{%
+          udiss-fonts-\csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+%    \end{macrocode}
+% 
+% Otherwise, we check if the warning option is true. By
+% default it is always true, but if the user has used
+% |nofontwarning| option to turn them off, this conditional
+% should do its job.
+% 
+%    \begin{macrocode}
+      }{%
+        \ifudiss at font@warning
+          \ClassWarningNoLine{udiss}{%
+            We don't support \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname\space yet.%
+            \MessageBreak
+            It requires a font-setup. You may add the fonts
+            directly\MessageBreak to your preamble using:%
+            \MessageBreak\MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{rm}{main font}%
+            \MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{sf}{sans font}%
+            \MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{tt}{mono font}%
+            \MessageBreak\MessageBreak
+            Read more about this in the documentation of
+            `udiss' in a\MessageBreak section called
+            `multilingual typesetting'. Consider%
+            \MessageBreak contacting us with a support
+            request and let us know some\MessageBreak
+            suitable free (libre) fonts for this
+            language. If you\MessageBreak don't wish to see
+            this warning again, use the option%
+            \MessageBreak `nofontwarning' to suppress it%
+          }%
+        \fi
+      }%
+%    \end{macrocode}
+% 
+% Like before, we increment the counter and start the loop
+% till this is repeated for all the languages.
+% 
+%    \begin{macrocode}
+      \addtocounter{udiss at langbabel}{1}%
+      \ifnum\theudiss at langbabel<\theudiss at tmp@langcnt\relax
+    \repeat
+  \fi
+\fi
+%    \end{macrocode}
+% 
+% After all this processing, we load the Roman,
+% \texttt{Typewriter} and \textsf{Sans} fonts stored in the
+% variables set by \emph{key}s.
+% 
+%    \begin{macrocode}
+\babelfont{rm}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at rmfntext},%
+  \fi
+  BoldFont               = {\udiss at rmbffont},%
+  ItalicFont             = {\udiss at rmitfont},%
+  BoldItalicFont         = {\udiss at rmbfitfont},%
+  SlantedFont            = {\udiss at rmslfont},%
+  BoldSlantedFont        = {\udiss at rmbfslfont},%
+  \ifudiss at oldstylenum
+    Numbers              = {OldStyle},%
+    \ifudiss at oldone
+      CharacterVariant   = {6},%
+    \fi
+  \fi
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at rmfeatures
+]{\udiss at rmfont}
+\babelfont{sf}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at sffntext},%
+  \fi
+  BoldFont               = {\udiss at sfbffont},%
+  ItalicFont             = {\udiss at sfitfont},%
+  BoldItalicFont         = {\udiss at sfbfitfont},%
+  SlantedFont            = {\udiss at sfslfont},%
+  BoldSlantedFont        = {\udiss at sfbfslfont},%
+  \ifudiss at oldstylenum
+    Numbers              = {OldStyle},%
+    \ifudiss at oldone
+      CharacterVariant   = {6},%
+    \fi
+  \fi
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at sffeatures
+]{\udiss at sffont}
+\babelfont{tt}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at ttfntext},%
+  \fi
+  BoldFont               = {\udiss at ttbffont},%
+  ItalicFont             = {\udiss at ttitfont},%
+  BoldItalicFont         = {\udiss at ttbfitfont},%
+  SlantedFont            = {\udiss at ttslfont},%
+  BoldSlantedFont        = {\udiss at ttbfslfont},%
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at ttfeatures
+]{\udiss at ttfont}
+%    \end{macrocode}
+% 
+% We load the \pkg{unicode-math} here for loading the math
+% fonts. After that, inside |\expanded|, we load the
+% |\setmathfont| command.
+% 
+%    \begin{macrocode}
+\RequirePackage{unicode-math}
+\expanded{%
+  \setmathfont[%
+    \ifudiss at ignorefontspec%
+      IgnoreFontspecFile,%
+    \fi%
+    \ifudiss at explicitext
+      Extension            = {.\udiss at mathfntext},%
+    \fi
+    BoldFont               = {\udiss at mathbffont},%
+    SlantedFont            = {\udiss at mathfont},%
+    BoldSlantedFont        = {\udiss at mathbffont},%
+    \udiss at mathfeatures%
+  ]{\udiss at mathfont}%
+}
+%    \end{macrocode}
+% 
+% Now we load a few last packages.
+% 
+%    \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage{xcolor}
+\RequirePackage{csquotes}
+%    \end{macrocode}
+% 
+% For Creative Commons license, we use the \pkg{doclicense}
+% package with appropriate settings.
+% 
+%    \begin{macrocode}
+\ifudiss at ccbysa
+  \RequirePackage[%
+    hyperxmp           = {false},%
+    type               = {CC},%
+    modifier           = {by-sa},%
+    version            = {4.0}%
+  ]{doclicense}
+\fi
+%    \end{macrocode}
+% 
+% We set the \cls{udiss}-specific-colours with the following
+% commands, but we set them conditionally. If the colours
+% are disabled, we set the same colours to |black| value.
+%    \begin{macrocode}
+\ifudiss at colors
+  \colorlet{udisslink}{red!60!black}
+  \colorlet{udissurl}{blue!60!black}
+  \colorlet{udisscite}{green!60!black}
+\else
+  \colorlet{udisslink}{black}
+  \colorlet{udissurl}{black}
+  \colorlet{udisscite}{black}
+\fi
+%    \end{macrocode}
+% 
+% We start the hook |begindocument/before| and check if
+% author did not provide any of the \emph{strict} fields
+% and if they have done so, we generate errors.
+% 
+%    \begin{macrocode}
+\AddToHook{begindocument/before}{%
+  \ifdefined\udiss at title
+  \else
+    \def\udiss at title{\textbf{-NoValidTitle-}}%
+    \ClassError{udiss}{%
+      Title not given%
+    }{%
+      `title' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\title{title-of-the-dissertation}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at author
+  \else
+    \def\udiss at author{\textbf{-NoValidAuthor-}}%
+    \ClassError{udiss}{%
+      No author given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `author' is a compulsory field. Provide it
+      in the preamble like in\MessageBreak the following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\author{author-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at stream
+  \else
+    \def\udiss at stream{\textbf{-NoValidStream-}}%
+    \ClassError{udiss}{%
+      Stream not given%
+    }{%
+      `stream' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\stream{stream-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at discipline
+  \else
+    \def\udiss at discipline{\textbf{-NoValidDiscipline-}}%
+    \ClassError{udiss}{%
+      Discipline not given%
+    }{%
+      `discipline' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\discipline%
+      {discipline-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at degree
+  \else
+    \def\udiss at degree{\textbf{-NoValidDegree-}}%
+    \ClassError{udiss}{%
+      Degree not given%
+    }{%
+      `degree' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\degree{degree-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at supervisor
+  \else
+    \def\udiss at title{\textbf{-NoValidTitle-}}%
+    \ClassError{udiss}{%
+      No supervisor given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `supervisor' is a compulsory field. Provide
+      it in the preamble like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\supervisor{supervisor's-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at university
+  \else
+    \def\udiss at university{\textbf{-NoValidUniversity-}}%
+    \ClassError{udiss}{%
+      No university given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `university' is a compulsory field. Provide
+      it in the preamble like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\university{university-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at department
+  \else
+    \def\udiss at department{\textbf{-NoValidDepartment-}}%
+    \ClassError{udiss}{%
+      No department given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `department'\space is a compulsory field.
+      Provide it in the preamble like in\MessageBreak the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\department{department-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+%    \end{macrocode}
+% 
+% For printing, \pkg{hyperref} and \pkg{hyperxmp} are
+% irrelevant, so we load them only when the documents are
+% digital.
+% 
+%    \begin{macrocode}
+  \ifudiss at print
+  \else
+    \RequirePackage{hyperref}%
+    \RequirePackage{hyperxmp}%
+%    \end{macrocode}
+% 
+% We set the metadata here using |\hypersetup| command.
+% 
+%    \begin{macrocode}
+    \hypersetup{%
+      unicode,%
+      colorlinks,%
+      pdftitle           = {\udiss at title}%
+    }%
+    \ifudiss at subtitle
+      \hypersetup{%
+        pdfsubject         = {\udiss at subtitle}%
+      }%
+    \fi
+%    \end{macrocode}
+% 
+% We don't set author's name if the user has used the
+% |blind| option as it defeats the whole purpose. If it is
+% not used, we set the copyright information and the
+% license-url. All-rights-reserved doesn't have a specific
+% license-url, so it is used only if the user uses a free
+% culture license.
+% 
+%    \begin{macrocode}
+    \ifudiss at blind
+    \else
+      \hypersetup{%
+        pdfauthor          = {\udiss at author},%
+        pdfcopyright       = {%
+          \udiss at title\textLF
+          \udiss at local@copyright\
+          ©
+          \udiss at copyrightable@years\
+          \udiss at author\textLF
+          \udiss at license@notice
+        },%
+      }%
+      \ifudiss at free@culture
+        \hypersetup{%
+          pdflicenseurl      = {%
+            \udiss at free@license at url
+          }%
+        }%
+      \fi
+    \fi
+%    \end{macrocode}
+% 
+% If the color option is not disabled, we load the color
+% variables with |\hypersetup|.
+% 
+%    \begin{macrocode}
+    \ifudiss at colors
+      \hypersetup{%
+        linkcolor        = {\udiss at int@link at color},%
+        urlcolor         = {\udiss at int@url at color},%
+        citecolor        = {\udiss at int@cite at color}%
+      }%
+%    \end{macrocode}
+% 
+% Otherwise, we use the |hidelinks| option of \pkg{hyperref}
+% which creates links, but without colors.
+% 
+%    \begin{macrocode}
+    \else
+      \hypersetup{%
+        hidelinks%
+      }%
+    \fi
+  \fi
+}
+%    \end{macrocode}
+% 
+% Now, after setting everything, we typeset the front matter
+% including title-page, table of contents, optionally list
+% of figures/tables and declaration with the following code.
+% 
+%    \begin{macrocode}
+\AddToHook{begindocument/end}{%
+  \begingroup
+  \thispagestyle{titlingpage}%
+  \ifudiss at ftitle
+    \setlength{\fboxsep}{25pt}%
+    \noindent\fbox{%
+      \begin{minipage}%
+        [c][\dimexpr\textheight-2\fboxsep-2\fboxrule]%
+        [c]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}%
+  \fi
+        \hspace{0pt}%
+        \vspace{3em}%
+        \begin{center}
+          \begingroup
+          \udiss at title@shape
+          \ifx\udiss at title@font\empty
+          \else
+            \fontspec[\udiss at title@fontfeats]%
+                     {\udiss at title@font}%
+          \fi
+          \udiss at title@size
+          \color{\udiss at title@color}%
+          \udiss at title
+          \endgroup
+          
+          \medskip
+          
+          \ifudiss at subtitle
+            \begingroup
+            \udiss at subtitle@shape
+            \ifx\udiss at subtitle@font\empty
+            \else
+              \fontspec[\udiss at subtitle@fontfeats]%
+                       {\udiss at subtitle@font}%
+            \fi
+            \udiss at subtitle@size
+            \color{\udiss at subtitle@color}%
+            \udiss at subtitle
+            \endgroup
+          \fi
+          
+          \vfill
+          
+          \ifudiss at blind
+          \else
+            \begingroup
+            \udiss at author@shape
+            \ifx\udiss at author@font\empty
+            \else
+              \fontspec[\udiss at author@fontfeats]%
+                       {\udiss at author@font}%
+            \fi
+            \udiss at author@size
+            \color{\udiss at author@color}%
+            \udiss at author
+            \ifudiss at pronouns
+              \begingroup
+              \space
+              \addfontfeature{Scale={0.6}}%
+              \udiss at pronouns
+              \endgroup
+            \fi
+            \endgroup
+          
+          \vspace{2em}%
+          \fi
+          
+          \begingroup
+          \udiss at fulfilment@shape
+          \ifx\udiss at fulfilment@font\empty
+          \else
+            \fontspec[\udiss at fulfilment@fontfeats]%
+                     {\udiss at fulfilment@font}%
+          \fi
+          \udiss at fulfilment@size
+          \color{\udiss at fulfilment@color}%
+          \udiss at fulfilment
+          \endgroup
+          
+          \vfill
+          
+          \begingroup
+          \udiss at uni@shape
+          \ifx\udiss at uni@font\empty
+          \else
+            \fontspec[\udiss at university@fontfeats]%
+                     {\udiss at uni@font}%
+          \fi
+          \udiss at uni@size
+          \color{\udiss at uni@color}%
+          \udiss at university
+          \endgroup
+          
+          \vspace{0.5em}%
+          
+          \begingroup
+          \udiss at dept@shape
+          \ifx\udiss at dept@font\empty
+          \else
+            \fontspec[\udiss at dept@fontfeats]%
+                     {\udiss at dept@font}%
+          \fi
+          \udiss at dept@size
+          \color{\udiss at dept@color}%
+          \udiss at department
+          \endgroup
+            
+          \ifudiss at logo
+            \bigskip
+            \ifudiss at texlogo
+              \udiss at texlogo
+            \fi
+            \includegraphics[%
+              width        = {%
+                \udiss at logo@width\linewidth
+              },%
+              height       = {%
+                \udiss at logo@hght\textheight
+              }%
+            ]{%
+              \udiss at logo
+            }%
+          \fi
+        \end{center}
+  \ifudiss at ftitle
+      \end{minipage}%
+    }%
+  \fi
+  
+  \newpage
+  
+  \ifudiss at blind
+  \else
+    \ifudiss at free@culture
+      \thispagestyle{titlingpage}%
+      \vspace*{\stretch{1}}
+      \begin{quote}
+        \setlength{\parindent}{0pt}%
+        \begingroup
+        \begin{minipage}{\linewidth}
+          \bfseries
+          \udiss at title
+          
+          \udiss at local@copyright\
+          ©
+          \udiss at copyrightable@years\
+          \udiss at author
+          
+          \medskip
+          \noindent\hrule \linewidth 0.4pt\relax
+        \end{minipage}
+        \endgroup
+        
+        \ifudiss at gfdl
+          Permission is granted to copy, distribute and/or
+          modify this document under the terms of the GNU
+          Free Documentation License, Version 1.3 or any
+          later version published by the Free Software
+          Foundation; with no Invariant Sections, no
+          Front-Cover Texts, and no Back-Cover Texts. A copy
+          of the license is included in the section entitled
+          \enquote{GNU Free Documentation License}.%
+        \fi
+        \ifudiss at ccbysa
+          \begin{minipage}{\linewidth}
+            \doclicenseThis
+          \end{minipage}
+        \fi
+        \vspace{\stretch{3}}
+      \end{quote}
+      \newpage
+    \fi
+  \fi
+
+  \tableofcontents*
+  
+  \newpage
+  
+  \ifudiss at blind
+  \else
+    \ifudiss at declaration
+      \thispagestyle{empty}%
+      \begin{center}%
+        {%
+          \LARGE\bfseries
+          \udiss at decllocal
+        }%
+      \end{center}%
+      
+      \udiss at declaration
+    \fi
+  \fi
+
+  \newpage
+
+  \ifudiss at lot
+    \listoftables
+  \fi
+
+  \newpage
+
+  \ifudiss at lof
+    \listoffigures
+  \fi
+  \endgroup
+}%
+%    \end{macrocode}
+% 
+% The following code adds the GFDL v1.3+ notice at the end
+% of the document if that option was used.
+% 
+%    \begin{macrocode}
+\ifudiss at blind
+\else
+  \ifudiss at gfdl
+    \AddToHook{enddocument}{%
+      \newpage
+      \begingroup
+      \pagestyle{plain}%
+      \addcontentsline{toc}%
+                      {chapter}%
+                      {GNU Free Documentation License}%
+      \input{gfdl-tex-1p3}%
+      \clearpage
+      \endgroup
+    }%
+  \fi
+\fi
+%</class>
+%    \end{macrocode}
+% 
+% Our class ended here. Now we start creating the
+% language-support files. The first is the Malayalam
+% language. We use fonts provided at:
+% \url{https://ctan.org/pkg/rit-fonts}. Notice that this is
+% done conditionally. If the language is loaded as the main
+% language, the fonts are set as the default fonts using
+% class options, else |malayalam| is passed as the optional
+% argument to |\babelfont|.
+% 
+%    \begin{macrocode}
+%<*babel-ml>
+\IfLanguageName{malayalam}{%
+  \ekvset{udiss}{%
+    rmfont               = {RIT-Rachana-Regular.ttf},%
+    rmitfont             = {RIT-Rachana-Italic.ttf},%
+    rmbffont             = {RIT-Rachana-Bold.ttf},%
+    rmbfitfont           = {RIT-Rachana-BoldItalic.ttf},%
+    rmfeatures           = {%
+      Script               = {Malayalam}%
+    },%
+    sffont               = {RIT-MeeraNew.ttf},%
+    sfitfont             = {RIT-MeeraNew.ttf},%
+    sfbffont             = {RIT-tnjoy-bold.ttf},%
+    sfbfitfont           = {RIT-tnjoy-bold.ttf},%
+    sffeatures           = {%
+      Script               = {Malayalam}%
+    },%
+    ttfont               = {RIT-MeeraNew.ttf},%
+    ttitfont             = {RIT-MeeraNew.ttf},%
+    ttbffont             = {RIT-tnjoy-bold.ttf},%
+    ttbfitfont           = {RIT-tnjoy-bold.ttf},%
+    sffeatures           = {%
+      Script               = {Malayalam}%
+    }%
+  }%
+}{%
+  \babelfont[malayalam]{rm}[%
+    IgnoreFontspecFile,%
+    Script               = {Malayalam},%
+    ItalicFont           = {RIT-Rachana-Italic.ttf},%
+    BoldFont             = {RIT-Rachana-Bold.ttf},%
+    BoldItalicFont       = {RIT-Rachana-BoldItalic.ttf},%
+    \ifLuaTeX
+      Renderer             = {HarfBuzz}%
+    \fi
+  ]{RIT-Rachana-Regular.ttf}
+  \babelfont[malayalam]{sf}[%
+    IgnoreFontspecFile,%
+    Script                 = {Malayalam},%
+    ItalicFont             = {RIT-tnjoy-regular.ttf},%
+    BoldFont               = {RIT-tnjoy-bold.ttf},%
+    BoldItalicFont         = {RIT-tnjoy-bold.ttf},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{RIT-tnjoy-regular.ttf}
+  \babelfont[malayalam]{tt}[%
+    IgnoreFontspecFile,%
+    Script               = {Malayalam},%
+    ItalicFont           = {RIT-tnjoy-regular.ttf},%
+    BoldFont             = {RIT-tnjoy-bold.ttf},%
+    BoldItalicFont       = {RIT-tnjoy-bold.ttf},%
+    \ifLuaTeX
+      Renderer             = {HarfBuzz}%
+    \fi
+  ]{RIT-tnjoy-regular.ttf}%
+}
+%</babel-ml>
+%    \end{macrocode}
+% 
+% Marathi requires local numerals and local counters. We
+% provide that here and set Mukta as the default font
+% provided in: \url{https://ctan.org/pkg/EkType-Tanka}.
+% 
+%    \begin{macrocode}
+%<*babel-mr>
+\babelprovide[%
+  mapdigits,%
+  counters/स्वर = अ आ इ ई उ ऊ ए ऐ ओ औ अं अः ॲ ऋ ऌ ऑ,%
+  counters/अंक = एक दोन तीन चार पाच सहा सात आठ नऊ दहा अकरा
+  बारा तेरा चौदा पंधरा सोळा सतरा अठरा एकोणीस वीस एकवीस बावीस
+  तेवीस चोवीस पंचवीस सव्वीस सत्तावीस अठ्ठावीस एकोणतीस तीस एकतीस
+  बत्तीस तेहतीस चौतीस पस्तीस छत्तीस सदतीस अडतीस एकोणचाळीस चाळीस
+  एकेचाळीस बेचाळीस त्रेचाळीस चव्वेचाळीस पंचेचाळीस शेहेचाळीस सत्तेचाळीस
+  अठ्ठेचाळीस एकोणपन्नास पन्नास एकावन्न बावन्न त्रेपन्न चौपन्न पंचावन्न
+  छप्पन्न सत्तावन्न अठ्ठावन्न एकोणसाठ साठ एकसष्ट बासष्ट त्रेसष्ट चौसष्ट
+  पासष्ट सहासष्ट सदुष्ट अडुसष्ट एकोणसत्तर सत्तर एकाहत्तर बाहत्तर
+  त्र्याहत्तर चौऱ्याहत्तर पंचाहत्तर शाहत्तर सत्त्याहत्तर अठ्ठ्याहत्तर
+  एकोणऐंशी ऐंशी एक्याऐंशी ब्याऐंशी त्र्याऐंशी चौऱ्याऐंशी पंच्याऐंशी श्याऐंशी
+  सत्त्याऐंशी अठ्ठ्याऐंशी एकोणनव्वद नव्वद एक्याण्णव ब्याण्णव त्र्याण्णव
+  चौऱ्याण्णव पंचाण्णव शहाण्णव सत्त्याण्णव अठ्याण्णव नव्याण्णव शंभर,%
+  counters/व्यंजन = क ख ग घ ङ%
+  च छ ज झ ञ%
+  ट ठ ड ढ ण%
+  त थ द ध न%
+  प फ ब भ म%
+  य र ल व श ष स ह ळ,%
+  Alph = अंक,%
+  alph = स्वर%
+]{marathi}
+\def\theenumiii{\localecounter{व्यंजन}{enumiii}}
+\def\theenumiv{\localecounter{अंक}{enumiii}}
+\IfLanguageName{marathi}{%
+  \ekvset{udiss}{%
+    rmfont               = {Mukta-Regular.ttf},%
+    rmitfont             = {Mukta-Regular.ttf},%
+    rmbffont             = {Mukta-Bold.ttf},%
+    rmbfitfont           = {Mukta-Bold.ttf},%
+    rmfeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    sffont               = {Mukta-Regular.ttf},%
+    sfitfont             = {Mukta-Regular.ttf},%
+    sfbffont             = {Mukta-Bold.ttf},%
+    sfbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    ttfont               = {Mukta-Regular.ttf},%
+    ttitfont             = {Mukta-Regular.ttf},%
+    ttbffont             = {Mukta-Bold.ttf},%
+    ttbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    }%
+  }%
+}{%
+  \babelfont[marathi]{rm}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[marathi]{sf}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[marathi]{tt}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Marathi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}%
+}
+%</babel-mr>
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
+%<*babel-en>
+\babelfont[english]{rm}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCM10-BookItalic},%
+  BoldFont               = {NewCM10-Bold},%
+  BoldItalicFont         = {NewCM10-BoldItalic},%
+  SlantedFont            = {NewCM10-Book},%
+  BoldSlantedFont        = {NewCM10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCM10-Book}
+\babelfont[english]{sf}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  ItalicFont             = {NewCMSans10-BookOblique},%
+  BoldFont               = {NewCMSans10-Bold},%
+  BoldItalicFont         = {NewCMSans10-BoldOblique},%
+  SlantedFont            = {NewCMSans10-Book},%
+  BoldSlantedFont        = {NewCMSans10-Bold},%
+  Numbers                = {OldStyle},%
+  CharacterVariant       = {6},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCMSans10-Book}
+\babelfont[english]{tt}[%
+  IgnoreFontspecFile,%
+  Extension              = {.otf},%
+  BoldFont               = {NewCMMono10-Bold},%
+  ItalicFont             = {NewCMMono10-Italic},%
+  \ifLuaTeX
+    Renderer               = {HarfBuzz}%
+  \fi
+]{NewCMMono10-Book}
+%</babel-en>
+%    \end{macrocode}
+% 
+% Hindi and Marathi share the script, but the language
+% variants Marathi needs are not required by Hindi. So we
+% use the same font, but with a little different settings
+% for Hindi.
+% 
+%    \begin{macrocode}
+%<*babel-hi>
+\IfLanguageName{hindi}{%
+  \ekvset{udiss}{%
+    rmfont               = {Mukta-Regular.ttf},%
+    rmitfont             = {Mukta-Regular.ttf},%
+    rmbffont             = {Mukta-Bold.ttf},%
+    rmbfitfont           = {Mukta-Bold.ttf},%
+    rmfeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    sffont               = {Mukta-Regular.ttf},%
+    sfitfont             = {Mukta-Regular.ttf},%
+    sfbffont             = {Mukta-Bold.ttf},%
+    sfbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    },%
+    ttfont               = {Mukta-Regular.ttf},%
+    ttitfont             = {Mukta-Regular.ttf},%
+    ttbffont             = {Mukta-Bold.ttf},%
+    ttbfitfont           = {Mukta-Bold.ttf},%
+    sffeatures           = {%
+      Script               = {Devanagari}%
+    }%
+  }%
+}{%
+  \babelfont[hindi]{rm}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[hindi]{sf}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+  \babelfont[hindi]{tt}[%
+    IgnoreFontspecFile,%
+    ItalicFont             = {Mukta-Regular.ttf},%
+    BoldFont               = {Mukta-Bold.ttf},%
+    BoldItalicFont         = {Mukta-Bold.ttf},%
+    Language               = {Hindi},%
+    Script                 = {Devanagari},%
+    Numbers                = {OldStyle},%
+    \ifLuaTeX
+      Renderer               = {HarfBuzz}%
+    \fi
+  ]{Mukta-Regular.ttf}
+}
+%</babel-hi>
+%    \end{macrocode}
+% 
+% In this tag, we set three main variables for the |ukerala|
+% dissertation-style. This is just a sample. These style
+% files can contain much more than this. In the experimental
+% release, we start with a small sample. We will be
+% expanding this more.
+% 
+%    \begin{macrocode}
+%<*ukerala>
+\ekvset{udiss}{%
+  university               = {University of Kerala},%
+  logo                     = {udiss-logo-ukerala.png},%
+  logoheight               = {0.11}%
+}
+%</ukerala>
+%    \end{macrocode}
+% \end{implementation}
+% \PrintIndex
+% \Finale


Property changes on: trunk/Master/texmf-dist/source/latex/udiss/udiss.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/udiss/udiss.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/udiss/udiss.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/udiss/udiss.ins	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,75 @@
+% File: udiss.ins
+\input l3docstrip.tex
+
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+---------------------------------------------------------
+Bundle:      udiss
+Version:     v0.1 (October 1, 2024)
+Author:      Indian TeX Users Group
+Description: A LaTeX bundle for typesetting dissertations
+Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+Licenses:    GPLv3+, GFDLv1.3+
+---------------------------------------------------------
+
+The LaTeX bundle udiss v0.1
+Copyright © 2024 Indian TeX Users Group
+
+This program is free software: you can redistribute it
+and/or modify it under the terms of the GNU General
+Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be
+useful, but WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program. If not, see
+<https://www.gnu.org/licenses/>.
+---------------------------------------------------------
+\endpreamble
+\usedir{tex/latex/\jobname}
+\generate{%
+  \file{\jobname.cls}{\from{\jobname.dtx}{class}}%
+}
+% ----------------------------------------------------------
+% BEGIN GENERATING UDISS BABEL FILES
+\generate{%
+  \file{\jobname-fonts-malayalam.tex}{%
+    \from{\jobname.dtx}{babel-ml}%
+  }%
+}
+\generate{%
+  \file{\jobname-fonts-marathi.tex}{%
+    \from{\jobname.dtx}{babel-mr}%
+  }%
+}
+\generate{%
+  \file{\jobname-fonts-english.tex}{%
+    \from{\jobname.dtx}{babel-en}%
+  }%
+}
+\generate{%
+  \file{\jobname-fonts-hindi.tex}{%
+    \from{\jobname.dtx}{babel-hi}%
+  }%
+}
+\generate{%
+  \file{\jobname-style-ukerala.tex}{%
+    \from{\jobname.dtx}{ukerala}%
+  }%
+}
+% END GENERATING UDISS BABEL FILES
+% ----------------------------------------------------------
+\nopreamble\nopostamble
+\usedir{doc/latex/\jobname}
+\generate{%
+  \file{README.txt}{\from{\jobname.dtx}{readme}}%
+}
+\endbatchfile

Added: trunk/Master/texmf-dist/tex/latex/udiss/udiss.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/udiss/udiss.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/udiss/udiss.cls	2024-10-01 20:00:43 UTC (rev 72445)
@@ -0,0 +1,1868 @@
+%%
+%% This is file `udiss.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% udiss.dtx  (with options: `class')
+%% ---------------------------------------------------------
+%% Bundle:      udiss
+%% Version:     v0.1 (October 1, 2024)
+%% Author:      Indian TeX Users Group
+%% Description: A LaTeX bundle for typesetting dissertations
+%% Bugs:        puszcza.gnu.org.ua/bugs/?group=udiss
+%% Licenses:    GPLv3+, GFDLv1.3+
+%% ---------------------------------------------------------
+%% 
+%% The LaTeX bundle udiss v0.1
+%% Copyright © 2024 Indian TeX Users Group
+%% 
+%% This program is free software: you can redistribute it
+%% and/or modify it under the terms of the GNU General
+%% Public License as published by the Free Software
+%% Foundation, either version 3 of the License, or (at your
+%% option) any later version.
+%% 
+%% This program is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the
+%% implied warranty of MERCHANTABILITY or FITNESS FOR A
+%% PARTICULAR PURPOSE. See the GNU General Public License
+%% for more details.
+%% 
+%% You should have received a copy of the GNU General Public
+%% License along with this program. If not, see
+%% <https://www.gnu.org/licenses/>.
+%% ---------------------------------------------------------
+\ProvidesClass{udiss}[2024/10/01 v0.1
+  A LaTeX bundle for typesetting dissertations (TUGIndia)]
+\RequirePackage{expkv-def,expkv-opt}
+\newif\ifudiss at pronouns
+\newif\ifudiss at blind
+\NewDocumentCommand{ \pronouns }{ m }{%
+  \ifudiss at blind
+  \else
+    \def\udiss at pronouns{#1}%
+  \fi
+}
+\ekvdefinekeys{udiss}{%
+  code    pronouns       = {%
+    \ifudiss at blind
+    \else
+      \def\udiss at pronouns{(#1)}%
+    \fi
+    \udiss at pronounstrue
+  }%
+}
+\newif\ifudiss at title
+\def\udiss at blank@title at err{%
+  \ClassError{udiss}{%
+    The `title' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `title'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\def\udiss at blank@author at err{%
+  \ClassError{udiss}{%
+    The `author' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `author'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  code    title          = {%
+    \def\udiss at tmp@title{#1}%
+    \ifx\udiss at tmp@title\empty
+      \def\udiss at title{-NoValidTitle-}%
+      \udiss at blank@title at err
+    \else
+      \def\udiss at title{#1}%
+    \fi
+  },%
+  code    author         = {%
+    \def\udiss at tmp@author{#1}%
+    \ifx\udiss at tmp@author\empty
+      \def\udiss at author{-NoValidAuthor-}%
+      \udiss at blank@author at err
+    \else
+      \def\udiss at author{#1}%
+    \fi
+  }%
+}
+\newif\ifudiss at subtitle
+\newif\ifudiss at shorttitle
+\ekvdefinekeys{udiss}{%
+  code    subtitle       = {%
+    \IfBlankTF{#1}{%
+      \def\udiss at subtitle{-NoValidSubtitle-}%
+      \udiss at subtitletrue
+    }{%
+      \def\udiss at subtitle{#1}%
+      \udiss at subtitletrue
+    }%
+  },%
+  code    shorttitle     = {%
+    \IfBlankTF{#1}{%
+      \def\udiss at shorttitle{-NoValidSubtitle-}%
+      \udiss at shorttitletrue
+    }{%
+      \def\udiss at shorttitle{#1}%
+      \udiss at shorttitletrue
+    }%
+  }%
+}
+\NewDocumentCommand{ \subtitle }{ m }{%
+  \def\udiss at subtitle{#1}%
+  \udiss at subtitletrue
+}
+\NewDocumentCommand{ \shorttitle }{ m }{%
+  \def\udiss at shorttitle{#1}%
+  \udiss at shorttitletrue
+}
+\newif\ifudiss at stream
+\def\udiss at blank@stream at err{%
+  \ClassError{udiss}{%
+    The `stream' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `stream'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\newif\ifudiss at discipline
+\def\udiss at blank@discipline at err{%
+  \ClassError{udiss}{%
+    The `discipline' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `discipline'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\newif\ifudiss at degree
+\def\udiss at blank@degree at err{%
+  \ClassError{udiss}{%
+    The `degree' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `degree'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  code    stream         = {%
+    \def\udiss at tmp@stream{#1}%
+    \ifx\udiss at tmp@stream\empty
+      \def\udiss at stream{-NoValidStream-}%
+      \udiss at blank@stream at err
+    \else
+      \def\udiss at stream{#1}%
+    \fi
+  },%
+  code    discipline     = {%
+    \def\udiss at tmp@discipline{#1}%
+    \ifx\udiss at tmp@discipline\empty
+      \def\udiss at discipline{-NoValidDiscipline-}%
+      \udiss at blank@discipline at err
+    \else
+      \def\udiss at discipline{#1}%
+    \fi
+  },%
+  code    degree         = {%
+    \def\udiss at tmp@degree{#1}%
+    \ifx\udiss at tmp@degree\empty
+      \def\udiss at degree{-NoValidDegree-}%
+      \udiss at blank@degree at err
+    \else
+      \def\udiss at degree{#1}%
+    \fi
+  }%
+}
+\NewDocumentCommand{ \stream }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@stream at err
+    \def\udiss at stream{-NoValidStream-}%
+  }{%
+    \def\udiss at stream{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at streamtrue
+  }{%
+    \def\udiss at stream{#1}%
+    \udiss at streamtrue
+  }%
+}
+\NewDocumentCommand{ \discipline }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@discipline at err
+    \def\udiss at discipline{-NoValidDiscipline-}%
+  }{%
+    \def\udiss at discipline{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at disciplinetrue
+  }{%
+    \def\udiss at discipline{#1}%
+    \udiss at disciplinetrue
+  }%
+}
+\NewDocumentCommand{ \degree }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@degree at err
+    \def\udiss at degree{-NoValidDegree-}%
+  }{%
+    \def\udiss at degree{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at degreetrue
+  }{%
+    \def\udiss at degree{#1}%
+    \udiss at degreetrue
+  }%
+}
+\newif\ifudiss at supervisor
+\newif\ifudiss at university
+\newif\ifudiss at department
+\def\udiss at blank@supervisor at err{%
+  \ClassError{udiss}{%
+    The `supervisor' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `supervisor'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\def\udiss at blank@university at err{%
+  \ClassError{udiss}{%
+    The `university' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `university'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\def\udiss at blank@department at err{%
+  \ClassError{udiss}{%
+    The `department' field cannot be blank%
+  }{%
+    You have provided an empty argument to the `department'
+    field. This is not\MessageBreak permitted by the class.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  code    supervisor         = {%
+    \def\udiss at tmp@supervisor{#1}%
+    \ifx\udiss at tmp@supervisor\empty
+      \def\udiss at supervisor{-NoValidSupervisor-}%
+      \udiss at blank@supervisor at err
+    \else
+      \def\udiss at supervisor{#1}%
+    \fi
+  },%
+  code    university         = {%
+    \def\udiss at tmp@university{#1}%
+    \ifx\udiss at tmp@university\empty
+      \def\udiss at university{-NoValidUniversity-}%
+      \udiss at blank@university at err
+    \else
+      \def\udiss at university{#1}%
+    \fi
+  },%
+  code    department         = {%
+    \def\udiss at tmp@department{#1}%
+    \ifx\udiss at tmp@department\empty
+      \def\udiss at department{-NoValidDepartment-}%
+      \udiss at blank@department at err
+    \else
+      \def\udiss at department{#1}%
+    \fi
+  }%
+}
+\NewDocumentCommand{ \supervisor }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@supervisor at err
+    \def\udiss at supervisor{-NoValidSupervisor-}%
+  }{%
+    \def\udiss at supervisor{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at supervisortrue
+  }{%
+    \def\udiss at supervisor{#1}%
+    \udiss at supervisortrue
+  }%
+}
+\NewDocumentCommand{ \university }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@university at err
+    \def\udiss at author{-NoValidUniversity-}%
+  }{%
+    \def\udiss at university{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at universitytrue
+  }{%
+    \def\udiss at university{#1}%
+    \udiss at universitytrue
+  }%
+}
+\NewDocumentCommand{ \department }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@department at err
+    \def\udiss at author{-NoValidDepartment-}%
+  }{%
+    \def\udiss at department{#1}%
+  }%
+  \IfBlankTF{#1}{%
+    \udiss at departmenttrue
+  }{%
+    \def\udiss at department{#1}%
+    \udiss at departmenttrue
+  }%
+}
+\newif\ifudiss at logo
+\newif\ifudiss at texlogo
+\NewDocumentCommand{ \logo }{ s +m }{%
+  \IfBooleanTF{#1}{%
+    \def\udiss at texlogo{#2}%
+    \udiss at texlogotrue
+  }{%
+    \def\udiss at logo{#2}%
+  }%
+  \udiss at logotrue
+}
+\ekvdefinekeys{udiss}{%
+  code    logo           = {%
+    \def\udiss at logo{#1}%
+    \udiss at logotrue
+  },%
+  code    logo*          = {%
+    \def\udiss at texlogo{#1}%
+    \udiss at logotrue
+    \udiss at texlogotrue
+  }%
+}
+\newcounter{udiss at langbabel}
+\stepcounter{udiss at langbabel}
+\def\udiss at int@langbabel#1{%
+  \expandafter\edef
+    \csname
+      udiss at langbabel@\alph{udiss at langbabel}%
+    \endcsname{#1}%
+  \stepcounter{udiss at langbabel}%
+}
+\NewDocumentCommand\udiss at lgbbl{ >{ \SplitList{,} } m }{%
+  \ProcessList{#1}{\udiss at int@langbabel}%
+}
+\newif\ifudiss at lg@used
+\newif\ifudiss at ldfbabel
+\ekvdefinekeys{udiss}{%
+  code    language       = {%
+    \udiss at lgbbl{#1}%
+    \udiss at lg@usedtrue
+  },%
+  code    ldfbabel       = {%
+    \def\udiss at ldfbabel@list{#1}%
+    \udiss at lg@usedtrue
+    \udiss at ldfbabeltrue
+  },%
+  invbool nofontwarning  = {\ifudiss at font@warning}%
+}
+\newif\ifudiss at free@culture
+\newif\ifudiss at ccbysa
+\newif\ifudiss at gfdl
+\ekvdefinekeys{udiss}{%
+  choice  license        = {%
+    all-rights-reserved    = {%
+      \def\udiss at license@notice{%
+        All rights reserved.\textLF
+      }%
+    },%
+    CC-BY-SA               = {%
+      \def\udiss at license@notice{%
+        This work is available under the "Creative Commons
+        Attribution ShareAlike 4.0 International" license.%
+      }%
+      \def\udiss at free@license at url{%
+        https://creativecommons.org/licenses/%
+        by-sa/4.0/legalcode.txt%
+      }%
+      \udiss at free@culturetrue
+      \udiss at ccbysatrue
+    },%
+    GFDL                   = {%
+      \def\udiss at license@notice{%
+        Permission is granted to copy, distribute and/or
+        modify this document under the terms of the GNU Free
+        Documentation License, Version 1.3 or any later
+        version published by the Free Software Foundation;
+        with no Invariant Sections, no Front-Cover Texts,
+        and no Back-Cover Texts. A copy of the license is
+        included in the section entitled “GNU Free
+        Documentation License”.%
+      }%
+      \def\udiss at free@license at url{%
+        https://www.gnu.org/licenses/fdl-1.3.txt%
+      }%
+      \udiss at free@culturetrue
+      \udiss at gfdltrue
+    },%
+  },%
+  initial license        = {all-rights-reserved},%
+  store   copyright-yrs  = {\udiss at copyrightable@years},%
+  initial copyright-yrs  = {\the\year},%
+  store   localcopyright = {\udiss at local@copyright},%
+  initial localcopyright = {Copyright},%
+  nmeta   placeholders   = {%
+            title          = {%
+              A groundbreaking dissertation%
+            },%
+            author         = {%
+              Jane Doe%
+            },%
+            pronouns       = {She/her},%
+            subtitle       = {%
+              A milestone study on a longstanding question
+              in a discipline%
+            },%
+            shorttitle     = {A Milestone study},%
+            stream         = {intriguing stream},%
+            discipline     = {rigorous discipline},
+            degree         = {enriching degree},%
+            supervisor     = {A kind supervisor},%
+            university     = {An ideal university},%
+            department     = {A homely department},%
+            license        = {CC-BY-SA},%
+            copyright-yrs  = {2022, 2023, 2024}%
+          }%
+}
+\ekvdefinekeys{udiss}{%
+  bool    lot            = {\ifudiss at lot},%
+  bool    lof            = {\ifudiss at lof},%
+  bool    declaration    = {\ifudiss at declaration},%
+  long
+  store   declarationtxt = {\udiss at declaration},%
+  initial declarationtxt = {%
+    \noindent As required by the university regulations, I
+    wish to state that the work embodied in this thesis
+    titled \enquote{\udiss at title: \udiss at subtitle} forms
+    my own contribution to the research work carried out
+    under the guidance of \udiss at supervisor\ at the
+    \udiss at university, \udiss at department.
+
+    This work has not been submitted for any other degree
+    of this or any other university. Whenever references
+    have been made to previous works of others, it has
+    been clearly indicated as such and included in the
+    bibliography.
+
+    \bigskip
+    \flushright{%
+      Date: \today
+
+      \vspace{4em}%
+
+      Name: \udiss at author
+    }%
+
+    \bigskip\bigskip
+    \flushleft{%
+      Certified by:%
+
+      \vspace{4em}%
+
+      \udiss at supervisor
+    }%
+  },%
+  store   decllocal      = {\udiss at decllocal},%
+  initial decllocal      = {Declaration}%
+}
+\ekvdefinekeys{udiss}{%
+  bool    print          = {\ifudiss at print},%
+  invbool norefcolors    = {\ifudiss at colors},%
+  store   udisslinkclr   = {\udiss at int@link at color},%
+  initial udisslinkclr   = {udisslink},%
+  store   udissurlclr    = {\udiss at int@url at color},%
+  initial udissurlclr    = {udissurl},%
+  store   udissciteclr   = {\udiss at int@cite at color},%
+  initial udissciteclr   = {udisscite}%
+}
+\ekvdefinekeys{udiss}{%
+  bool    blind          = {\ifudiss at blind}%
+}
+\ekvdefinekeys{udiss}{%
+  bool    framed-title   = {\ifudiss at ftitle}%
+}
+\ekvdefinekeys{udiss}{%
+  invbool oldstylenumoff = {\ifudiss at oldstylenum},%
+  bool    oldone         = {\ifudiss at oldone}%
+}
+\ekvdefinekeys{udiss}{%
+  bool    explicitext    = {\ifudiss at explicitext},%
+  invbool ignorefsoff    = {\ifudiss at ignorefontspec}%
+}
+\ekvdefinekeys{udiss}{%
+  store   fulfilment     = {\udiss at fulfilment},%
+  initial fulfilment     = {%
+    A dissertation submitted in the partial fulfilment of
+    the requirements for the \udiss at degree\ program in
+    \udiss at discipline.%
+  }%
+}
+\ekvdefinekeys{udiss}{%
+  store   rmfont         = {\udiss at rmfont},%
+  initial rmfont         = {NewCM10-Book.otf},%
+  store   rmbffont       = {\udiss at rmbffont},%
+  initial rmbffont       = {NewCM10-Bold.otf},%
+  store   rmitfont       = {\udiss at rmitfont},%
+  initial rmitfont       = {NewCM10-BookItalic.otf},%
+  store   rmbfitfont     = {\udiss at rmbfitfont},%
+  initial rmbfitfont     = {NewCM10-BoldItalic.otf},%
+  store   rmslfont       = {\udiss at rmslfont},%
+  initial rmslfont       = {NewCM10-Book.otf},%
+  store   rmbfslfont     = {\udiss at rmbfslfont},%
+  initial rmbfslfont     = {NewCM10-Bold.otf},%
+  store   sffont         = {\udiss at sffont},%
+  initial sffont         = {NewCMSans10-Book.otf},%
+  store   sfbffont       = {\udiss at sfbffont},%
+  initial sfbffont       = {NewCMSans10-Bold.otf},%
+  store   sfitfont       = {\udiss at sfitfont},
+  initial sfitfont       = {NewCMSans10-BookOblique.otf},%
+  store   sfbfitfont     = {\udiss at sfbfitfont},%
+  initial sfbfitfont     = {NewCMSans10-BoldOblique.otf},%
+  store   sfslfont       = {\udiss at sfslfont},%
+  initial sfslfont       = {NewCMSans10-BookOblique.otf},%
+  store   sfbfslfont     = {\udiss at sfbfslfont},%
+  initial sfbfslfont     = {NewCMSans10-BoldOblique.otf},%
+  store   ttfont         = {\udiss at ttfont},%
+  initial ttfont         = {NewCMMono10-Book.otf},%
+  store   ttbffont       = {\udiss at ttbffont},
+  initial ttbffont       = {NewCMMono10-Bold.otf},%
+  store   ttitfont       = {\udiss at ttitfont},%
+  initial ttitfont       = {NewCMMono10-BookItalic.otf},%
+  store   ttbfitfont     = {\udiss at ttbfitfont},%
+  initial ttbfitfont     = {NewCMMono10-BoldOblique.otf},%
+  store   ttslfont       = {\udiss at ttslfont},%
+  initial ttslfont       = {NewCM10-Book.otf},%
+  store   ttbfslfont     = {\udiss at ttbfslfont},%
+  initial ttbfslfont     = {NewCMMono10-BoldOblique.otf},%
+  store   mathfont       = {\udiss at mathfont},%
+  initial mathfont       = {NewCMMath-Book.otf},%
+  store   mathbffont     = {\udiss at mathbffont},%
+  initial mathbffont     = {NewCMMath-Bold.otf},%
+  store   rmfeatures     = {\udiss at rmfeatures},%
+  choice  rmfntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at rmfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `rmfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeSerif, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {FreeSerif.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {FreeSerif},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at rmfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `rmfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpRoman-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {KpRoman-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfont = {KpRoman-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    rmfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   sffeatures     = {\udiss at sffeatures},%
+  choice  sffntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at sffntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `sffntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeSans, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {FreeSans.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {FreeSans},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at sffntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `sffntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpSans-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {KpSans-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffont = {KpSans-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    sffntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   ttfeatures     = {\udiss at ttfeatures},%
+  choice  ttfntext       = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at ttfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `ttfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  FreeMono, you may choose one of the
+                  following two methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {FreeMono.ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {FreeMono},\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at ttfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `ttfntext' to
+                  add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  KpMono-Regular.otf, you may choose one of
+                  the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {KpMono-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<---------------------8<----%
+                  \MessageBreak
+                  \MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfont = {KpMono-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    ttfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+  store   mathfeatures   = {\udiss at mathfeatures},%
+  choice  mathfntext     = {%
+            ttf            = {%
+              \ifudiss at explicitext
+                \def\udiss at mathfntext{ttf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `mathfntext'
+                  to add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  NotoSansMath-Regular, you may choose one
+                  of the following two\MessageBreak
+                  methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {NotoSansMath-Regular.ttf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {NotoSansMath-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfntext = {ttf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                }%
+              \fi
+            },%
+            otf            = {%
+              \ifudiss at explicitext
+                \def\udiss at mathfntext{otf}%
+              \else
+                \ClassError{udiss}{%
+                  Option `explicitext' is needed for adding
+                  font extensions%
+                }{%
+                  You have loaded font-option `mathfntext'
+                  to add extension to font-names.
+                  This\MessageBreak option is supposed to be
+                  used only with the `explicitext' option.
+                  E.g., for\MessageBreak loading, say,
+                  XITSMath-Regular, you may choose one of
+                  the following two\MessageBreak methods:%
+                  \MessageBreak\MessageBreak
+                  1. The recommended method:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {XITSMath-Regular.otf}%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}\MessageBreak
+                  \space\space\space
+                  ----8<----------------------------8<----%
+                  \MessageBreak\MessageBreak
+                  2. The alternative:%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                  \MessageBreak
+                  \space\space\space
+                  \string\documentclass[\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    explicitext,\@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfont = {XITSMath-Regular},%
+                    \@percentchar
+                    \MessageBreak
+                    \space\space\space\space\space
+                    mathfntext = {otf}\@percentchar
+                    \MessageBreak
+                    \space\space\space
+                  ]{udiss}%
+                  \MessageBreak
+                  \space\space\space
+                  ----8<-------------------------8<----%
+                }%
+              \fi
+            }%
+          },%
+}
+\ekvdefinekeys{udiss}{%
+  store   titleshape     = {\udiss at title@shape},%
+  initial titleshape     = {\bfseries},%
+  store   titlefont      = {\udiss at title@font},%
+  store   titlesize      = {\udiss at title@size},%
+  initial titlesize      = {\udiss at int@huge},%
+  store   titlecolor     = {\udiss at title@color},%
+  initial titlecolor     = {black},%
+  store   titleffeat     = {\udiss at title@fontfeats},%
+  initial titleffeat     = {}%
+}
+\ekvdefinekeys{udiss}{%
+  store   subtitleshape  = {\udiss at subtitle@shape},%
+  initial subtitleshape  = {\normalfont},%
+  store   subtitlefont   = {\udiss at subtitle@font},%
+  store   subtitlesize   = {\udiss at subtitle@size},%
+  initial subtitlesize   = {\udiss at int@large},%
+  store   subtitlecolor  = {\udiss at subtitle@color},%
+  initial subtitlecolor  = {black},%
+  store   subtitleffeat  = {\udiss at subtitle@fontfeats},%
+  initial subtitleffeat  = {}%
+}
+\ekvdefinekeys{udiss}{%
+  store   authorshape    = {\udiss at author@shape},%
+  initial authorshape    = {\normalfont},%
+  store   authorfont     = {\udiss at author@font},%
+  store   authorsize     = {\udiss at author@size},%
+  initial authorsize     = {\udiss at int@large},%
+  store   authorcolor    = {\udiss at author@color},%
+  initial authorcolor    = {black},%
+  store   authorffeat    = {\udiss at author@fontfeats},%
+  initial authorffeat    = {}%
+}
+\ekvdefinekeys{udiss}{%
+  store   unishape       = {\udiss at uni@shape},%
+  initial unishape       = {\itshape},%
+  store   unifont        = {\udiss at uni@font},%
+  store   unisize        = {\udiss at uni@size},%
+  initial unisize        = {\normalsize},%
+  store   unicolor       = {\udiss at uni@color},%
+  initial unicolor       = {black},%
+  store   uniffeat       = {\udiss at uni@fontfeats}%
+}
+\ekvdefinekeys{udiss}{%
+  store   deptshape      = {\udiss at dept@shape},%
+  initial deptshape      = {\normalfont},%
+  store   deptfont       = {\udiss at dept@font},%
+  store   deptsize       = {\udiss at dept@size},%
+  initial deptsize       = {\udiss at int@small},%
+  store   deptcolor      = {\udiss at dept@color},%
+  initial deptcolor      = {black},%
+  store   deptffeat      = {\udiss at dept@fontfeats},%
+  initial deptffeat      = {}%
+}
+\ekvdefinekeys{udiss}{%
+  store   ffshape        = {\udiss at fulfilment@shape},%
+  initial ffshape        = {\normalfont},%
+  store   fffont         = {\udiss at fulfilment@font},%
+  store   ffsize         = {\udiss at fulfilment@size},%
+  initial ffsize         = {\udiss at int@small},%
+  store   ffcolor        = {\udiss at fulfilment@color},%
+  initial ffcolor        = {black},%
+  store   fffeat         = {\udiss at fulfilment@fontfeats},%
+  initial fffeat         = {}%
+}
+\ekvdefinekeys{udiss}{%
+  store   logowidth      = {\udiss at logo@width},%
+  initial logowidth      = {0.3},%
+  store   logoheight     = {\udiss at logo@hght},%
+  initial logoheight     = {0.075}%
+}
+\ekvoProcessGlobalOptions{udiss}
+\NewDocumentCommand{ \dissertationstyle }{ m }{%
+  \AddToHook{begindocument/before}{%
+    \input{udiss-style-#1}%
+  }%
+}
+\ifudiss at print
+\else
+  \PassOptionsToClass{oneside}{memoir}%
+\fi
+\LoadClass{memoir}
+\RenewDocumentCommand{ \title }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@title at err
+    \def\udiss at title{-NoValidTitle-}%
+  }{%
+    \def\udiss at title{#1}%
+  }%
+}
+\RenewDocumentCommand{ \author }{ m }{%
+  \IfBlankTF{#1}{%
+    \udiss at blank@author at err
+    \def\udiss at author{-NoValidAuthor-}%
+  }{%
+    \def\udiss at author{#1}%
+  }%
+}
+\RequirePackage{iftex}
+\RequireTUTeX
+\def\udiss at int@HUGE{%
+  \addfontfeature{Scale={2.5}}%
+}
+\def\udiss at int@Huge{%
+  \addfontfeature{Scale={2}}%
+}
+\def\udiss at int@huge{%
+  \addfontfeature{Scale={1.7}}%
+}
+\def\udiss at int@LARGE{%
+  \addfontfeature{Scale={1.4}}%
+}
+\def\udiss at int@Large{%
+  \addfontfeature{Scale={1.2}}%
+}
+\def\udiss at int@large{%
+  \addfontfeature{Scale={1.1}}%
+}
+\def\udiss at int@small{%
+  \addfontfeature{Scale={0.9}}%
+}
+\def\udiss at int@footnotesize{%
+  \addfontfeature{Scale={0.8}}%
+}
+\def\udiss at int@scriptsize{%
+  \addfontfeature{Scale={0.7}}%
+}
+\def\udiss at int@tiny{%
+  \addfontfeature{Scale={0.6}}%
+}
+\def\udiss at int@miniscule{%
+  \addfontfeature{Scale={0.5}}%
+}
+\ifudiss at lg@used
+  \ifudiss at ldfbabel
+    \PassOptionsToPackage{%
+      \udiss at ldfbabel@list
+    }{babel}%
+  \fi
+\else
+  \PassOptionsToPackage{english,provide*=*}{babel}%
+\fi
+\RequirePackage{babel}
+\RequirePackage{iflang}
+\newcounter{udiss at tmp@langcnt}
+\ifudiss at ldfbabel
+\else
+  \ifudiss at lg@used
+    \ifnum\theudiss at langbabel=2\relax
+      \addtocounter{udiss at langbabel}{-1}%
+      \ifLuaTeX
+        \babelprovide[%
+          main,%
+          import,%
+          onchar                 ={ids fonts}%
+        ]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \else
+        \babelprovide[main,import]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \fi
+    \fi
+    \ifnum\theudiss at langbabel>2\relax
+      \setcounter{udiss at tmp@langcnt}{%
+        \numexpr\theudiss at langbabel -1\relax
+      }%
+      \setcounter{udiss at langbabel}{1}%
+      \loop
+        \ifLuaTeX
+          \babelprovide[%
+            import,%
+            onchar                 ={ids fonts}%
+          ]{%
+            \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname
+          }%
+        \else
+          \babelprovide[import]{%
+            \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname
+          }%
+        \fi
+        \ifnum\theudiss at tmp@langcnt=1\relax
+        \else
+          \addtocounter{udiss at langbabel}{1}%
+        \fi
+        \ifnum\theudiss at langbabel<\theudiss at tmp@langcnt
+        \relax
+      \repeat
+    \fi
+    \ifnum\theudiss at langbabel=1\relax
+    \else
+      \ifLuaTeX
+        \babelprovide[%
+          main,%
+          import,%
+          onchar                 ={ids fonts}%
+        ]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \else
+        \babelprovide[main,import]{%
+          \csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      \fi
+    \fi
+    \setcounter{udiss at tmp@langcnt}{%
+      \numexpr\theudiss at langbabel + 1\relax
+    }%
+    \setcounter{udiss at langbabel}{1}%
+    \loop
+      \IfFileExists{%
+        udiss-fonts-\csname
+          udiss at langbabel@\alph{udiss at langbabel}%
+        \endcsname
+      }{%
+        \input{%
+          udiss-fonts-\csname
+            udiss at langbabel@\alph{udiss at langbabel}%
+          \endcsname
+        }%
+      }{%
+        \ifudiss at font@warning
+          \ClassWarningNoLine{udiss}{%
+            We don't support \csname
+              udiss at langbabel@\alph{udiss at langbabel}%
+            \endcsname\space yet.%
+            \MessageBreak
+            It requires a font-setup. You may add the fonts
+            directly\MessageBreak to your preamble using:%
+            \MessageBreak\MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{rm}{main font}%
+            \MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{sf}{sans font}%
+            \MessageBreak
+            \space\space\string\babelfont[%
+              \csname
+                udiss at langbabel@\alph{udiss at langbabel}%
+              \endcsname
+            ]{tt}{mono font}%
+            \MessageBreak\MessageBreak
+            Read more about this in the documentation of
+            `udiss' in a\MessageBreak section called
+            `multilingual typesetting'. Consider%
+            \MessageBreak contacting us with a support
+            request and let us know some\MessageBreak
+            suitable free (libre) fonts for this
+            language. If you\MessageBreak don't wish to see
+            this warning again, use the option%
+            \MessageBreak `nofontwarning' to suppress it%
+          }%
+        \fi
+      }%
+      \addtocounter{udiss at langbabel}{1}%
+      \ifnum\theudiss at langbabel<\theudiss at tmp@langcnt\relax
+    \repeat
+  \fi
+\fi
+\babelfont{rm}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at rmfntext},%
+  \fi
+  BoldFont               = {\udiss at rmbffont},%
+  ItalicFont             = {\udiss at rmitfont},%
+  BoldItalicFont         = {\udiss at rmbfitfont},%
+  SlantedFont            = {\udiss at rmslfont},%
+  BoldSlantedFont        = {\udiss at rmbfslfont},%
+  \ifudiss at oldstylenum
+    Numbers              = {OldStyle},%
+    \ifudiss at oldone
+      CharacterVariant   = {6},%
+    \fi
+  \fi
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at rmfeatures
+]{\udiss at rmfont}
+\babelfont{sf}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at sffntext},%
+  \fi
+  BoldFont               = {\udiss at sfbffont},%
+  ItalicFont             = {\udiss at sfitfont},%
+  BoldItalicFont         = {\udiss at sfbfitfont},%
+  SlantedFont            = {\udiss at sfslfont},%
+  BoldSlantedFont        = {\udiss at sfbfslfont},%
+  \ifudiss at oldstylenum
+    Numbers              = {OldStyle},%
+    \ifudiss at oldone
+      CharacterVariant   = {6},%
+    \fi
+  \fi
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at sffeatures
+]{\udiss at sffont}
+\babelfont{tt}[%
+  \ifudiss at ignorefontspec
+    IgnoreFontspecFile,%
+  \fi
+  \ifudiss at explicitext
+    Extension            = {.\udiss at ttfntext},%
+  \fi
+  BoldFont               = {\udiss at ttbffont},%
+  ItalicFont             = {\udiss at ttitfont},%
+  BoldItalicFont         = {\udiss at ttbfitfont},%
+  SlantedFont            = {\udiss at ttslfont},%
+  BoldSlantedFont        = {\udiss at ttbfslfont},%
+  \ifLuaTeX
+    Renderer             = {HarfBuzz},%
+  \fi
+  \udiss at ttfeatures
+]{\udiss at ttfont}
+\RequirePackage{unicode-math}
+\expanded{%
+  \setmathfont[%
+    \ifudiss at ignorefontspec%
+      IgnoreFontspecFile,%
+    \fi%
+    \ifudiss at explicitext
+      Extension            = {.\udiss at mathfntext},%
+    \fi
+    BoldFont               = {\udiss at mathbffont},%
+    SlantedFont            = {\udiss at mathfont},%
+    BoldSlantedFont        = {\udiss at mathbffont},%
+    \udiss at mathfeatures%
+  ]{\udiss at mathfont}%
+}
+\RequirePackage{graphicx}
+\RequirePackage{xcolor}
+\RequirePackage{csquotes}
+\ifudiss at ccbysa
+  \RequirePackage[%
+    hyperxmp           = {false},%
+    type               = {CC},%
+    modifier           = {by-sa},%
+    version            = {4.0}%
+  ]{doclicense}
+\fi
+\ifudiss at colors
+  \colorlet{udisslink}{red!60!black}
+  \colorlet{udissurl}{blue!60!black}
+  \colorlet{udisscite}{green!60!black}
+\else
+  \colorlet{udisslink}{black}
+  \colorlet{udissurl}{black}
+  \colorlet{udisscite}{black}
+\fi
+\AddToHook{begindocument/before}{%
+  \ifdefined\udiss at title
+  \else
+    \def\udiss at title{\textbf{-NoValidTitle-}}%
+    \ClassError{udiss}{%
+      Title not given%
+    }{%
+      `title' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\title{title-of-the-dissertation}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at author
+  \else
+    \def\udiss at author{\textbf{-NoValidAuthor-}}%
+    \ClassError{udiss}{%
+      No author given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `author' is a compulsory field. Provide it
+      in the preamble like in\MessageBreak the following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\author{author-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at stream
+  \else
+    \def\udiss at stream{\textbf{-NoValidStream-}}%
+    \ClassError{udiss}{%
+      Stream not given%
+    }{%
+      `stream' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\stream{stream-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at discipline
+  \else
+    \def\udiss at discipline{\textbf{-NoValidDiscipline-}}%
+    \ClassError{udiss}{%
+      Discipline not given%
+    }{%
+      `discipline' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\discipline%
+      {discipline-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at degree
+  \else
+    \def\udiss at degree{\textbf{-NoValidDegree-}}%
+    \ClassError{udiss}{%
+      Degree not given%
+    }{%
+      `degree' is a compulsory field. Provide it in the
+      preamble like in the following:%
+      \MessageBreak
+      \MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\degree{degree-of-the-candidate}%
+      \MessageBreak\MessageBreak
+      ----8<-----------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at supervisor
+  \else
+    \def\udiss at title{\textbf{-NoValidTitle-}}%
+    \ClassError{udiss}{%
+      No supervisor given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `supervisor' is a compulsory field. Provide
+      it in the preamble like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\supervisor{supervisor's-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at university
+  \else
+    \def\udiss at university{\textbf{-NoValidUniversity-}}%
+    \ClassError{udiss}{%
+      No university given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `university' is a compulsory field. Provide
+      it in the preamble like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\university{university-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifdefined\udiss at department
+  \else
+    \def\udiss at department{\textbf{-NoValidDepartment-}}%
+    \ClassError{udiss}{%
+      No department given in a normal (non-blind) document%
+    }{%
+      Do you want a blind document? If yes, then use the
+      package option `blind' like\MessageBreak in the
+      following:%
+      \MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\documentclass[blind]{udiss}%
+      \MessageBreak\MessageBreak
+      ----8<------------------8<----%
+      \MessageBreak
+      Otherwise, `department'\space is a compulsory field.
+      Provide it in the preamble like in\MessageBreak the
+      following:%
+      \MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak\MessageBreak
+      \space\space\string\department{department-name}%
+      \MessageBreak\MessageBreak
+      ----8<-------------------------8<----%
+      \MessageBreak
+    }%
+  \fi
+  \ifudiss at print
+  \else
+    \RequirePackage{hyperref}%
+    \RequirePackage{hyperxmp}%
+    \hypersetup{%
+      unicode,%
+      colorlinks,%
+      pdftitle           = {\udiss at title}%
+    }%
+    \ifudiss at subtitle
+      \hypersetup{%
+        pdfsubject         = {\udiss at subtitle}%
+      }%
+    \fi
+    \ifudiss at blind
+    \else
+      \hypersetup{%
+        pdfauthor          = {\udiss at author},%
+        pdfcopyright       = {%
+          \udiss at title\textLF
+          \udiss at local@copyright\
+          ©
+          \udiss at copyrightable@years\
+          \udiss at author\textLF
+          \udiss at license@notice
+        },%
+      }%
+      \ifudiss at free@culture
+        \hypersetup{%
+          pdflicenseurl      = {%
+            \udiss at free@license at url
+          }%
+        }%
+      \fi
+    \fi
+    \ifudiss at colors
+      \hypersetup{%
+        linkcolor        = {\udiss at int@link at color},%
+        urlcolor         = {\udiss at int@url at color},%
+        citecolor        = {\udiss at int@cite at color}%
+      }%
+    \else
+      \hypersetup{%
+        hidelinks%
+      }%
+    \fi
+  \fi
+}
+\AddToHook{begindocument/end}{%
+  \begingroup
+  \thispagestyle{titlingpage}%
+  \ifudiss at ftitle
+    \setlength{\fboxsep}{25pt}%
+    \noindent\fbox{%
+      \begin{minipage}%
+        [c][\dimexpr\textheight-2\fboxsep-2\fboxrule]%
+        [c]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}%
+  \fi
+        \hspace{0pt}%
+        \vspace{3em}%
+        \begin{center}
+          \begingroup
+          \udiss at title@shape
+          \ifx\udiss at title@font\empty
+          \else
+            \fontspec[\udiss at title@fontfeats]%
+                     {\udiss at title@font}%
+          \fi
+          \udiss at title@size
+          \color{\udiss at title@color}%
+          \udiss at title
+          \endgroup
+
+          \medskip
+
+          \ifudiss at subtitle
+            \begingroup
+            \udiss at subtitle@shape
+            \ifx\udiss at subtitle@font\empty
+            \else
+              \fontspec[\udiss at subtitle@fontfeats]%
+                       {\udiss at subtitle@font}%
+            \fi
+            \udiss at subtitle@size
+            \color{\udiss at subtitle@color}%
+            \udiss at subtitle
+            \endgroup
+          \fi
+
+          \vfill
+
+          \ifudiss at blind
+          \else
+            \begingroup
+            \udiss at author@shape
+            \ifx\udiss at author@font\empty
+            \else
+              \fontspec[\udiss at author@fontfeats]%
+                       {\udiss at author@font}%
+            \fi
+            \udiss at author@size
+            \color{\udiss at author@color}%
+            \udiss at author
+            \ifudiss at pronouns
+              \begingroup
+              \space
+              \addfontfeature{Scale={0.6}}%
+              \udiss at pronouns
+              \endgroup
+            \fi
+            \endgroup
+
+          \vspace{2em}%
+          \fi
+
+          \begingroup
+          \udiss at fulfilment@shape
+          \ifx\udiss at fulfilment@font\empty
+          \else
+            \fontspec[\udiss at fulfilment@fontfeats]%
+                     {\udiss at fulfilment@font}%
+          \fi
+          \udiss at fulfilment@size
+          \color{\udiss at fulfilment@color}%
+          \udiss at fulfilment
+          \endgroup
+
+          \vfill
+
+          \begingroup
+          \udiss at uni@shape
+          \ifx\udiss at uni@font\empty
+          \else
+            \fontspec[\udiss at university@fontfeats]%
+                     {\udiss at uni@font}%
+          \fi
+          \udiss at uni@size
+          \color{\udiss at uni@color}%
+          \udiss at university
+          \endgroup
+
+          \vspace{0.5em}%
+
+          \begingroup
+          \udiss at dept@shape
+          \ifx\udiss at dept@font\empty
+          \else
+            \fontspec[\udiss at dept@fontfeats]%
+                     {\udiss at dept@font}%
+          \fi
+          \udiss at dept@size
+          \color{\udiss at dept@color}%
+          \udiss at department
+          \endgroup
+
+          \ifudiss at logo
+            \bigskip
+            \ifudiss at texlogo
+              \udiss at texlogo
+            \fi
+            \includegraphics[%
+              width        = {%
+                \udiss at logo@width\linewidth
+              },%
+              height       = {%
+                \udiss at logo@hght\textheight
+              }%
+            ]{%
+              \udiss at logo
+            }%
+          \fi
+        \end{center}
+  \ifudiss at ftitle
+      \end{minipage}%
+    }%
+  \fi
+
+  \newpage
+
+  \ifudiss at blind
+  \else
+    \ifudiss at free@culture
+      \thispagestyle{titlingpage}%
+      \vspace*{\stretch{1}}
+      \begin{quote}
+        \setlength{\parindent}{0pt}%
+        \begingroup
+        \begin{minipage}{\linewidth}
+          \bfseries
+          \udiss at title
+
+          \udiss at local@copyright\
+          ©
+          \udiss at copyrightable@years\
+          \udiss at author
+
+          \medskip
+          \noindent\hrule \linewidth 0.4pt\relax
+        \end{minipage}
+        \endgroup
+
+        \ifudiss at gfdl
+          Permission is granted to copy, distribute and/or
+          modify this document under the terms of the GNU
+          Free Documentation License, Version 1.3 or any
+          later version published by the Free Software
+          Foundation; with no Invariant Sections, no
+          Front-Cover Texts, and no Back-Cover Texts. A copy
+          of the license is included in the section entitled
+          \enquote{GNU Free Documentation License}.%
+        \fi
+        \ifudiss at ccbysa
+          \begin{minipage}{\linewidth}
+            \doclicenseThis
+          \end{minipage}
+        \fi
+        \vspace{\stretch{3}}
+      \end{quote}
+      \newpage
+    \fi
+  \fi
+
+  \tableofcontents*
+
+  \newpage
+
+  \ifudiss at blind
+  \else
+    \ifudiss at declaration
+      \thispagestyle{empty}%
+      \begin{center}%
+        {%
+          \LARGE\bfseries
+          \udiss at decllocal
+        }%
+      \end{center}%
+
+      \udiss at declaration
+    \fi
+  \fi
+
+  \newpage
+
+  \ifudiss at lot
+    \listoftables
+  \fi
+
+  \newpage
+
+  \ifudiss at lof
+    \listoffigures
+  \fi
+  \endgroup
+}%
+\ifudiss at blind
+\else
+  \ifudiss at gfdl
+    \AddToHook{enddocument}{%
+      \newpage
+      \begingroup
+      \pagestyle{plain}%
+      \addcontentsline{toc}%
+                      {chapter}%
+                      {GNU Free Documentation License}%
+      \input{gfdl-tex-1p3}%
+      \clearpage
+      \endgroup
+    }%
+  \fi
+\fi
+\endinput
+%%
+%% End of file `udiss.cls'.


Property changes on: trunk/Master/texmf-dist/tex/latex/udiss/udiss.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2024-10-01 19:51:28 UTC (rev 72444)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2024-10-01 20:00:43 UTC (rev 72445)
@@ -893,7 +893,7 @@
   uaclasses uafthesis uantwerpendocs uassign ucalgmthesis
     ucharcat ucharclasses ucbthesis ucdavisthesis ucph-revy
     ucs ucsmonograph
-    ucthesis udepcolor udes-genie-these udesoftec
+    ucthesis udepcolor udes-genie-these udesoftec udiss
     uebungsblatt uestcthesis ufrgscca
     uhhassignment uhrzeit uiucredborder uiucthesis
     ukbill ukrhyph ulem ulqda ulthese

Modified: trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc	2024-10-01 19:51:28 UTC (rev 72444)
+++ trunk/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc	2024-10-01 20:00:43 UTC (rev 72445)
@@ -257,6 +257,7 @@
 depend ucthesis
 depend udepcolor
 depend udes-genie-these
+depend udiss
 depend uestcthesis
 depend ufrgscca
 depend uhhassignment

Added: trunk/Master/tlpkg/tlpsrc/udiss.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.