[ttml2] further elaborate nesting model in notes, allow delimiters in textContainer (issue 228)
authorGlenn Adams <glenn@skynav.com>
Sat, 04 Oct 2014 14:05:40 -0600
changeset 745 9baedffc327e
parent 744 8fc2c71d339f
child 746 6b22d127bf96
[ttml2] further elaborate nesting model in notes, allow delimiters in textContainer (issue 228)
ttml2/spec/ttml2.xml
--- a/ttml2/spec/ttml2.xml	Thu Oct 02 15:40:15 2014 -0600
+++ b/ttml2/spec/ttml2.xml	Sat Oct 04 14:05:40 2014 -0600
@@ -6299,7 +6299,7 @@
 <ednote>
 <name>Font Position Variant Example</name>
 <date>2014-09-24</date>
-<edtext>Add example and example rendering of tts:fontVariantPosition.</edtext>
+<edtext>Add example source and rendering of tts:fontVariantPosition.</edtext>
 </ednote>
 <note role="derivation">
 <p>The semantics of the style property
@@ -7049,8 +7049,7 @@
 </table>
 <p></p>
 <p>If the value of this attribute is <code>none</code>, then no ruby semantics apply; otherwise, the ruby semantics enumerated by
-<specref ref="ruby-semantics-mapping-table"/> apply, where the maximal content model defined by <bibref ref="ruby"/>, &sect;2.1, applies
-and must be treated as an error if violated.</p>
+<specref ref="ruby-semantics-mapping-table"/> apply.</p>
 <p>If a computed value of the property associated with this attribute is not supported,
 then a <loc href="#terms-presentation-processor">presentation processor</loc> must use the value <code>none</code>.</p>
 <table id="ruby-semantics-mapping-table" role="common">
@@ -7121,7 +7120,7 @@
 <item><p>if the computed value of <att>tts:ruby</att> is <code>textContainer</code>, then the
 computed value of <att>tts:ruby</att> of its parent element is <code>container</code>;</p></item>
 <item><p>if the computed value of <att>tts:ruby</att> is <code>textContainer</code>, then the
-computed value of <att>tts:ruby</att> of its first child element is <code>text</code>;</p></item>
+computed value of <att>tts:ruby</att> of its first child element is either <code>text</code> or <code>delimiter</code>;</p></item>
 <item><p>if the computed value of <att>tts:ruby</att> is <code>textContainer</code>, then the
 computed value of <att>tts:ruby</att> of its preceding sibling is <code>baseContainer</code> or
 <code>textContainer</code>;</p></item>
@@ -7150,7 +7149,7 @@
 <item><p>if the computed value of <att>tts:ruby</att> is <code>text</code>, then the
 computed value of <att>tts:ruby</att> of no descendant element is not <code>none</code>;</p></item>
 <item><p>if the computed value of <att>tts:ruby</att> is <code>delimiter</code>, then the
-computed value of <att>tts:ruby</att> of its parent element is <code>container</code>;</p></item>
+computed value of <att>tts:ruby</att> of its parent element is either <code>container</code> or <code>textContainer</code>;</p></item>
 <item><p>if the computed value of <att>tts:ruby</att> is <code>delimiter</code>, then the
 computed value of <att>tts:ruby</att> of its preceding sibling is <code>base</code> or
 <code>text</code>;</p></item>
@@ -7159,31 +7158,97 @@
 <item><p>if the computed value of <att>tts:ruby</att> is <code>delimiter</code>, then the
 computed value of <att>tts:ruby</att> of no descendant element is not <code>none</code>;</p></item>
 </ulist>
+<p>A validating processor must treat a violation of any of the above constraints as an error.
+For the purpose of presentation processing, the violation of any of these constraints should result in fallback (inline)
+presentation of ruby text annotations, where fallback annotation presentation is considered to be implementation dependent.</p>
 <note role="elaboration">
 <p>The above listed constraints are intended to be interpreted as specifying the following nesting model:</p>
 <eg xml:space="preserve">
 container
-  : baseContainer textContainer textContainer?
-  | base text
+  : base text
   | base delimiter text delimiter
+  | baseContainer textContainer textContainer?
 
 baseContainer
   : base+
 
 textContainer
   : text+
+  | delimiter text+ delimiter
 
 base | text | delimiter
   : ( #PCDATA | { span - tts:ruby } )*
 </eg>
-<p>This model corresponds to the maximal content model for the <code>ruby</code> element defined by <bibref ref="ruby"/>, &sect;2.1:</p>
-<eg xml:space="preserve">
-((rb, (rt | (rp, rt, rp))) | (rbc, rtc, rtc?))
-</eg>
-</note>
-<p>A validating processor must treat a violation of any of the above constraints as an error.</p>
-<p>For the purpose of presentation processing, the violation of any of these constraints should result in fallback (inline)
-presentation of ruby text annotations, where fallback annotation presentation is considered to be implementation dependent.</p>
+<p>This model corresponds to the maximal content model for the <code>ruby</code> element defined by <bibref ref="ruby"/>, &sect;2.1,
+with the exception that <code>rtc</code> is effectively extended to permit the optional use of delimiters (<code>rp</code>):</p>
+<eg xml:space="preserve">
+ruby
+  : rb rt
+  | rb rp rt rp
+  | rbc rtc rtc?
+
+rbc
+  : rb+
+
+rtc
+  : rt+
+  | rp rt+ rp                            // extension to <bibref ref="ruby"/>
+</eg>
+</note>
+<note role="explanation">
+<p>While not supporting as many opportunities for markup minimization as allowed by <bibref ref="html5"/>,
+the formulation of ruby annotation defined here does allow the following shorthands:</p>
+<eg xml:space="preserve">
+base text =
+  baseContainer
+    base
+  textContainer
+    text
+
+base delimiter text delimiter =
+  baseContainer
+    base
+  textContainer
+    delimiter text delimiter
+</eg>
+<p>Given the content of <code>base</code> is <code>B</code> and the content of
+<code>text</code> is <code>T</code>, then the expression <code>base text</code> could be represented variously in <bibref ref="html5"/> as follows:</p>
+<eg xml:space="preserve">
+&lt;ruby&gt;B&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;B&lt;rt&gt;T&lt;/rt&gt;&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rt&gt;T&lt;/rt&gt;&lt;/ruby&gt;
+&lt;ruby&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/rtc&gt;&lt;/ruby&gt;
+&lt;ruby&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/rt&gt;&lt;/ruby&gt;
+&lt;ruby&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/rt&gt;&lt;/rtc&gt;&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;rtc&gt;&lt;rt&gt;T&lt;/rtc&gt;&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rtc&gt;&lt;rt&gt;T&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rtc&gt;&lt;rt&gt;T&lt;/rtc&gt;&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rtc&gt;&lt;rt&gt;T&lt;/rt&gt;&lt;/ruby&gt;
+&lt;ruby&gt;&lt;rb&gt;B&lt;/rb&gt;&lt;rtc&gt;&lt;rt&gt;T&lt;/rt&gt;&lt;/rtc&gt;&lt;/ruby&gt;
+</eg>
+<p>Whereas, in TTML2, the following alternative expressions are possible:</p>
+<eg xml:space="preserve">
+&lt;span tts:ruby="container"&gt;
+  &lt;span tts:ruby="base"&gt;B&lt;/span&gt;
+  &lt;span tts:ruby="text"&gt;T&lt;/span&gt;
+&lt;/span&gt;
+</eg>
+<p>or its equivalent</p>
+<eg xml:space="preserve">
+&lt;span tts:ruby="container"&gt;
+  &lt;span tts:ruby="baseContainer"&gt;
+    &lt;span tts:ruby="base"&gt;B&lt;/span&gt;
+  &lt;/span&gt;
+  &lt;span tts:ruby="textContainer"&gt;
+    &lt;span tts:ruby="text"&gt;T&lt;/span&gt;
+  &lt;/span&gt;
+&lt;/span&gt;
+</eg>
+</note>
 <p>Use of <att>tts:ruby</att> to specify simple ruby annotation is illustrated by the following example.</p>
 <table id="style-attribute-ruby-example-1" role="example">
 <caption>Example Fragment &ndash; Simple Ruby</caption>
@@ -7306,7 +7371,7 @@
 <ednote>
 <name>Ruby Align Example</name>
 <date>2014-09-20</date>
-<edtext>Add example and example rendering of tts:rubyAlign.</edtext>
+<edtext>Add example source and rendering of tts:rubyAlign.</edtext>
 </ednote>
 <note role="derivation">
 <p>The semantics of the style property
@@ -7363,7 +7428,7 @@
 <ednote>
 <name>Ruby Offset Example</name>
 <date>2014-10-02</date>
-<edtext>Add example and example rendering of tts:rubyOffset.</edtext>
+<edtext>Add example source and rendering of tts:rubyOffset.</edtext>
 </ednote>
 </div3>
 <div3 id="style-attribute-rubyPosition">
@@ -7454,7 +7519,7 @@
 <ednote>
 <name>Ruby Position Example</name>
 <date>2014-09-20</date>
-<edtext>Add example and example rendering of tts:rubyPosition.</edtext>
+<edtext>Add example source and rendering of tts:rubyPosition.</edtext>
 </ednote>
 <note role="derivation">
 <p>The semantics of the style property
@@ -12405,6 +12470,12 @@
 <date>2014-03-27</date>
 <edtext>Add feature(s) associated with support for explicit and implied inline regions.</edtext>
 </ednote>
+<p></p>
+<ednote>
+<name>New style property features</name>
+<date>2014-10-02</date>
+<edtext>Add features to cover new style properties: border, fontVariantPosition, ruby, rubyAlign, rubyOffset, rubyPosition, textOrientation, etc.</edtext>
+</ednote>
 <div3 id="feature-animation">
 <head>#animation</head>
 <p>A TTML <loc href="#terms-transformation-processor">transformation processor</loc> supports the <code>#animation</code>
@@ -14981,6 +15052,11 @@
 (See
 <xspecref href="http://www.gps.gov/technical/">http://www.gps.gov/technical/</xspecref>.)
 </bibl>
+<bibl id="html5" key="HTML5">Ian Hickson et al.,
+<titleref href="http://www.w3.org/TR/html5/">Extensible Stylesheet Language (XSL) Version 1.1</titleref>,
+W3C Proposed Recommendation, 16 September 2014. (See
+<xspecref href="http://www.w3.org/TR/html5/">http://www.w3.org/TR/html5/</xspecref>.)
+</bibl>
 <bibl id="media-types" key="Media Types">Ned Freed and Nathaniel Borenstein,  
 <titleref
 href="http://www.rfc-editor.org/rfc/rfc2046.txt">Multipurpose Internet