% This file is a documentation support file for the unipersian package. % % It provides date-related functionality used in the documentation % of unipersian. It is not part of the unipersian package itself. % % This file is currently distributed only as part of the source % of the unipersian documentation and is not intended as an % independently released package. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{shamsi}[2026/09/08 Documentation support for the unipersian package] \RequirePackage{expl3} \RequirePackage{xparse} \RequirePackage{jalali-engine} \ExplSyntaxOn % --- ذخیره‌سازی داده‌ها --- \DeclareDocumentCommand{\NewShamsi}{mmmm} { \jd_convert_jalali_to_gregorian_core:nnn {#2} {#3} {#4} \cs_gset:cpx { sh_#1_gy } { \int_use:N \g_jd_gy_int } \cs_gset:cpx { sh_#1_gm } { \int_use:N \g_jd_gm_int } \cs_gset:cpx { sh_#1_gd } { \int_use:N \g_jd_gd_int } \cs_gset:cpx { sh_#1_jy } { \int_use:N \g_jd_jy_int } \cs_gset:cpx { sh_#1_jm } { \int_use:N \g_jd_jm_int } \cs_gset:cpx { sh_#1_jd } { \int_use:N \g_jd_jd_int } \cs_gset:cpx { sh_#1_wd } { \int_use:N \g_jd_wd_int } } \DeclareDocumentCommand{\NewMiladi}{mmmm} { \jd_convert_gregorian_to_jalali_core:nnn {#2} {#3} {#4} \cs_gset:cpx { sh_#1_gy } { \int_use:N \g_jd_gy_int } \cs_gset:cpx { sh_#1_gm } { \int_use:N \g_jd_gm_int } \cs_gset:cpx { sh_#1_gd } { \int_use:N \g_jd_gd_int } \cs_gset:cpx { sh_#1_jy } { \int_use:N \g_jd_jy_int } \cs_gset:cpx { sh_#1_jm } { \int_use:N \g_jd_jm_int } \cs_gset:cpx { sh_#1_jd } { \int_use:N \g_jd_jd_int } \cs_gset:cpx { sh_#1_wd } { \int_use:N \g_jd_wd_int } } % --- چاپ اعداد (سازگار با فونت فارسی) --- \cs_new:Npn \sh_print:n #1 { \cs_if_exist:cTF { persiannumber } { \persiannumber{#1} } { #1 } } % --- استخراج اجزاء تاریخ --- \DeclareDocumentCommand{\Year}{m} { \sh_print:n { \use:c { sh_#1_gy } } } \DeclareDocumentCommand{\Month}{m} { \sh_print:n { \use:c { sh_#1_gm } } } \DeclareDocumentCommand{\Day}{m} { \sh_print:n { \use:c { sh_#1_gd } } } \DeclareDocumentCommand{\Persianyear}{m} { \sh_print:n { \use:c { sh_#1_jy } } } \DeclareDocumentCommand{\Persianmonth}{m} { \sh_print:n { \use:c { sh_#1_jm } } } \DeclareDocumentCommand{\Persianday}{m} { \sh_print:n { \use:c { sh_#1_jd } } } % --- نام‌ها (بدون جهت‌دهی داخلی) --- \DeclareDocumentCommand{\Persianmonthname}{m} { \ifcase \use:c { sh_#1_jm } \or فروردین\or اردیبهشت\or خرداد\or تیر\or مرداد\or شهریور\or مهر\or آبان\or آذر\or دی\or بهمن\or اسفند\fi } \DeclareDocumentCommand{\Monthname}{m} { \ifcase \use:c { sh_#1_gm } \or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi } \DeclareDocumentCommand{\PersianMiladimonthname}{m} { \ifcase \use:c { sh_#1_gm } \or ژانویه\or فوریه\or مارس\or آوریل\or مه\or ژوئن\or ژوئیه\or اوت\or سپتامبر\or اکتبر\or نوامبر\or دسامبر\fi } \DeclareDocumentCommand{\Persianweekday}{m} { \ifcase \use:c { sh_#1_wd } یکشنبه\or دوشنبه\or سه‌شنبه\or چهارشنبه\or پنجشنبه\or جمعه\or شنبه\fi } \DeclareDocumentCommand{\Weekday}{m} { \ifcase \use:c { sh_#1_wd } Sunday\or Monday\or Tuesday\or Wednesday\or Thursday\or Friday\or Saturday\fi } % --- دستورات ترکیبی نهایی با جهت RTL --- \DeclareDocumentCommand{\ShortShamsi}{m} { \RL{\Persianyear{#1}/\Persianmonth{#1}/\Persianday{#1}} } \DeclareDocumentCommand{\ShortMiladi}{m} { \LR{\Year{#1}/\Month{#1}/\Day{#1}} } \DeclareDocumentCommand{\Shamsi}{m} { \RL{\Persianday{#1}~\Persianmonthname{#1}~\Persianyear{#1}} } \DeclareDocumentCommand{\Miladi}{m} { \LR{\Monthname{#1}~\Day{#1},~\Year{#1}} } \DeclareDocumentCommand{\FaMiladi}{m} { \RL{\Day{#1}~\PersianMiladimonthname{#1}~\Year{#1}} } \ExplSyntaxOff