- From: Doug Schepers <schepers@w3.org>
- Date: Sun, 17 Nov 2013 15:24:03 +0800
- To: "public-svg-wg@w3.org >> \"public-svg-wg@w3.org\"" <public-svg-wg@w3.org>
-------- Original Message --------
Subject: [Moderator Action] Marking up specs for Shepherd's spec parser
Date: Fri, 15 Nov 2013 11:52:23 +0000
From: Peter Linss <plinss@csswg.org>
To: SVG WG <public-svg-wg@w3.org>
As discussed at TPAC, Shepherd recognizes the following construct types
for <dfn> anchors in specifications:
CSS: 'property', 'value', 'at-rule', 'descriptor', 'type', 'function',
'selector', ‘token'
HTML/SVG: 'element', 'element-attr’
IDL: 'event', 'interface', 'constructor', 'method', 'argument',
'attribute', 'iterator',
'serializer', 'stringifier', 'callback',
'dictionary', 'dict-member', 'exception', 'except-field',
'enum', 'const', 'typedef'
Note that Shepherd recognizes a <dfn> “anchor” as:
1) a <dfn> element with an ‘id’ attribute
2) an <a> element with a ‘name’ or ‘id’ attribute that contains a <dfn>
3) a <dt> with an ‘id’ that contains a <dfn>
4) a <dfn> inside a section heading that has an ‘id’ with the value:
‘the-*-element’ (HTML5 compat)
Shepherd classifies <dfn> according to the following logic (first match
wins):
1) a ‘data-dfn-type’ attribute on the <dfn> with a valid type, e.g.:
<dfn id=“foo” data-dfn-type=“element”>svg</dfn>
2) an ‘id’ on the <dfn> (or container <a> or <dt> with the ‘id’) that
has one of the following prefixes (e.g. <dfn
id=“elementdef-image”>image</dfn>):
'propdef-‘ -> 'property'
'valuedef-‘ -> 'value'
'at-ruledef-‘ -> 'at-rule'
'descdef-‘ -> 'descriptor'
'typedef-‘ -> 'type'
'funcdef-‘ -> 'function'
'selectordef-‘ -> 'selector'
'tokendef-‘ -> 'token'
'elementdef-‘ -> 'element'
'element-attrdef-‘ -> 'element-attr'
'eventdef-‘ -> 'event'
'interfacedef-‘ -> 'interface'
'constructordef-‘ -> 'constructor'
'methoddef-‘ -> 'method'
'argdef-‘ -> 'argument'
'attrdef-‘ -> 'attribute'
'iterdef-‘ -> 'iterator'
'serialdef-‘ -> 'serializer'
'stringdef-‘ -> 'stringifier'
'callbackdef-‘ -> 'callback'
'dictdef-‘ -> 'dictionary'
'dict-memberdef-‘ -> 'dict-member'
'exceptdef-‘ -> 'exception'
'except-fielddef-‘ -> 'except-field'
'enumdef-‘ -> 'enum'
'constdef-‘ -> 'const'
'typedefdef-‘ -> 'typedef'
2a) if the <dfn>’s ‘id’ has one of the following “magic” prefixes (for
legacy support, not recommended):
‘attr-‘ -> ‘attribute’
‘interface-‘ -> ‘interface’
‘dom-‘ -> some IDL construct
the contents of the <dfn> will be searched for in any parsed
IDL, if not found, then use the heuristics:
if the <dfn> content starts with an uppercase letter ->
‘interface’
if it looks like a function (match '^[^ ]+\([^\(]*\)$’) ->
‘method’
else -> ‘attribute’
3) search for the contents of the <dfn> in parsed IDL, if it matches the
name of an IDL construct, use that type
4) look for the nearest ancestor with a valid ‘data-dfn-type’ attribute,
or one of the following classes:
'propdef' -> 'property'
'valuedef' -> 'value'
'at-ruledef' -> 'at-rule'
'descdef' -> 'descriptor'
'typedef' -> 'type'
'funcdef' -> 'function'
'selectordef' -> 'selector'
'tokendef' -> 'token'
'elementdef' -> 'element'
'element-attrdef' -> 'element-attr'
'eventdef' -> 'event'
'interfacedef' -> 'interface'
'constructordef' -> 'constructor'
'methoddef' -> 'method'
'argdef' -> 'argument'
'attrdef' -> 'attribute'
'iterdef' -> 'iterator'
'serialdef' -> 'serializer'
'stringdef' -> 'stringifier'
'callbackdef' -> 'callback'
'dictdef' -> 'dictionary'
'dict-memberdef' -> 'dict-member'
'exceptdef' -> 'exception'
'except-fielddef' -> 'except-field'
'enumdef' -> 'enum'
'constdef' -> 'const'
'typedefdef' -> 'typedef'
5) look at the <dfn> text content and use the following heuristics:
if the <dfn> content starts with ‘@‘ -> ‘at-rule’
if the <dfn> content is quoted, e.g.: "foo", 'foo', “foo”, “foo”,
or ‘foo’ -> ‘value’
if the <dfn> content starts with ‘<‘ and ends with ‘>’, e.g.:
<foo> -> ‘type’
if the <dfn> content starts with ‘:’ -> ‘selector’
if the <dfn> content looks like a function and the ‘id’ does not
start with ‘dom-‘ -> ‘function’
Shepherd also maintains any relationship between anchors, e.g. which
element is an attribute defined for. The logic for determining that is
as follows (first one wins):
1) if the <dfn> has the attribute ‘data-dfn-for’, e.g.: <dfn
id=“image-width” data-dfn-type=“element-attr”
data-dfn-for=“image”>width</dfn>
2) if the <dfn> is an IDL construct, extract the ‘for’ from the IDL
3) look for the nearest element ancestor with a ‘data-dfn-for’
attribute, e.g.:
<div data-dfn-for=“image” data-dfn-type=“element-attr”>
<dfn id=“image-width”>width</dfn>
<dfn id=“image-hieght”>height</dfn>
<div>
Received on Sunday, 17 November 2013 07:24:13 UTC