RE: [css3-gcpm] [css3-page] Named page lists

Håkon wrote:
> Also sprach Refstrup, Jacob Grundtvig:
>
>  > One of the examples that you refered to had:
>  >
>  > > >   div.chapter { page: chapter }
>  > > >   h2 { string-set: title content() }
>  > > >   @page chapter:left { @top-left { content: string(title) }}
>  > > >   @page chapter:first { @top-left { content: none }}
>  >
>  > With the following document fragment:
>  >
>  > <div class="chapter">
>  > <h2>Chapter 1 heading</h2>
>  > This is the prose of the 1st chapter. Flows into 2nd page.
>  > </div>
>  > <div class="chapter">
>  > <h2>Chapter 2 heading</h2>
>  > This is the prose of the 1st chapter.
>  > </div>
>  >
>  > It would seem that the author would want the first page of each
>  > chapter to have title in the top-left page margin.
>
> No, the last rule in the style sheet says that there should be no such
> title on the first page of each chapter.
>

Missed that. If we have:

@page chapter:first { @top-left { content: "Chapter " counter(chapter-count) }
# assume for now that counter(chapter-count) just works :-)

Then we'll generate two pages -- of which I want the first one to have "Chapter 1" and the second to have "Chapter 2" in it's header (because they are first pages of a chapter).



>  > Imagine this document generating two pages -- they'll both be named
>  > 'chapter'; but in this case we want chapter:first to match both of
>  > them.
>
> Yes.
>
>  > Therefore when checking for <named-page>:first you'd have to go
>  > back to the nearest ancestor with a page valid other than 'auto'
>  > and match first iff the current page is the first page for that
>  > ancestor to appear.
>
> I ran out of memory trying to parse that sentence :)

Sorry.

>
> In my mind, which is arguably quite simple, it appears easier. Here's
> a pseudo-algorithm:
>
>   n = element.page;
>
>   if (n == auto) then p = ancestor.page; /* and so forth
> until a non-auto value, or the root element is found */
>
>   if (n != name-of-the-current-page) then {
>      page-break();
>      create-new-page(n);
>      name-of-the-current-page = n;
>   }
>
> When a new page is created, all the rules set on that page --
> including left, right and first -- must be applied.
>
> Does this make sense?
>

Helps but I'm not quite there yet. I'm not worried about page breaks 'cos I think you've nailed that pretty good; I'm worried about what the chapter:first rule matches. I am saying that the intent of the above modified CSS and HTML is to have chapter:first match both page.

Hope that sentence computes better :)

- Jacob

Received on Friday, 11 July 2008 17:54:59 UTC