On 7/19/2018 9:56 PM, Pablo Rodriguez wrote:
On 07/18/2018 09:08 PM, Wolfgang Schuster wrote:

[...]
Afterwards you can use a loop where you add the markpage commands at
the begin and end of the range, below is a simple example but it’s easy
to write a better loop with Lua.

\setuplayout[page]
\setupinteraction[state=start]
\setupinteractionscreen[option={portrait, paper}, print=pages]
\starttext
\getfiguredimensions[i-context.pdf]
\dostepwiserecurse{1}{99}{1}{\externalfigure[i-context.pdf][height=\textheight,page=\recurselevel]}
\startmarkpages[page]
\dostepwiserecurse{100}{300}{1}{\externalfigure[i-context.pdf][height=\textheight,page=\recurselevel]}
\stopmarkpages
\dostepwiserecurse{301}{\noffigurepages}{1}{\externalfigure[i-context.pdf][height=\textheight,page=\recurselevel]}
\stoptext

Wolfgang

a different approach would be (code was mainly provided by anoter person):

     \startluacode
     function document.splitarray(inputstr, sep)
       local t={}
       for str in inputstr:gmatch("([^"..sep.."]+)") do
         table.insert(t, str)
       end
       return t
     end

     function document.getpagearray(page_ranges)
       local page_array={}
       local ranges = document.splitarray(page_ranges, ",")
       for _, pp in ipairs(ranges) do
         if string.find(pp, "-") then
           aux = document.splitarray(pp, "-")
           for i=tonumber(aux[1]), tonumber(aux[2]), 1 do
             table.insert(page_array, i)
           end
         else
            table.insert(page_array, tonumber(pp))
         end
       end
       return page_array
     end

     function document.printmarkedpageranges(tag, page_ranges)
       page_array = document.getpagearray(page_ranges)
       context("\\markpage[" .. tag .. "][" ..
           table.concat(page_array, ", ") .. "]")
     end
     \stopluacode

     \def\getmarkedpageranges#1#2{%
         \ctxlua{document.printmarkedpageranges("#1","#2")}}
     \setuplayout[page]
     \setupinteraction[state=start]
     \setupinteractionscreen[option={portrait, paper}, print=pages]
     \getmarkedpageranges{pages}{5, 25-30, 100-200, 235, 298, 304}
     \starttext
     \insertpages[i-context.pdf][width=0pt]
     \stoptext

This makes easier to add more complex page intervals (such as the one
above).

Before adding this to the wiki, my question would be whether it might
not be easier to add page ranges to \markpage.

nicer code

local function getpagearray(page_ranges)
    local list   = { }
    local ranges = string.split(page_ranges, ",")
    for i=1,#ranges do
        local f = string.split(ranges[i], "-")
        for i=tonumber(f[1]), tonumber(f[2] or f[1]) do
            list[i] = true
        end
    end
    return table.sortedkeys(list)
end

inspect(getpagearray("1-5,8,12-19"))

or even better

local function getpagearray(str,max)
    local list = { }
    local function add(i)
        list[i] = true
    end
    if max then
        utilities.parsers.stepper(str,max,add)
    else
        utilities.parsers.stepper(str,add)
    end
    return table.sortedkeys(list)
end

inspect(getpagearray("1-5,8,12-19,88-",100))

and then

function document.printmarkedpageranges(tag,str)
    context.markpage({ tag }, getpagearray(str))
end

I mean, as a standard user I think there is too much code (which may be
improved and made part of ConTeXt) for such a simple need.

Of course, I may be missing the whole point in this issue.

I would really appreciate, if someone could explain me what is wrong in
my assumption that \markpages need also page intervals.


--

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to