% language=us \startcomponent languages-numbering \environment languages-environment \startchapter[title=Numbering][color=darkgreen] \startsection[title=Introduction] Numbering is complex and in \CONTEXT\ it's not easy either. This is because we not only have 1, 2, 3 \unknown\ but also sub numbers like 1a, 1b, 1ic \unknown\ or 1.a, 1.b, 1.c \unknown\ There can be many levels, different separators, final symbols. As we're talking languages we only discuss conversion here: the mechanism that turns a number in for instance a letter. It happens that the mapping from a number onto a letter is language dependent. The next lines show how English, Spanish and Slovenian numbers: \blank \startpacked \startcolor[maincolor] \dontleavehmode {\ttbf\mainlanguage[en]\dorecurse{28} {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par \dontleavehmode {\ttbf\mainlanguage[es]\dorecurse{28} {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par \dontleavehmode {\ttbf\mainlanguage[sl]\dorecurse{28} {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par \stopcolor \stoppacked \blank You convert a number into a letter with: \starttyping \convertnumber{alphabetic}{15} \stoptyping There is also \type {\uconvertnumber} which does not expand unless typesetting is going on. Normally you don't need to bother about this. The \type {alphabetic} converter adapts to the current main language. When a language has no special alphabet, the regular 26 characters are used. A converter can also convert to a roman numeral, a language specific ordered list, a day or month, an ordinal string and again there can be a language specific conversion. The general conversion macro takes a conversion name and a number. When a conversion can be set (for instance in an itemized list, or in section numbering) you can use these names. You can define additional converters if needed, as long as the converter can handle a number. \starttyping \defineconversion [alphabetic] [\alphabeticnumerals] \stoptyping Here \type {\alphabeticnumerals} is a converter. If you look into the source of \CONTEXT\ you will see that many converters are calling out to \LUA, where we have implemented those specific conversions. The following table has long and short names. The short one are historic. \starttabulate \FL \NC month \NC \type {\monthlong} \NC \NR \NC month:mnem \NC \type {\monthshort} \NC \NR \ML \NC character \NC \type {\character} \NC \NR \NC Character \NC \type {\Character} \NC \NR \NC characters \NC \type {\characters} \NC \NR \NC Characters \NC \type {\Characters} \NC \NR \ML \NC AK \NC \type {\smallcappedcharacters} \NC \NR \NC KA \NC \type {\smallcappedcharacters} \NC \NR \ML \NC alphabetic a \NC \type {\alphabeticnumerals} \NC \NR \NC Alphabetic A \NC \type {\Alphabeticnumerals} \NC \NR \ML \NC number numbers n \NC \type {\numbers} \NC \NR \NC Numbers N \NC \type {\Numbers} \NC \NR \NC mediaeval m \NC \type {\mediaeval} \NC \NR \ML \NC word words \NC \type {\verbosenumber} \NC \NR \NC Word Words \NC \type {\VerboseNumber} \NC \NR \ML \NC ordinal \NC \type {\ordinalnumber} \NC \NR \NC Ordinal \NC \type {\Ordinalnumber} \NC \NR \ML \NC romannumerals i r \NC \type {\romannumerals} \NC \NR \NC Romannumerals I R \NC \type {\Romannumerals} \NC \NR \ML \NC o \NC \type {\oldstylenumerals} \NC \NR \NC O \NC \type {\oldstylenumerals} \NC \NR \NC or \NC \type {\oldstyleromannumerals} \NC \NR \ML \NC KR \NC \type {\smallcappedromannumerals} \NC \NR \NC RK \NC \type {\smallcappedromannumerals} \NC \NR \ML \NC greek g \NC \type {\greeknumerals} \NC \NR \NC Greek G \NC \type {\Greeknumerals} \NC \NR \NC mathgreek \NC \type {\mathgreek} \NC \NR \ML \NC abjadnumerals \NC \type {\abjadnumerals} \NC \NR \NC abjadnodotnumerals \NC \type {\abjadnodotnumerals} \NC \NR \NC abjadnaivenumerals \NC \type {\abjadnaivenumerals} \NC \NR \ML \NC thainumerals \NC \type {\thainumerals} \NC \NR \NC devanagarinumerals \NC \type {\devanagarinumerals} \NC \NR \NC gurmurkhinumerals \NC \type {\gurmurkhinumerals} \NC \NR \NC gujaratinumerals \NC \type {\gujaratinumerals} \NC \NR \NC tibetannumerals \NC \type {\tibetannumerals} \NC \NR \NC greeknumerals \NC \type {\greeknumerals} \NC \NR \NC Greeknumerals \NC \type {\Greeknumerals} \NC \NR \NC arabicnumerals \NC \type {\arabicnumerals} \NC \NR \NC persiannumerals \NC \type {\persiannumerals} \NC \NR \NC arabicexnumerals \NC \type {\arabicexnumerals} \NC \NR \NC arabicdecimals \NC \type {\arabicdecimals} \NC \NR \NC persiandecimals \NC \type {\persiandecimals} \NC \NR \ML \NC koreannumerals kr \NC \type {\koreannumerals} \NC \NR \NC koreanparenthesisnumerals kr-p \NC \type {\koreanparenthesisnumerals} \NC \NR \NC koreancirclenumerals kr-c \NC \type {\koreancirclenumerals} \NC \NR \ML \NC chinesenumerals cn \NC \type {\chinesenumerals} \NC \NR \NC chinesecapnumerals cn-c \NC \type {\chinesecapnumerals} \NC \NR \NC chineseallnumerals cn-a \NC \type {\chineseallnumerals} \NC \NR \ML \NC sloveniannumerals \NC \type {\sloveniannumerals} \NC \NR \NC slovenianNumerals \NC \type {\slovenianNumerals} \NC \NR \ML \NC spanishnumerals \NC \type {\spanishnumerals} \NC \NR \NC spanishNumerals \NC \type {\spanishNumerals} \NC \NR \LR \stoptabulate The \type {alphabetic} and \type {Alphabetic} converters adapt to slovenian and spanish as do their small capped alternatives. There are more general helpers for it too: \starttyping \languagecharacters{number} \languageCharacters{number} \stoptyping Also language related is the \type {\continuednumber} macro. Here we see an application: \startbuffer 1 \continuednumber{1} 1, 2 \continuednumber{2} 1, 2, 3 \continuednumber{3} \stopbuffer \typebuffer What renders as: \startlines[color=maincolor] \getbuffer \stoplines Such a macro is typically used in combination with counters ant it just typesets a label text depending on the valu ebeing non|-|zero. \startbuffer \setuplabeltext[en][continued={and so on}] 1, 2, 3 \continuednumber{3} 1, 2, 3 \convertnumber{continued}{3} \stopbuffer \typebuffer This gives: \startlines[color=maincolor] \getbuffer \stoplines In the rare case that you want to check if a conversion is defined you can use \starttyping \doifelseconversiondefined{name}{true}{false} \stoptyping So, \startbuffer \doifelseconversiondefined{characters}{we can convert}{forget about it} \stopbuffer \typebuffer Gives: \startlines[color=maincolor] \getbuffer \stoplines There are also some non language related converters that we mention here for completeness: \blank \type {set 0}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 0}{#1} }\stopcolor\par \type {set 1}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 1}{#1} }\stopcolor\par \type {set 2}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 2}{#1} }\stopcolor\par \type {set 3}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 3}{#1} }\stopcolor\par \blank When a set overruns we start again at the first element. The ordinal converter produces output like \color [maincolor] {\convertnumber {ordinal}{123}} and \color [maincolor] {\convertnumber {ordinal}{654}}. The corresponding string renderer is \type {\highordinalstr}. % quite limited currently op not documented here: % % \wordtonumber{two}{3} % \wordtonumber{fivethousand}{unknown} \stopsection \startsection[title=Dates] Dates are also language dependent. The following macros take a number and return the name of the month or day. \starttabulate \NC \type {\monthlong } \NC \monthlong {10} \NC \NR \NC \type {\monthshort} \NC \monthshort{10} \NC \NR \NC \type {\MONTH } \NC \MONTH {10} \NC \NR \NC \type {\MONTHLONG } \NC \MONTHLONG {10} \NC \NR \NC \type {\MONTHSHORT} \NC \MONTHSHORT{10} \NC \NR \NC \type {\weekday } \NC \weekday {5} \NC \NR \NC \type {\WEEKDAY } \NC \WEEKDAY {5} \NC \NR \stoptabulate The current date can be typeset with \type {\currentdate} and a specific date with \type {\date}, for instance: \startbuffer \currentdate[weekday,day,month,year] \currentdate[WEEKDAY,day,MONTH,year] \date[d=12,m=12,y=1998][weekday] \date[d=12,m=12,y=1998] \stopbuffer \typebuffer \startlines[color=maincolor] \getbuffer \stoplines Possible elements of the specification are: \starttabulate \FL \NC + ord \NC ordinal suffix \NC \NR \NC ++ highord \NC high ordinal suffix \NC \NR \ML \NC mnem: \NC mnemonic prefix \NC \NR \ML \NC Y y year \NC year 4 digits \NC \NR \NC yy \NC year 2 digits \NC \NR \ML \NC M \NC month 1 or 2 digits \NC \NR \NC mm \NC month 2 digits \NC \NR \ML \NC D \NC day 1 or 2 digits \NC \NR \NC dd \NC day 2 digits \NC \NR \ML \NC W \NC 1 digit \NC \NR \ML \NC month m \NC language dependent (can be mnemonic) \NC \NR \NC day d \NC language dependent \NC \NR \NC weekday w \NC language dependent \NC \NR \ML \NC MONTH \NC month uppercased \NC \NR \NC WEEKDAY \NC weekday uppercased \NC \NR \ML \NC referral \NC YYYMMDD \NC \NR \ML \NC space \\ \NC space \NC \NR \NC \NC word \NC \NR \LL \stoptabulate There are also some converters built in (more can be added), for instance: \startbuffer The current {\em gregorian} date \currentdate [month, day, {, }, year] is in {\em jalali} \currentdate [jalali:to, month, day, {, }, year] but we can also as a specific one, so {\em jalali} \date [y=1395, m=4, d=18] [month, day, {, }, year] is {\em gregorian} \date [y=1395, m=4, d=18] [jalali:from, month, day, {, }, year]. \stopbuffer \typebuffer \startnarrower \getbuffer \stopnarrower For time we have \type {\currenttime} and here the specification is just an \type {h}, \type {m} and whatever connects them. Both date and time are pre|-|configured in the language definition file \type {lang-def}. \stopsection % \startsection[title=Counters] % % \stopsection \stopchapter \stopcomponent