Am 01.10.2012 um 19:47 schrieb Wolfgang Schuster <wolfgang.schus...@gmail.com>:
> Hi Hans, > > can you add a option for the “way” key for \setupcounter which resets a > counter for every section independent of the level which was requested by > Peter Schorsch on the mailing list. I looked into the source file > (strc-num.lua and strc-sec.mkiv) and only four lines have to be changed to > add this feature (I used “head” for the name because there was a predefined > variable). > > > strc-sec.mkiv: > > \setvalue{\??headlevel\v!block}{0} > \setvalue{\??headlevel\v!none }{-1} > \setvalue{\??headlevel\v!text }{-2} > +\setvalue{\??headlevel\v!head }{-3} > > > strc-num.lua: > > function counters.setown(name,n,value) > local cd = counterdata[name] > if cd then > local d = allocate(name,n) > d.own = value > d.number = (d.number or d.start or 0) + (d.step or 0) > local level = cd.level > if not level or level == -1 then > -- -1 is signal that we reset manually > - elseif level > 0 then > + elseif level > 0 or level == -3 then > check(name,d,n+1) > elseif level == 0 then > -- happens elsewhere, check this for block > end > synchronize(name,d) > end > end > > function counters.add(name,n,delta) > local cd = counterdata[name] > if cd and (cd.state == v_start or cd.state == "") then > local data = cd.data > local d = allocate(name,n) > d.number = (d.number or d.start or 0) + delta*(d.step or 0) > -- d.own = nil > local level = cd.level > if not level or level == -1 then > -- -1 is signal that we reset manually > if trace_counters then > report_counters("adding, name: %s, level: manually, action: no > checking",name) > end > elseif level == -2 then > -- -2 is signal that we work per text > if trace_counters then > report_counters("adding, name: %s, level: text, action: > checking",name) > end > check(name,data,n+1) > - elseif level > 0 then > + elseif level > 0 or level == -3 then > -- within countergroup > if trace_counters then > report_counters("adding, name: %s, level: %s, action: checking > within group",name,level) > end > check(name,data,n+1) > elseif level == 0 then > -- happens elsewhere > if trace_counters then > report_counters("adding, name: %s, level: %s, action: no > checking",name,level) > end > else > if trace_counters then > report_counters("adding, name: %s, level: unknown, action: no > checking",name) > end > end > synchronize(name,d) > return d.number -- not needed > end > return 0 > end > > function counters.check(level) > for name, cd in next, counterdata do > - if cd.level == level then > + if cd.level == level or level > 0 and cd.level == -3 then > if trace_counters then > report_counters("resetting, name: %s, level: %s",name,level) > end > reset(name) > end > end > end > > > The question for the counter.check function is if it should also reset the > counter for each new sectionblock (replace my change above with “if cd.level > == level then”) or only at the start of a new section (that’s how my change > behaves now). Here is a example to test the option: \definecounter[test] %\setupcounter[test][way=bytext] \setupcounter[test][way=byhead] \define\test {\incrementcounter[test]% \convertedcounter[test]} \starttext \startbodymatter \chapter{Chapter}\test \section{Section}\test \subsection{Subsection}\test \subsubsection{Subsubsection}\test \stopbodymatter \startbackmatter %\chapter{Another chapter} \test \stopbackmatter \stoptext Wolfgang _______________________________________________ dev-context mailing list dev-context@ntg.nl http://www.ntg.nl/mailman/listinfo/dev-context