- From: Håkon Wium Lie <howcome@opera.com>
- Date: Wed, 9 May 2007 14:54:00 +0200
- To: Ladd Van Tol <ladd@criticalpath.com>
- Cc: www-style@w3.org
Also sprach Ladd Van Tol:
> > I believe exceptions can be encoded into the TeX format. Can someone
> > help me out here?
>
> I believe that hyphenation exceptions are currently an external
> mechanism in TeX, although it's been a long time since I've used TeX.
>
> As far as I understand hyphenation rules, there are supposed to be
> two kinds of exceptions:
>
> 1. Positive exceptions that show how to hyphenate particular words,
> ignoring the more general rules found in the pattern list (aka
> "dictionary")
> 2. Negative exceptions that show words that can never be hyphenated,
> generally due to having more than one proper hyphenation (dependent
> on grammatical context)
Right. My hypothesis is that both these exceptions can be encoded as
general rules. In any case, the 'hyphenate-resource' property is
general enough to host both exception lists, generic rules and
dictionaries with embedded hyphenation points.
> >> One question I had was about the treatment of elements within the
> >> prototype container that are not prototype entry elements. Are they
> >> copied for each list item?
> >
> > No. For example, in this example, the h2 element is only showed once.
> >
> > ...
> > <style>
> > #index {
> > prototype: container }
> > #index-marker {
> > prototype-insert-position: sorted
> > prototype-insert-policy: unique;
> > text-transform: uppercase }
> > #index-entry {
> > prototype-insert-position: sorted }
> > #index-entry::after {
> > content: leader(". . ") source-counter(page) }
> > dfn.entry {
> > prototype-insert: index-marker first-letter, index-entry content }
> > </style>
> > ...
> >
> > <div id="index">
> > <h2>Index</h2>
> > <div id="index-marker"></div>
> > <div id="index-entry"></div>
> > </div>
> > ...
>
> So what happens to an ordinary element placed between the index-
> marker and the index-entry divs?
Let's see. Say, we now have:
<div id="index">
<h2>Index</h2>
<div id="index-marker"></div>
<p>foo</p>
<div id="index-entry"></div>
</div>
The rendering of the initial state is:
Index
foo
Now, say the formatter encounters this element:
<dfn class="entry">shark</dfn>
two GLEs (generated list elements) are inserted, first one of type
#index-marker and then one of type #index-entry.
After the #index-marker has been inserted, the generated list looks
like this:
Index
S
foo
because only the first-letter (of "shark") is used, and the
'text-transform' specifies uppercase. The "S" appears above "foo"
because the that's where the prototype elements (#index-marker) is
found.
The spec should say that the first GLE element is inserted where its
prototype element is found.
Next, a GLE of type #index-entry is inserted. It also has
'prototype-insert-position: sorted'. The question becomes: sorted
relative to which elements? There are several options:
a) elements created with the same prototype element
b) elements created with the any prototype element
c) any block-level element
d) any element
I think b) is the correct answer. You want to be able to sort
elements, even if they have diffent styling.
Let's assume b). Then the #index-entry is entered after the "S" (as
"shark" comes after "s" in assumed sorting order). So, we get:
Index
S
shark
foo
This result may be counter-intuitive as the <p> element comes before
#index-entry in the structure.
The benefit of this approach, however, is that we allow non-prototype
elements inside and don't need to create dummy elements only
consisting of prototype elements. For headings (like "Index") this is
useful -- you will have a <div> arount the whole index (including the
heading), but don't really want a <div> with everything except the
heading.
Does it make sense?
> > BTW, I have changed the name of the 'make-element' to 'prototype-
> > insert'.
>
> This seems better.
Good.
> > (I'm looking for a better name for the 'prototype' property as well --
> > now it looks like a shorthand propertye. Calling it
> > 'prototype-container' would make sense, but I want to avoid yes/no
> > values. Hmm.)
>
> One possibility might be to call it "prototype-container" and have a
> value of "list" to indicate the list-like nature of indexes,
> glossaries, and tables of contents. This may also provide expansion
> opportunity if somebody comes up with another way to utilize
> prototype containers.
Interesting. So, "list" would be the only value in addition to "none".
prototype: list | none
I like it. I've changed it in my internal version.
I'd like to ask your advice on another proposed name change:
"content" -> "self" or "contents". In the example you quote, one finds:
prototype-insert: index-marker first-letter, index-entry content
the problem with 'content' is that it's also the name of a property.
I'd like to avoid that, if possible. I see two possible alternatives:
"self" and "contents". "self" is shorter and has not singular/plural
dilemma. "contents" may be more descriptive -- we're copying the
contents of the element, but necessarily its style or structure.
Any advice?
> >> A few other comments:
> >>
> >> - The Glossary example should show the appropriate make-element
> >> syntax.
> >
> > Right. How about this example:
> >
> > ...
> > <style>
> > #glossary { prototype: container }
> > #glossary-term { prototype-insert-position: sorted }
> > #glossary-definition { prototype-insert-position: current }
> > dfn { prototype-insert: glossary-term self, glossary-definition
> > attr(title) }
> >
> > </style>
> > ...
> > <div id="glossary">
> > <h2>Glossary of terms</h2>
> > <dl>
> > <dt id="glossary-term">...</dt>
> > <dd id="glossary-definition">...</dd>
> > </dl>
> > </div>
> > ...
> >
> > <p>The <dfn title="Leading paragraph">introduction</dfn> comes
> > first.</p>
>
> Seems good, although this example does assume that each term is only
> defined once.
Right, if a term is defined twice, it would end up twice in the
glossary. This is better than deleting the first entry, no?
> > Thanks for your (continued) review -- it's inspiring to have someone
> > look into this.
>
> No problem -- it's very interesting, and relates closely to my
> current work.
If so, would you know someone who could implement it? I think it's
possible to do it in a preprocessor without doing all the formatting.
That is, you would not resolve page numbers, but create the necessary
links so that a true formatter could resolve them later.
-h&kon
Håkon Wium Lie CTO °þe®ª
howcome@opera.com http://people.opera.com/howcome
Received on Wednesday, 9 May 2007 12:54:31 UTC