summaryrefslogtreecommitdiff
path: root/tex/context/base/core-con.mkiv
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2012-10-19 01:20:13 +0300
committerMarius <mariausol@gmail.com>2012-10-19 01:20:13 +0300
commit69d2352af4b60929b37fc49f3bdb263977016244 (patch)
treedb5eb11398e345dfa23b4c4500fb93575d2afb7c /tex/context/base/core-con.mkiv
parentc18f7cbe51449a611ea1819fedd9a4ff18529b7d (diff)
downloadcontext-69d2352af4b60929b37fc49f3bdb263977016244.tar.gz
stable 2012.05.30 11:26
Diffstat (limited to 'tex/context/base/core-con.mkiv')
-rw-r--r--tex/context/base/core-con.mkiv177
1 files changed, 97 insertions, 80 deletions
diff --git a/tex/context/base/core-con.mkiv b/tex/context/base/core-con.mkiv
index cdc51eb23..241d43165 100644
--- a/tex/context/base/core-con.mkiv
+++ b/tex/context/base/core-con.mkiv
@@ -20,27 +20,35 @@
\ifdefined\currentlanguage \else \let\currentlanguage\empty \fi
\ifdefined\labeltext \else \let\labeltext \firstofoneargument \fi
-%D This module deals with all kind of conversions from numbers and dates. I
-%D considered splitting this module in a support one and a core one, but to keep
-%D things simple as well as preserve the overview, I decided against splitting.
+%D This module deals with all kind of conversions from numbers
+%D and dates. I considered splitting this module in a support
+%D one and a core one, but to keep things simple as well as
+%D preserve the overview, I decided against splitting.
\let\spr\firstofoneargument % separator
\let\stp\firstofoneargument % stopper
-% needed for arab:
+% cleaner, some day:
+%
+% \def\isolateseparators % etex only, even works with list separator overloading
+% {\unexpanded\def\spr##1{{##1}}%
+% \unexpanded\def\stp##1{{##1}}}
+
+% needed for arab :
\unexpanded\def\isolateseparators % even works with list separator overloading
- {\def\spr##1{{##1}}% % we can probably best mess around with zwj
- \def\stp##1{{##1}}} % and friends
+ {\def\spr##1{{##1}}%
+ \def\stp##1{{##1}}}
%D \macros
%D {numbers}
%D
-%D First we deal with the dummy conversion of numbers using the \TEX\ primitive
-%D \type{\number}. The uppercase alternative is only there for compatibility with
-%D the other conversion macros. We could do without \type{#1} but this way we get
-%D rid of unwanted braces. For the savety we also define a non||sence uppercase
-%D alternative.
+%D First we deal with the dummy conversion of numbers using the
+%D \TEX\ primitive \type{\number}. The uppercase alternative is
+%D only there for compatibility with the other conversion
+%D macros. We could do without \type{#1} but this way we get
+%D rid of unwanted braces. For the savety we also define a
+%D non||sence uppercase alternative.
%D
%D \showsetup{numbers}
%D
@@ -49,8 +57,8 @@
%D \def\Numbers#1{\number#1}
%D \stoptyping
%D
-%D Due to read ahead, as in \type{[\pagenumber\space]} the space will disappear,
-%D unless we use:
+%D Due to read ahead, as in \type{[\pagenumber\space]} the space will
+%D disappear, unless we use:
\def\numbers#1{\purenumber{#1}}
\def\Numbers#1{\purenumber{#1}}
@@ -58,9 +66,10 @@
%D \macros
%D {romannumerals,Romannumerals}
%D
-%D \TEX\ the program uses a rather tricky conversion from numbers to their roman
-%D counterparts. This conversion could of course be programmed in \TEX\ itself, but
-%D I guess Knuth found the programming trick worth presenting.
+%D \TEX\ the program uses a rather tricky conversion from
+%D numbers to their roman counterparts. This conversion could
+%D of course be programmed in \TEX\ itself, but I guess Knuth
+%D found the programming trick worth presenting.
%D
%D \showsetup{romannumerals}
%D \showsetup{Romannumerals}
@@ -104,9 +113,9 @@
%D \macros
%D {character,Character}
%D
-%D Converting a number into a character can of course only be done with numbers
-%D less or equal to~26. At the cost of much more macros a faster conversion is
-%D possible, using:
+%D Converting a number into a character can of course only
+%D be done with numbers less or equal to~26. At the cost of
+%D much more macros a faster conversion is possible, using:
%D
%D \starttyping
%D \setvalue{char1}{a} \def\character#1{\getvalue{char#1}}
@@ -125,8 +134,9 @@
%D \macros
%D {characters,Characters}
%D
-%D Converting large numbers is supported by the next two macros. This time we
-%D just count on: $\cdots$~x, y, z, aa, ab, ac~$\cdots$.
+%D Converting large numbers is supported by the next two
+%D macros. This time we just count on: $\cdots$~x, y, z, aa,
+%D ab, ac~$\cdots$.
%D
%D \showsetup{characters}
%D \showsetup{Characters}
@@ -153,25 +163,20 @@
\endgroup}
\unexpanded\def\oldstyleromannumerals#1% will become obsolete
- {\dontleavehmode
- \hbox\bgroup
+ {\begingroup
+ \leftrulefalse
+ \rightrulefalse
\ss\txx
- \setbox\scratchbox\hbox \s!spread .15\emwidth{\hss\uppercased{\romannumerals{#1}}\hss}%
- \scratchwidth \wd\scratchbox
- \scratchheight\ht\scratchbox
- \scratchdimen .1\exheight
- \vrule\s!width\scratchwidth\s!height\dimexpr\scratchheight+\scratchdimen\relax\s!depth-\dimexpr\scratchheight-+\scratchdimen\relax
- \hskip-\scratchwidth
- \vrule\s!width\scratchwidth\s!height\scratchdimen\s!depth\scratchdimen
- \hskip-\scratchwidth
- \box\scratchbox
- \egroup}
+ \boxrulewidth.15ex
+ \ruledhbox spread .15em{\hss\uppercased{\romannumerals{#1}}\hss}%
+ \endgroup}
%D \macros
%D {protectconversion}
%D
-%D The previous two commands are not robust enough to be passed to \type
-%D {\write} en \type{\message}. That's why we introduce:
+%D The previous two commands are not robust enough to be
+%D passed to \type{\write} en \type{\message}. That's why we
+%D introduce:
\unexpanded\def\protectconversion
{\let\doconvertcharacters\firstofoneargument}
@@ -179,9 +184,10 @@
%D \macros
%D {normaltime,normalyear,normalmonth,normalday}
%D
-%D The last part of this module is dedicated to converting dates. Because we
-%D want to use as meaningful commands as possible, and because \TEX\ already
-%D uses up some of those, we save the original meanings.
+%D The last part of this module is dedicated to converting
+%D dates. Because we want to use as meaningful commands as
+%D possible, and because \TEX\ already uses up some of those,
+%D we save the original meanings.
\savenormalmeaning\time
\savenormalmeaning\year
@@ -191,9 +197,10 @@
%D \macros
%D {month,MONTH}
%D
-%D Converting the month number into a month name is done using a case statement,
-%D abstact values and the label mechanism. This way users can easily redefine a
-%D label from for instance german into austrian.
+%D Converting the month number into a month name is done
+%D using a case statement, abstact values and the label
+%D mechanism. This way users can easily redefine a label from
+%D for instance german into austrian.
%D
%D \starttyping
%D \setuplabeltext [de] [january=J\"anner]
@@ -217,9 +224,11 @@
\def\MONTHLONG #1{\WORD{\monthlong {#1}}}
\def\MONTHSHORT#1{\WORD{\monthshort{#1}}}
-%D We never explicitly needed this, but Tobias Burnus pointed out that it would be
-%D handy to convert to the day of the week. In doing so, we have to calculate the
-%D total number of days, taking leapyears into account. For those who are curious:
+%D We never explicitly needed this, but Tobias Burnus pointed
+%D out that it would be handy to convert to the day of the
+%D week. In doing so, we have to calculate the total number of
+%D days, taking leapyears into account. For those who are
+%D curious:
%D
%D \startitemize[packed]
%D \item years that can be divided by 4 are leapyears
@@ -230,7 +239,8 @@
%D \macros
%D {weekday,WEEKDAY}
%D
-%D The first one is sort of redundant. It takes the day number argument.
+%D The first one is sort of redundant. It takes the day
+%D number argument.
%D
%D \showsetup{weekday}
%D \showsetup{WEEKDAY}
@@ -267,15 +277,15 @@
%D \getbuffer
%D \stoplines
%D
-%D The macro \type {\getdayoftheweek} can be used to calculate the number
-%D \type {\normalweekday}.
+%D The macro \type {\getdayoftheweek} can be used to calculate
+%D the number \type {\normalweekday}.
%D \macros
%D {doifleapyearelse,
%D getdayspermonth}
%D
-%D Sometimes we need to know if we're dealing with a leapyear, so here is a
-%D testmacro:
+%D Sometimes we need to know if we're dealing with a
+%D leapyear, so here is a testmacro:
%D
%D \starttyping
%D \doifleapyearelse{year}{yes}{no}
@@ -287,7 +297,8 @@
%D \getdayspermonth{year}{month}
%D \stoptyping
%D
-%D The number of days is available in the macro \type {\numberofdays}.
+%D The number of days is available in the macro \type
+%D {\numberofdays}.
\def\doifleapyearelse#1%
{\ctxcommand{doifleapyearelse(\number#1)}}
@@ -309,11 +320,13 @@
%D \macros
%D {currentdate, rawdate, date}
%D
-%D We use these conversion macros in the date formatting macro:
+%D We use these conversion macros in the date formatting
+%D macro:
%D
%D \showsetup{currentdate}
%D
-%D This macro takes care of proper spacing and delivers for instance:
+%D This macro takes care of proper spacing and delivers for
+%D instance:
%D
%D \startbuffer
%D \currentdate[weekday,day,month,year] % still dutch example
@@ -338,8 +351,8 @@
%D
%D or typeset: \getbuffer.
%D
-%D When no argument is passed, the current date is given as specified per
-%D language (using \type{\installlanguage}).
+%D When no argument is passed, the current date is given as
+%D specified per language (using \type{\installlanguage}).
%D
%D \showsetup{currentdate}
%D
@@ -354,8 +367,8 @@
%D
%D \typebuffer
%D
-%D The date is specified by one character keys. When no date is given, we
-%D get the current date.
+%D The date is specified by one character keys. When no date
+%D is given, we get the current date.
%D
%D \startlines
%D \getbuffer
@@ -417,13 +430,10 @@
\def\syst_converters_date[#1][#2]%
{\begingroup
\iffirstargument
- \letdummyparameter\c!d\normalday
- \letdummyparameter\c!m\normalmonth
- \letdummyparameter\c!y\normalyear
- \getdummyparameters[#1]%
- \normalday \directdummyparameter\c!d\relax
- \normalmonth\directdummyparameter\c!m\relax
- \normalyear \directdummyparameter\c!y\relax
+ \getparameters[\??da][d=\normalday,m=\normalmonth,y=\normalyear,#1]%
+ \normalday \@@dad\relax
+ \normalmonth\@@dam\relax
+ \normalyear \@@day\relax
\fi
\syst_converters_current_date[#2]%
\endgroup}
@@ -434,8 +444,9 @@
%D \macros
%D {currenttime}
%D
-%D The currenttime is actually the jobtime. You can specify a pattern similar
-%D to the previous date macro using the keys \type {h}, \type {m} and a separator.
+%D The currenttime is actually the jobtime. You can specify
+%D a pattern similar to the previous date macro using the
+%D keys \type {h}, \type {m} and a separator.
\unexpanded\def\calculatecurrenttime
{\edef\currenthour {\ctxcommand{hour ()}}%
@@ -451,6 +462,7 @@
\unexpanded\def\currenttime
{\doifnextoptionalelse\syst_converters_current_time_yes\syst_converters_current_time_nop}
+
\unexpanded\def\syst_converters_current_time_yes[#1]%
{\calculatecurrenttime
\processallactionsinset[#1][h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]}
@@ -459,15 +471,16 @@
{\normalexpanded{\syst_converters_current_time_yes[\currenttimespecification]}}
-%D Because we're dealing with dates, we also introduce a few day loops:
+%D Because we're dealing with dates, we also introduce a few
+%D day loops:
%D
%D \starttyping
%D \processmonth{year}{month}{command}
%D \processyear{year}{command}{before}{after}
%D \stoptyping
%D
-%D The counters \type {\normalyear}, \type {\normalmonth} and \type {\normalday}
-%D can be used for for date manipulations.
+%D The counters \type {\normalyear}, \type {\normalmonth} and
+%D \type{\normalday} can be used for for date manipulations.
\unexpanded\def\processmonth#1#2#3% year month command
{\begingroup
@@ -492,13 +505,15 @@
%D \macros
%D {defineconversion, convertnumber}
%D
-%D Conversion involves the macros that we implemented earlier in this module.
+%D Conversion involves the macros that we implemented earlier
+%D in this module.
%D
%D \showsetup{defineconversion}
%D \showsetup{convertnumber}
%D
-%D We can feed this command with conversion macros as well as a set of conversion
-%D symbols. Both need a bit different treatment.
+%D We can feed this command with conversion macros as well as
+%D a set of conversion symbols. Both need a bit different
+%D treatment.
%D
%D \starttyping
%D \defineconversion [roman] [\romannumerals]
@@ -534,9 +549,9 @@
\def\syst_converters_checked_conversion#1#2%
{\ctxcommand{checkedconversion("#1",#2)}}
-%D If a conversion is just a font switch then we need to make sure that the
-%D number is indeed ends up as number in the input, so we need to handle the
-%D second argument.
+%D If a conversion is just a font switch then we need to make sure
+%D that the number is indeed end up as number in the input, so we
+%D need to handle the second argument.
\def\convertnumber#1#2% expandable
{\csname\??conversionarguments
@@ -585,17 +600,19 @@
%D \macros
%D {ordinaldaynumber, highordinalstr, ordinalstr}
%D
-%D Efficient general ordinal number converters are sometimes difficult to
-%D implement. Fortunately dates never exceed the number~31.
+%D Efficient general ordinal number converters are sometimes
+%D difficult to implement. Fortunately dates never exceed the
+%D number~31.
\def\highordinalstr #1{\high{\notsmallcapped{#1}}}
\def\ordinalstr #1{\notsmallcapped{#1}}
\def\ordinaldaynumber #1{\ctxcommand{ordinal(#1,"\currentlanguage")}}
-%D As longs as symbols are linked to levels or numbers, we can also use the
-%D conversion mechanism, but in for instance the itemization macros, we prefer
-%D symbols because they can more easier be (partially) redefined. Symbols are
-%D implemented in another module.
+%D As longs as symbols are linked to levels or numbers, we can
+%D also use the conversion mechanism, but in for instance the
+%D itemization macros, we prefer symbols because they can more
+%D easier be (partially) redefined. Symbols are implemented
+%D in another module.
\def\smallcappedromannumerals#1{\smallcapped{\romannumerals{#1}}}
\def\smallcappedcharacters #1{\smallcapped{\characters {#1}}}