summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/context/third/visualcounter
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-02-01 22:04:50 +0000
committerKarl Berry <karl@freefriends.org>2015-02-01 22:04:50 +0000
commitb3c54ca40a3a2db573cf1dd3c15ddf168be927c7 (patch)
tree66aadd0f05d3657f347d29a6f7268751bda40d51 /Master/texmf-dist/source/context/third/visualcounter
parent6dc0b898b70015fcaecc1921ff16d8915e742ce0 (diff)
context-visualcounter (1feb15)
git-svn-id: svn://tug.org/texlive/trunk@36190 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/context/third/visualcounter')
-rw-r--r--Master/texmf-dist/source/context/third/visualcounter/p-documentation.tex99
-rw-r--r--Master/texmf-dist/source/context/third/visualcounter/visualcounter.tex712
2 files changed, 811 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/context/third/visualcounter/p-documentation.tex b/Master/texmf-dist/source/context/third/visualcounter/p-documentation.tex
new file mode 100644
index 00000000000..0a3cbf6b520
--- /dev/null
+++ b/Master/texmf-dist/source/context/third/visualcounter/p-documentation.tex
@@ -0,0 +1,99 @@
+\setuppapersize[S5]
+
+\setuplayout[
+ width=middle,
+ height=middle,
+ %location=middle,
+ topspace=0in,
+ bottomspace=0in,
+ bottomdistance=.25in,
+ bottom=.25in,
+ backspace=.5in,
+ cutspace=0.5in,
+ leftmargin=0.25in,
+ rightmargin=0.25in,
+ leftmargindistance=0.1in,
+ rightmargindistance=0.1in,
+ header=0.25in,
+ footer=0.5in,
+ headerdistace=0.25in,
+ footerdistance=0.25in,
+ marking=on,
+% grid=yes,
+ ]
+
+\setuppagenumbering [location=none]
+
+
+\setupbodyfontenvironment[default][em=italic]
+\setupbodyfont[dejavu,10pt]
+
+
+\definetype[command][color=darkred, style=type]
+\definetype[options][color=darkblue, style=type]
+\definetype[comment][color=orange, style=italic]
+
+\definestartstop
+ [TexSnippetComment]
+ [color=orange,
+ style=italic]
+
+\setuptyping[option=tex, before=\startEXAMPLE, after=\stopEXAMPLE, indentnext=no, escape={[[,]]}]
+\setuptype[option=tex]
+
+\setupindenting[medium,yes]
+\setupwhitespace[medium]
+
+\setuphead[title][alternative=middle, textstyle=\sansbold]
+\setuphead[section,subject,subsubject,subsection]
+ [numberstyle=\sansbold,textstyle=\sansbold, page=yes]
+
+\setupitemize[1][autointro]
+\setupitemize[indenting=no]
+
+%% Frames and Backgrounds : <<<
+
+\definetextbackground
+ [EXAMPLE]
+ [ mp=background:random,
+ location=paragraph,
+ rulethickness=1pt,
+ framecolor=darkred,
+ width=\textwidth,
+ height=fit,
+ leftoffset=5em,
+ rightoffset=0mm,
+ before={\testpage[3]\blank[2*big]},
+ after={\blank},
+ ]
+
+\startuseMPgraphic{background:random}
+ path p;
+ for i = 1 upto nofmultipars :
+ p = (multipars[i]
+ topenlarged 8pt
+ bottomenlarged 4pt
+ leftenlarged -4EmWidth
+ rightenlarged 0EmWidth ) randomized 4pt ;
+ fill p withcolor lightgray ;
+ draw p withcolor \MPvar{linecolor}
+ withpen pencircle scaled \MPvar{linewidth};
+ endfor;
+ setbounds currentpicture to boundingbox OverlayBox ;
+\stopuseMPgraphic
+
+\defineframedtext
+ [EXAMPLEframe]
+ [rulethickness=1pt,
+ framecolor=darkred,
+ height=6.55cm,
+ width=broad,
+ background=color,
+ backgroundcolor=gray,
+ ]
+
+\definehighlight[emph][style=em]
+
+\setupcombination[distance=4em]
+
+\setupinteraction[state=start]
diff --git a/Master/texmf-dist/source/context/third/visualcounter/visualcounter.tex b/Master/texmf-dist/source/context/third/visualcounter/visualcounter.tex
new file mode 100644
index 00000000000..a5eb6fc4fb0
--- /dev/null
+++ b/Master/texmf-dist/source/context/third/visualcounter/visualcounter.tex
@@ -0,0 +1,712 @@
+\usemodule[documentation]
+\usemodule[visualcounter]
+
+\definevisualcounter
+ [visualsection]
+ [countdown]
+ [n={\somenamedheadnumber{visualsection}{current}},
+ last={\somenamedheadnumber{visualsection}{last}},
+ maxtext={99},
+ text={\headnumber[visualsection]},
+ style=\ssbf,
+ ]
+
+\definehead[visualsection]
+ [subsection]
+ [numbercommand=\visualsectionnumber,
+ numnberstyle=sansbold,
+ textstyle=sansbold,
+ page=yes]
+
+\def\visualsectionnumber#1{\smash{\framed[location=middle,frame=off]{\usevisualcounter[text=#1]{visualsection}}}}
+
+\startbuffer[visual]
+\definevisualcounter
+ [visualitem]
+ [scratchmarks]
+ [ counter=\getvalue{v_strc_itemgroups_counter},
+ width=1.5bp,
+ height=1.2ExHeight,
+ distance=3bp]
+
+\definesymbol[visual][\usevisualcounter{visualitem}]
+\stopbuffer
+
+\startbuffer[page]
+\definevisualcounter
+ [visualpage]
+ [mayanumbers]
+ [
+ counter=userpage,
+ maxwidth=\textwidth,
+ ]
+
+\stopbuffer
+
+\startbuffer[pagenumber]
+\setupfootertexts[\usevisualcounter{visualpage}]
+\stopbuffer
+
+
+\getbuffer[visual,page,pagenumber]
+
+\startbuffer[brightred]
+\definecolor[bright-red] [h=DE1B1B]
+\definecolor[dull-black] [h=2B2B2B]
+\definecolor[dull-yellow][h=E9E581]
+
+\definepalet
+ [brightred]
+ [past=dull-black, active=bright-red, future=dull-yellow]
+\stopbuffer
+
+\def\showcounter[#1]%
+ {\startmiddlealigned
+ \startcombination[#1]
+ {\usevisualcounter[n=3, last=12]{dummy}}{3 out of 12}
+ {\usevisualcounter[n=4, last=12]{dummy}}{4 out of 12}
+ {\usevisualcounter[n=5, last=12]{dummy}}{5 out of 12}
+ {\usevisualcounter[n=6, last=12]{dummy}}{6 out of 12}
+ \stopcombination
+ \stopmiddlealigned}
+
+\starttext
+
+
+\title {The \command{visualcounter} module \\ Aditya Mahajan \\ \currentdate}
+
+\starttyping
+\usemodule[visualcounter]
+\stoptyping
+
+\startitemize[visual, broad, packed, columns, two]
+ \item Find \TEX\ documents to be too boring?
+ \item Voilà, the \command{visualcounter} module!
+ \item Make your presentations stand out.
+ \item Turn any counter into a picture.
+\stopitemize
+
+\page
+
+The above effect was achieved by first defining a \command{visualitem} counter
+and a symbol \command{visual} that uses that counter:
+
+\typebuffer[visual]
+
+and then using the symbol \command{visual} in an itemization:
+
+\starttyping
+\startitemize[visual, ...]
+ \item ...
+ \item ...
+\stopitemize
+\stoptyping
+
+\page
+
+Notice the counter used for page numbering? That was achieved by first defining
+a \command{visualpage} counter:
+
+\typebuffer[page]
+
+and setting it as the footer text:
+
+\typebuffer[pagenumber]
+
+\page
+
+The above examples show the basic usage of the modules. The module provides two
+commands: \type{\definevisualcounter} to define a visual counter
+
+\starttyping
+\definevisualcounter
+ [...] % [[\comment{name of the counter}]]
+ [...] % [[\comment{optional name of the parent counter} ]]
+ [
+ ...=..., % [[\comment{key-value settings} ]]
+ ]
+\stoptyping
+
+and \type{\usevisualcounter} to use an already defined counter
+
+\starttyping
+\usevisualcounter
+ [...=...] % [[\comment{key-value settings}]]
+ {...} % [[\comment{name of the counter}]]
+\stoptyping
+
+\section {So, how do I use this?}
+
+Visual counters are defined and used in two ways:
+\startitemize[visual, broad, joinedup]
+ \item Using a low level interface that explicitly sets the current values of
+ the counter, last count, the \METAPOST\ graphic that draws the counter, and
+ the color palette.
+ \item Using higher-level interfaces built on top of the low-level interface
+ that allows you to specify a \emph{structure counter} like those used for
+ page numbering, itemizations, descriptions, etc.
+\stopitemize
+
+\page
+
+\subsection {The low-level interface}
+
+To begin with, lets not worry about how to define \METAPOST\ graphics that draw
+the counter. The module provides a predefined set of \command{visualcounter}s,
+and, for now, we'll just use those: the \command{scratchmarks} counter. Details
+on defining new counters are explained later.
+
+\startbuffer[scratchmarks]
+\usevisualcounter[n=6, last=12]{scratchmarks}
+\stopbuffer
+
+Suppose that I want to show that I am on page 6 out of 12 pages:
+
+\startmiddlealigned
+ \getbuffer[scratchmarks]
+\stopmiddlealigned
+
+which uses a predefined counter \command{scratchmarks} and was typed as follows:
+
+\typebuffer[scratchmarks]
+
+The counter may be made smaller
+
+\startbuffer[smaller]
+\setupvisualcounter[scratchmarks]
+ [width=1pt, height=8pt, distance=2pt]
+\stopbuffer
+
+\startmiddlealigned
+ \getbuffer[smaller,scratchmarks]
+\stopmiddlealigned
+
+or may use a different color palette
+
+\startbuffer[palette]
+\setupvisualcounter[scratchmarks][palette=brightred]
+\stopbuffer
+
+\startmiddlealigned
+ \getbuffer[brightred,palette,scratchmarks]
+\stopmiddlealigned
+
+\page
+
+These settings are changed using \command{\setupvisualcounter}. In particular, to
+get a small counter, use:
+
+\typebuffer[smaller]
+
+and to change the color palette, use:
+
+\typebuffer[palette]
+
+where the \type{brightred} palette was defined as
+
+\typebuffer[brightred]
+
+\subsection {The high-level interface}
+
+The high level interface is useful to display a \CONTEXT{} counter. Rather than
+manually setting the value of \options{n}, \options{last}, \options{text}, and
+\options{maxtext} (the last two are used only by a few counters), simply set the
+value of a \options{counter} and the other values are automatically generated.
+As an example, recall the set up for displaying the page numbers in the footer:
+
+\typebuffer[page]
+
+In the above example, \command{userpage} is the name of the counter that keeps
+track of the user page number.
+
+\page
+
+A list of some commonly used \CONTEXT{} counters is given below:
+
+\startbuffer[internal] counter=\getvalue{v_strc_itemgroups_counter},
+\stopbuffer
+
+
+\starttabulate[|l|l|]
+ \NC Page numbers \NC \type{userpage} \NC \NR
+ \NC Item group numbers
+ \NC \type{\v_strc_itemgroups_counter}\footnote[internal]
+ {Macros names with underscore are internal \CONTEXT{} macros, and generally are
+ not meant to be used in user code. The easiest way to set the value of
+ \options{counter} to \options{\v_strc_itemgroups_counter} is to use:
+ \typebuffer[internal]} \NC \NR
+ \NC Enumeration number\NC name of the enumeration \NC \NR
+\stoptabulate
+
+
+\section {Changing the color of counters}
+
+All counters use three colors: \command{past} to display past counters,
+\command{active} to display current counter, and \command{future} to display
+future counters. To change the color scheme, first define a new color palette
+(which is misspelled in \CONTEXT{} is \command{colorpalet}):
+
+\starttyping
+ \definecolorpalet
+ [...], % [[\comment{Name of the color palette}]]
+ [
+ past=..., % [[\comment{any previously defined \CONTEXT{} color}]]
+ active=..., % [[\comment{any previously defined \CONTEXT{} color}]]
+ future=..., % [[\comment{any previously defined \CONTEXT{} color}]]
+ ]
+\stoptyping
+
+\page
+
+and then set the color palette of a particular counter either using
+
+\starttyping
+ \definevisualcounter
+ [...] % [[\comment{name of the counter}]]
+ [...] % [[\comment{optional name of the parent counter} ]]
+ [
+ ...,
+ palette=..., % [[\comment{name of a previously defined} \options{colorpalet}]]
+ ...
+ ]
+\stoptyping
+
+or using
+
+\starttyping
+ \setupvisualcounter
+ [...] % [[\comment{name of the counter}]]
+ [
+ ...,
+ palette=..., % [[\comment{name of a previously defined} \options{colorpalet}]]
+ ...
+ ]
+\stoptyping
+
+\section {Changing the size of the counters}
+
+All predefined counters have tunable parameters (such as \options{width},
+\options{height}, and \options{distance}) that change the size of the counter.
+The default sizes are given in terms of \options{EmWidth} or \options{ExHeight};
+so they adapt to the size of the surrounding text.
+
+\section {Changing the style of text displayed in the counters}
+
+Some visual counters (currently, only the \command{countdown} counter) also
+display text. The style of this text may be set using:
+
+
+\starttyping
+ \setupvisualcounter
+ [...] % [[\comment{name of the counter}]]
+ [
+ ...,
+ style=..., %[[ \comment{any valid \CONTEXT{} style}]]
+ color=..., %[[ \comment{any valid \CONTEXT{} color}]]
+ ...
+ ]
+\stoptyping
+
+Note that changing the font size in the \options{style} affects the value of
+\options{EmWidth} and \options{ExHeight} and therefore also scales the counter
+appropriately. If this is not desirable, then you also need to set the size of
+the counter in dimensions that are independent of bodyfontsize.
+
+\section {Predefined counters}
+
+The \command{visualcounter} module provides the following predefined counters:
+
+\startnarrower
+\placelist[visualsection][criterium=local, alternative=f]
+\stopnarrower
+
+\page
+
+\visualsection {The \command{scratchmarks} counter}
+
+The \command{scratchmarks} counter is inspired by the \command{fuzzycount}
+counter that is part of the \CONTEXT's metapost library \command{txt}. The output
+looks as follows:
+
+\definevisualcounter
+ [dummy]
+ [scratchmarks]
+
+\showcounter[4]
+
+\blank[2*big]
+
+The \command{scratchmarks} counter has the following tunable parameters:
+\startitemize[packed, joinedup]
+ \item \options{width} (default \options{3bp}): the width of each stroke
+ \item \options{height} (default \options{3ExHeight}):
+ the length of the marker (and strictly speaking, not
+ the height; the real height is $\options{height}×\sin(\options{angle})$).
+ \item \options{distance} (default \options{0.5EmWidth}):
+ the distance between two successive markers. The
+ distance is measured from the middle of one marker to the middle of the
+ other (that is, it does not take the width of the stroke into account).
+ \item \options{angle} (default \options{75}): the angle of the forward
+ markers. The angle of the backward marker is \command{-angle}.
+ Only angles between \options{-90} and \options{90} give proper output.
+\stopitemize
+
+\page
+
+For example, the output with \options{width=1.5bp, angle=45} is:
+
+{\setupvisualcounter[dummy][width=1.5bp, angle=45]\showcounter[4]}
+
+\blank[2*big]
+
+An angle less than \options{0} changes the direction of the stroke.
+For example the output with \options{width=1.5bp, angle=-45} is:
+
+{\setupvisualcounter[dummy][width=1.5bp, angle=-45]\showcounter[4]}
+
+
+\visualsection {The \command{mayanumbers} counter}
+
+The \command{mayanumbers} counter is inspired by the Mayan numbering system that I saw in the
+documentary \quotation{Breaking the Maya code}. It counter does not strictly
+follow the Mayan numbering system. The Mayan numbering system is written
+vertically; the output of this counter is horizontal which makes it more useful
+for displaying page numbers in presentations.
+
+\definevisualcounter
+ [dummy]
+ [mayanumbers]
+
+\showcounter[2*2]
+
+\blank[2*big]
+
+The shape of the small and the large markers is as follows:
+
+\startmiddlealigned
+ \startcombination[2]
+ {\usevisualcounter[n=1,last=5,width=3EmWidth, height=3ExHeight]{dummy}}
+ {The shape of the small marker}
+ {\usevisualcounter[n=5,last=5,width=3EmWidth, height=3ExHeight]{dummy}}
+ {The shape of the large marker}
+ \stopcombination
+\stopmiddlealigned
+
+\page
+
+The \command{scratchmarks} counter has the following tunable parameters:
+\startitemize[packed, joinedup]
+ \item \options{width} (default value \options{1EmWidth}): The width of the
+ small marker.
+ \item \options{height} (default value \options{1ExHeight}): The height of the
+ markers.
+ \item \options{distance} (default value \options{width/4}): The distance
+ between two small markers. The distance between each group of four small
+ counters is \command{2*distance}.
+\stopitemize
+
+\blank[2*big]
+
+For example, to get an output that is half the default size, use
+the options \goodbreak \options{width=0.5EmWidth, height=0.5ExHeight}.
+
+{\setupvisualcounter[dummy][width=0.5EmWidth, height=0.5ExHeight]\showcounter[4]}
+
+% {\setupvisualcounter[dummy][style=\tfxx]\showcounter[4]}
+
+\visualsection {The \command{countdown} counter}
+
+This counter is inspired by the spinning wheel on the iPhone and on Google
+images.
+
+\definevisualcounter
+ [dummy]
+ [countdown]
+
+\startmiddlealigned
+ \startcombination[4]
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=3, last=12]{dummy}}}{3 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=4, last=12]{dummy}}}{4 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=5, last=12]{dummy}}}{5 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=6, last=12]{dummy}}}{6 out of 12}
+ \stopcombination
+\stopmiddlealigned
+
+\blank[2*big]
+
+The \command{countdown} counter may also be used with a text display of the
+counter.
+
+\startmiddlealigned
+ \startcombination[4]
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=3, text=3, last=12]{dummy}}}{3 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=4, text=4, last=12]{dummy}}}{4 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=5, text=5, last=12]{dummy}}}{5 out of 12}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=6, text=6, last=12]{dummy}}}{6 out of 12}
+ \stopcombination
+\stopmiddlealigned
+
+\blank[2*big]
+
+The example below shows how the counter changes when the number of steps are
+increased.
+
+\startmiddlealigned
+ \startcombination[4]
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=13, last=24]{dummy}}}{13 out of 24}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=14, last=36]{dummy}}}{14 out of 36}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=25, last=48]{dummy}}}{25 out of 48}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=36, last=60]{dummy}}}{36 out of 60}
+ \stopcombination
+\stopmiddlealigned
+
+\page
+
+The \command{countdown} counter has the following tunable parameters:
+\startitemize[packed, joinedup]
+ \item \options{width} (default value \options{1EmWidth}) and \options{height}
+ (default value \options{1ExHeight}): The maximum of these two determine the
+ difference between the inner and outer diameter of the ring.
+
+ \item \options{text} (not set by default): The text to be displayed in the
+ middle of the counter.
+
+ \item \options{maxtext} (not set by default): The diameter of the inner circle
+ is equal to \options{1.5} times the maximum of the width and the height of
+ \options{maxtext}.
+
+ \item \options{distance} (default value \options{3EmWidth}):
+ The distance between the consecutive markers along the circumference of the
+ outer circle is equal to \options{distance/last}.
+\stopitemize
+
+\blank[2*big]
+
+For example, to get a continuous circle set \options{distance=0pt}:
+
+\startmiddlealigned
+ \setupvisualcounter[dummy][distance=0cm]
+ \startcombination[4]
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=13, last=24]{dummy}}}{13 out of 24}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=14, last=36]{dummy}}}{14 out of 36}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=25, last=48]{dummy}}}{25 out of 48}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=36, last=60]{dummy}}}{36 out of 60}
+ \stopcombination
+\stopmiddlealigned
+
+When the high level interface is used, i.e., when the option
+\options{counter=...} is set, the value of \options{text} is the converted value of the
+counter, and the value of \options{maxtext} is the converted value of last
+counter.
+
+\visualsection {The \command{markers} counter}
+
+The \command{markers} counter is inspired by the section markers displayed by
+the \LATEX{} \options{beamer} package. This module comes in two shapes: the
+default shape is circle
+
+\definevisualcounter
+ [dummy]
+ [markers]
+
+\showcounter[1*4]
+
+\page
+
+The alternative shape is a square, which is selected using
+
+\starttyping
+ \setupvisualcounter
+ [...] % [[\comment{name of the counter}]]
+ [
+ ...
+ mpsetups=[[\options{visualcounter::markers:square}]],
+ ...
+ ]
+\stoptyping
+
+{\setupvisualcounter[dummy][mpsetups=visualcounter::markers:square]\showcounter[1*4]}
+
+\page
+
+The \options{visualcounter::markers:square} is a predefined alternative shape.
+Before discussing how to define a new shape, lets look at the tunable parameters
+of the \command{markers} counter:
+\startitemize[packed, joinedup]
+ \item \options{width} (default value \options{1EmWidth}): The width of the
+ each marker.
+
+ \item \options{distance} (default value \options{width/4}): The edge to edge
+ distance between successive markers.
+
+ \item \options{mpsetups} (default value \options{visualcounter::markers:circle}):
+ A \command{useMPgraphic} that determines the shape and the display of the
+ markers. The module comes with three predefined shapes,
+ \options{visualcounter::markers:circle}, \goodbreak
+ \options{visualcounter::markers:square}, and
+ \options{visualcounter::markers:star}.
+\stopitemize
+
+To define a new shape, you have to create a \command{useMPgraphic} that defines
+three \METAPOST{} macros:
+
+\startitemize[packed, joinedup]
+ \item \options{show_past_marker(expr shift)}
+ \item \options{show_active_marker(expr shift)}
+ \item \options{show_future_marker(expr shift)}
+\stopitemize
+
+The argument to these macros is the shift calculated based on their position.
+The macros are responsible for using the shift amount either for horizontal
+shift or for vertical shift, and coloring the markers with appropriate colors.
+The three colors from the color palette are available as \options{past_color},
+\options{active_color}, \options{future_color}.
+
+\page
+
+\startbuffer[star-definition]
+\startuseMPgraphic{visualcounter::markers:star}
+% [[\comment{Copied from http://tug.org/pracjourn/2012-1/hefferon.html}]]
+def fullstar =
+ hide (
+ z0 = origin;
+ z1 = (x0, 0.5);
+ z2 = ((z1 - z0) rotated ( 360/5)) + z0 ;
+ z3 = ((z1 - z0) rotated (2*360/5)) + z0 ;
+ z4 = ((z1 - z0) rotated (3*360/5)) + z0 ;
+ z5 = ((z1 - z0) rotated (4*360/5)) + z0 ;
+ z6 = whatever[z1, z3] = whatever[z2, z5];
+ z7 = whatever[z1, z3] = whatever[z2, z4];
+ z8 = whatever[z2, z4] = whatever[z3, z5];
+ z9 = whatever[z1, z4] = whatever[z3, z5];
+ z10 = whatever[z1, z4] = whatever[z2, z5];
+ )
+ (z1 -- z6 -- z2 -- z7 -- z3 -- z8 -- z4
+ -- z9 -- z5 -- z10 -- cycle)
+enddef;
+
+def show_star(expr shift, fill_color) =
+ newpath p;
+ p := fullstar xyscaled(width, width) shifted (shift, 0);
+
+ fill p withcolor fill_color;
+ draw p withcolor 0.5*fill_color;
+enddef;
+
+def show_past_marker(expr shift) =
+ show_star(shift, past_color);
+ enddef;
+
+def show_active_marker(expr shift) =
+ show_star(shift, active_color);
+enddef;
+
+def show_future_marker(expr shift) =
+ show_star(shift, future_color);
+enddef;
+\stopuseMPgraphic
+\stopbuffer
+
+\startbuffer[star-counter]
+\definevisualcounter
+ [stars]
+ [markers]
+ [mpsetups=visualcounter::markers:star, % [[\comment{use "star" marker}]]
+ width=1.5EmWidth,
+ distance=0.25EmWidth,
+ palette=star-colors, % [[\comment{defined elsewhere}]]
+ last=5, % [[\comment{rating out of 5}]]
+ ]
+\stopbuffer
+
+\definepalet
+ [star-colors]
+ [active=orange,
+ past=orange,
+ future=gray]
+
+\getbuffer[star-definition, star-counter]
+
+As an example, lets consider a new visual counter that displays a
+\quotation{star rating}:
+
+\startmiddlealigned
+ \startcombination[3]
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=1]{stars}}}{1 out of 5}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=3]{stars}}}{3 out of 5}
+ {\framed[frame=off,width=0.2\textwidth]{\usevisualcounter[n=5]{stars}}}{5 out of 5}
+ \stopcombination
+\stopmiddlealigned
+
+For better visual effect, I have also changed the color palette to one that uses
+same color for \options{past} and \options{current} markers. Note
+that the above alternative is available as the
+\options{visualcounter::markers:star} option to \options{mpsetups}. The following
+description is just to explain how to define a new marker.
+
+\page
+
+To create such a counter, first create a \command{useMPgraphic} as follows (I
+could have used any name instead of \options{visualcounter::markers:star}):
+
+\adaptlayout[lines=+2]
+
+\typebuffer[star-definition]
+
+\page
+
+Next, define a new \command{visaulcounter} that inherits from \command{markers}
+but uses a different \options{mpsetups}:
+
+\typebuffer[star-counter]
+
+\startbuffer[star-example]
+\usevisualcounter[n=4]{stars}
+\stopbuffer
+
+To use this counter, type:
+
+\typebuffer[star-example]
+
+which gives: \framed[frame=off,location=lohi]{\getbuffer[star-example]}
+
+
+
+\visualsection {The \command{progressbar} counter}
+
+The \command{progressbar} counter is based on a question on TeX.SE. This counter
+is not yet finalized. I am still working on the interface to change the shape of
+the progress bar, and perhaps add some shading.
+
+\definevisualcounter
+ [dummy]
+ [progressbar]
+
+\showcounter[1*4]
+
+
+\visualsection {The \command{pulseline} counter}
+
+The \command{pulseline} counter is based on the heart pulses shown in a heart
+rate measurement device. This counter is not yet finalized.
+
+\definevisualcounter
+ [dummy]
+ [pulseline]
+
+\definepalet
+ [green]
+ [past=darkgreen,
+ active=darkgreen,
+ future=darkgreen]
+
+{\setupvisualcounter[dummy][rulethickness=2bp,palette=green]\showcounter[2*2]}
+
+% \section[sec:new-counters]{How to define new counters}
+%
+% The name of the \command{useMPgraphic} must start with \options{visualcounter::}
+% (note the double \options{::}), so that the graphic uses the
+% \options{visualcounter} MP instance.
+
+
+\stoptext