Re: [counter-styles] At-risk list

On 30 October 2013 17:38, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> On Tue, Oct 29, 2013 at 6:37 PM, Reece Dunn <msclrhd@googlemail.com> wrote:
>> On 30 October 2013 01:02, fantasai <fantasai.lists@inkedblade.net> wrote:
>>> I think we should add 'pad' and 'speak-as' to the at-risk list.
>>> Not that I think 'speak-as' is unworthy, but we don't really
>>> have much in the way of CSS speech implementations. :/
>>
>> FWIW, I have an experimental implementation of a slightly older draft
>> of the CSS Counter Styles spec (dated 2012-10-09) that I am using in
>> my text-to-speech project (http://reecedunn.co.uk/cainteoir/engine).
>>
>> This does not currently support 'speak-as' (the property was not
>> introduced in the revision I used). However, I intend to improve and
>> update the implementation to the current version of the Counter Styles
>> spec. When I do this, I can provide feedback on the 'speak-as'
>> property.
>>
>> A cursory inspection of the property looks ok.
>>
>> I have 2 comments regarding named style lookup:
>>
>> 1. Is that handling recursive counter style lookup is undefined -- for example:
>>
>>     @counter-style foo {
>>         speak-as: foo;
>>     }
>>
>> Should the style be treated as not existing (i.e. default to auto) in this case?
>
> Ah, thanks for catching that.  Cycle detection is currently defined
> for the 'fallback' descriptor, so I'll just copy that behavior over to
> 'speak-as'.  In the case of cycles, yes, it'll default to 'auto'.

The note in the fallback descriptor mentions that cycles are not
strictly an error. The example given is an odd/even counter style
pair. It is not clear in the note when a cycle constitutes an error --
is it that if no matching value is found after walking the graph a
complete cycle, then there is an error? That would make sense.

So if I am reading the spec correctly, the traversal be something like:
1.  traverse the counter styles via the speak-as property, resolving
cycles and default values accordingly;
2.  traverse the fallback chain as done for resolving the presentation
counter style from the counter style resolved in (1).

Thus, if you have:

@counter-style odd_even { speak-as: 'odd_even_speak'; }
@counter-style odd_even_speak { speak-as: 'odd_speak'; }
@counter-style odd_speak { symbols: 'odd'; fallback: 'even_speak'; ... }
@counter-style even_speak { symbols: 'even'; fallback: 'odd_speak'; ... }

Then the text being spoken will resolve as 'odd', 'even', 'odd', ...
as the fallback chain is resolved. NOTE: I am not sure exactly how you
would specify an alternating fallback chain as described in the note
within the fallback property description.

>> 2. When should counter style resolution take place? That is, given:
>>
>>     @counter-style abc { speak-as: def; }
>>     @counter-style def { ... }
>>
>> Will abc use def or auto as the speak-as value?
>
> CSS doesn't care about ordering constraints except when explicitly
> noted.  (That is, stylesheets aren't considered to be processed
> eagerly in a particular order; it's a declarative language, so
> references can be to things earlier or later in the document, or in
> earlier or later documents.)
>
>> If this is valid, speak-as cycles with more than one item are possible
>> (e.g. a -> b -> c -> a). Thus, should there be a maximum depth to
>> resolve these chains before defaulting to auto?
>
> Resolving 'fallback' chains requires arbitrary-depth cycle detection
> already, so resolving 'speak-as' won't be any more difficult.  In
> general, there are a few features in CSS now that require
> arbitrary-depth cycle detection, such as detecting cycles in Custom
> Properties/Variables, so if you're doing a CSS implementation you need
> a good cycle detector anyway.  There are appropriate and efficient
> algorithms in the literature for this.
>
> ~TJ

Received on Wednesday, 30 October 2013 18:11:41 UTC