- From: Glenn Adams <glenn@skynav.com>
- Date: Mon, 26 Aug 2013 13:06:17 -0600
- To: Michael Dolan <mdolan@newtbt.com>
- Cc: TTWG <public-tt@w3.org>
- Message-ID: <CACQ=j+fzOCpTaUaWWkYtiFFVdKq_KwK8VbLSyyeTDq-Oix+E=g@mail.gmail.com>
Yes. I've already implemented the change in the TTML1SE ED at [1]. I view this as "comment resolution" of comments received during the PER review period, and have documented it in [2] (along with other post-PER edit changes). [1] https://dvcs.w3.org/hg/ttml/raw-file/default/ttml1/spec/ttml1.html#style-attribute-lineHeight [2] https://dvcs.w3.org/hg/ttml/raw-file/default/ttml1/spec/ttml1-changes.html On Mon, Aug 26, 2013 at 11:12 AM, Michael Dolan <mdolan@newtbt.com> wrote: > I agree that this would be very helpful. Just to confirm, you are > proposing it be a last minute edit to 1.0SE, right?**** > > ** ** > > *From:* Andreas Tai [mailto:tai@irt.de] > *Sent:* Sunday, August 25, 2013 6:37 AM > *To:* Glenn Adams > > *Cc:* TTWG > *Subject:* Re: lineHeight**** > > ** ** > > Thanks for the very prompt solution proposal, Glenn.**** > > ** ** > > Yes, personally I think this is the solution that is needed. It makes it > clearer and as you said it meets the expectation of authors that are coming > from CSS and XSL:FO.**** > > ** ** > > ** ** > > Am 23.08.2013 um 19:50 schrieb Glenn Adams:**** > > How about we change the 8.2.12 (in TTML1) to read as follows?**** > > ** ** > > If the value of this attribute is normal, then the computed value of the > style property must be considered to be the same as 120% of the largest > font size that applies to the element and its descendant elements in the > intermediate synchronic document as determined by *9.3.2 Intermediate > Synchronic Document Construction*.**** > > ** ** > > This is basically equivalent to the 1.2 multiplier used by most existing > HTML browsers.**** > > ** ** > > Should we be considered about potentially breaking interoperability with > existing presentation processors? Since our existing TTML test suite does > not include reference image output, this change wouldn't alter test results > (as presently written). This change would also improve compatibility with > TTML and author expectations based on their use of line-height in HTML and > XSL-FO.**** > > ** ** > > ** ** > > ** ** > > ** ** > > On Fri, Aug 23, 2013 at 10:48 AM, Glenn Adams <glenn@skynav.com> wrote: > > **** > > ** ** > > On Fri, Aug 23, 2013 at 10:44 AM, Glenn Adams <glenn@skynav.com> wrote: > > **** > > ** ** > > On Fri, Aug 23, 2013 at 8:01 AM, Andreas Tai <tai@irt.de> wrote: > > **** > > Thanks for the detailed walk through! It continues the discussion we had > in a thread before [1]. > > To be clear that I got it right about the default value of line-height: If > the computed line-height is the same as the largest font-size of a > descendent and we assume the font-size of a p block is 14px for all > descendant elements, than the computed line height is 14px. If we assume > that the sum of the computed values of the text-altitude and text-depth > properties is not less than 14px than the leading is 0 or negative. Is this > correct?**** > > ** ** > > Since we don't expose the XSL-FO text-{altitude,depth} properties, then > they will be determined according to font metrics, and it is a standard > assumption that their sum is the same as the EM cell height, namely, the > font size.**** > > ** ** > > So in your example, if the font size for the block itself and its > descendants are 14px and the line height on the block is 14px, then leading > is zero, and the line heigh of individual lines will be 14px as well.**** > > **** > > > If this is the case the default value for line-height would generate a > representation that is not very accessible.**** > > ** ** > > I guess you mean "not very readable".**** > > **** > > > I am not sure how much we can take the font-size/line-height dependency in > CSS as reference but at least here a two-line subtitle would not be very > readable if font-size and line-height have the same value (see > http://jsfiddle.net/tairt/YdsWd/).**** > > ** ** > > There are two options: you as an author can specify something else for > line height, say 120%. Or we can change the spec to say something else, > such as resolve 'normal' to 120% of the maximum descendant font size.**** > > ** ** > > That last part should better read as "resolve 'normal' to 120% of the > maximum of the current element and its descendants' font size".**** > > **** > > **** > > > Best regards, > > Andreas > > 1] http://lists.w3.org/Archives/Public/public-tt/2013Jul/0090.html<http://lists.w3.org/Archives/Public/public-tt/2013Jul/0090.html> > **** > > > > -------- Original-Nachricht -------- **** > > *Betreff: * > > Re: lineHeight**** > > *Weitersenden-Datum: * > > Fri, 23 Aug 2013 02:55:03 +0000**** > > *Weitersenden-Von: * > > public-tt@w3.org**** > > *Datum: * > > Thu, 22 Aug 2013 20:54:09 -0600**** > > *Von: * > > Glenn Adams <glenn@skynav.com> <glenn@skynav.com>**** > > *An: * > > Michael Dolan <mdolan@newtbt.com> <mdolan@newtbt.com>**** > > *Kopie (CC): * > > TTWG <public-tt@w3.org> <public-tt@w3.org>**** > > ** ** > > Thanks for asking, as this is a complex area of functionality when having > to wade through the more general models of both XSL-FO and CSS. See inline > below for clarifications and answers, and at the end some additional useful > information. **** > > ** ** > > On Thu, Aug 22, 2013 at 4:55 PM, Michael Dolan <mdolan@newtbt.com> wrote:* > *** > > Glenn and all-**** > > **** > > A cursory reading of TTML suggests lineHeight=fontSize. But digging > deeper into XSL, one might reach different conclusions in red (also marked > “CONCLUSION”).**** > > **** > > [TTML 8.2.12]:**** > > tts:lineHeight**** > > If the value of this attribute is normal, then the initial value of the > style property must be considered to be the same as the largest font sizethat applies to any descendant element. > **** > > ….**** > > The semantics of the style property represented by this attribute are > based upon that defined by [XSL 1.1], § 7.16.4. **** > > ** ** > > First, we should quote the current TTML1 ED text, which was updated on > July 12th [1] and 16th [2] to read as follows:**** > > ** ** > > "If the value of this attribute is normal, then the computed value of the > style property must be considered to be the same as the largest font size > that applies to any descendant element in the intermediate synchronic > document as determined by *9.3.2 Intermediate Synchronic Document > Construction*<https://dvcs.w3.org/hg/ttml/raw-file/default/ttml1/spec/ttml1.html#semantics-region-layout-step-1> > ."**** > > ** ** > > [1] https://dvcs.w3.org/hg/ttml/rev/00a9b799895d**** > > [2] https://dvcs.w3.org/hg/ttml/rev/0355e9473d7e**** > > ** ** > > This text, about the "largest font size", is intended to correspond to the > following language in:**** > > ** ** > > XSL-FO [3]:**** > > ** ** > > "When an element contains text that is rendered in more than one font, > user agents should determine the "line-height" value according to the > largest font size."**** > > ** ** > > [3] http://www.w3.org/TR/2006/REC-xsl11-20061205/#line-height**** > > ** ** > > and CSS2.1 10.8.1 [4]:**** > > ** ** > > "When an element contains text that is rendered in more than one font, > user agents may determine the 'normal' 'line-height'<http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height> value > according to the largest font size."**** > > ** ** > > [4] http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height**** > > ** ** > > Note that these two citations are identical except that CSS2.1 added > 'normal', while XSL-FO, which quotes CSS2, didn't make it explicit that > this sentence was to be scoped by interpretation of what 'normal' means.** > ** > > ** ** > > Note also the two changes [1][2] we made in TTML1 since PER:**** > > - correct "initial value" to read "computed value";**** > - clarify that "descendant element" refers to descendants in the > intermediate synchronic document, and not the source document;**** > > In other words, this changed language is about determining what the > computed value of 'normal' means, and which descendants apply in making > that determination. For example, one may have read the prior language as > including the font size of descendant elements that are not temporally > active or are selected into a different region, both of which should not > apply when resolving the computed value for 'normal'.**** > > ** ** > > [XSL 7.16.4]: **** > > Normal: Tells user agents to set the computed value to a "reasonable" > value based on the font size of the element. The value has the same meaning > as <number>. We recommend a computed value for "normal" between 1.0 to 1.2. > **** > > <length>: The box height is set to this length.**** > > **** > > CONCLUSION: Therefore as TTML states that a value of "normal" "must be > considered to be the same as the largest font size", I assume that the XSL > 7.16.4 definition that is in effect is "<length>" with the value of the > largest font size.**** > > Correct. For example, if one has:**** > > ** ** > > <p id="p1" tts:fontSize="12pt" tts:lineHeight="normal">**** > > <span tts:fontSize="10pt">FOO</span>**** > > <span tts:fontSize="12pt">BAR</span>**** > > <span tts:fontSize="14pt">BAZ</span>**** > > </p>**** > > ** ** > > Then the resolved computed value of tts:lineHeight on the paragraph p1 is > "14pt". In other words, we could have specified the equivalent with:**** > > ** ** > > <p id="p1" tts:fontSize="12pt" tts:lineHeight="14pt">...</p>**** > > ** ** > > On the other hand, if this content mapped were selected into two regions, > such as:**** > > ** ** > > <p tts:fontSize="12pt" tts:lineHeight="normal">**** > > <span region="r1" tts:fontSize="10pt">FOO</span>**** > > <span region="r1" tts:fontSize="12pt">BAR</span>**** > > <span region="r2" tts:fontSize="14pt">BAZ</span>**** > > </p>**** > > ** ** > > Then the computed line height that applies to p1 in region r1 would be > 12pt, but in region r2 would be 14pt.**** > > ** ** > > **** > > [TTML 8.2.12] continued:**** > > Furthermore, it is the intention of this specification that the allocation > rectangle of a line be consistent with the per-inline-height-rectangle as > defined by [XSL 1.1], § 4.5, i.e., that a CSS-style line box stacking > strategy be used.**** > > Here's where things get complex to interpret (particularly when trying to > decode the language in XSL-FO). However, before we do that, let's take note > of some simplifying factors that hold in TTML than apply to XSL-FO and CSS: > **** > > ** ** > > In particular, in TTML1 (though perhaps not TTML2 when we introduce > images):**** > > - tts:lineHeight only applies to the paragraph element p, and does not > apply to span or br;**** > - all inline children of p are non-replaceable (text) elements; i.e., > there are no replaceable elements like <img/> [if some profile introduces > replaceable elements in a superset extension, then this simplifying > assumption may not hold];**** > > In general, in both XSL-FO and CSS, these assumptions don't hold, so the > descriptive text in XSL-FO is more complex to interpret.**** > > ** ** > > Before I attempt to explain the XSL-FO text, I will summarize the three > line stacking strategies defined there:**** > > ** ** > > *font-height***** > > ** ** > > Produces constant distance between the baselines of adjacent line areas. > The height of a line area's allocation rectangle is the height of the * > nominal-requested-line-rectangle*, which is the sum of the altitude and > the depth, i.e., font size, of the font that applies to the containing > block element (ignoring altitude and depth of the fonts that apply to the > line area's child areas).**** > > ** ** > > Line areas of a block are stacked (in the block progression dimension) so > that the distance between baselines are constant and equal to the computed > value of the line height property of the containing block element. This is > accomplished by (1) computing the half-leading trait of a block area as > half the difference between the computed value of the line-height property > and the sum of the computed values of the text-altitude and text-depth > properties, then (2) assigning this half-leading to the space-before and > space-after traits of each line area generated by the block.**** > > ** ** > > Note that half-leading is negative if line-height is less than altitude > plus depth (font size), in which case line area rectangles will overlap.** > ** > > ** ** > > *max-height***** > > ** ** > > Produces constant distance between the adjacent edges of consecutive line > areas, i.e., between the after edge of line N and the before edge of line > N+1. The height of a line area's allocation rectangle is the height of the > *maximum-line-rectangle*, which is the greater of (a) the height of the > nominal-requested-line-rectangle described above and (b) the sum of the > maximum altitude and maximum depth of the *allocation rectangles* of the > line area's child inline areas.**** > > ** ** > > If no child inline area has an altitude (distance above baseline) greater > than the altitude of the containing block's font and no child inline area > has a depth (distance below baseline) greater than the depth of the > containing block's font, then the result will be identical to the * > font-height* strategy.**** > > ** ** > > Note that the *allocation rectangle* of an inline area generated by an > element comes in two flavors [5]:**** > > - normal-allocation-rectangle**** > - large-allocation-rectangle**** > > In general, non-replaceable elements, e.g., text, generate normal > allocation rectangles, while replaceable elements, e.g., images, generate > large-allocation-rectangles. The former "normal" variety *does not*include padding and border when computing its height, while the latter > "large" variety *does* include padding and border.**** > > ** ** > > [5] http://www.w3.org/TR/2006/REC-xsl11-20061205/#area-geo**** > > ** ** > > Note further, and importantly (for what follows), that this strategy does > not take into account (a) a different line height property of any > non-replaceable child element and (b) the space (margin) before (top) and > after (bottom) properties of any replaceable child element.**** > > ** ** > > Half-leading computation and usage follows the same rules described above > for the font-height strategy, meaning that half-leading may be negative, > and thus cause line area rectangle overlap.**** > > ** ** > > *line-height***** > > ** ** > > Effectively the same as the max-height strategy, except that (a) > half-leading is computed on a per-line basis, (b) the half-leading of > non-replaceable child inline elements is applied (rather than ignored), and > (c) the margin (space) in the block progression dimension of replaceable > child inline elements is applied (rather than ignored).**** > > ** ** > > More specifically, the height of a line area's allocation rectangle is the > height of the *per-inline-height-rectangle*, which is the greater of (a) > the height of the expanded-nominal-requested-line-rectangle (see below) and > (b) the sum of the maximum altitude and maximum depth of > the expanded-rectangle (see below) of each of the line area's child inline > areas.**** > > ** ** > > The *expanded-nominal-requested-line-rectangle* is the same as the > nominal-requested-line-rectangle described above except that it is * > expanded* in the before and after directions by an amount equal to the > half leading of the containing block area. [If this half leading is > negative, it will be contracted rather than expanded.]**** > > ** ** > > The *expanded-rectangle* of an inline area child of a line area is the > same as its allocation-rectangle described (under max-height strategy) > above except that it is *expanded* in the before and after directions by > either (1) an amount equal to the half leading of the inline area, if > generated by a non-replaceable element, or (2) amounts equal to the > margin-{top,bottom} (or space-{before,after}), respectively, of the inline > area, if generated by a replaceable element.**** > > ** ** > > Because the half-leading of the containing block is already taken into > account by the expanded-nominal-requested-line-rectangle, the space-before > and space-after traits of each line area are set to zero.**** > > ** ** > > This strategy corresponds to the line stacking strategy adopted by CSS, > and is adopted by TTML, Section 9.3.3, step (5), when mapping intermediate > synchronic documents to XSL-FO [6].**** > > ** ** > > [6] > https://dvcs.w3.org/hg/ttml/raw-file/default/ttml1/spec/ttml1.html#semantics-region-layout-step-2 > **** > > ** ** > > As mentioned above, however, TTML1 does not presently apply line-height to > inline elements (span or br), and thus the half-leading of each inline > element is zero, and does not support a replaceable element type. *Consequently, > the line-height strategy, when applied to TTML1, produces equivalent > results as produced by the max-height strategy.* That is, each > per-inline-height-rectangle is the same height as the equivalent > maximum-line-rectangle to which half-leading (of the block) has been added > (instead of applying this half-leading to the space-{before,after} of the > line area).**** > > ** ** > > So, with TTML1, this produces line areas that abut one another in the > block progression dimension, but whose height includes half leading both > before and after, as contrasted with max-height, where line areas don't > abut but rather use space before and after on line areas to represent half > leading.**** > > ** ** > > **** > > [XSL 4.5]**** > > The per-inline-height-rectangle for a line-area is the rectangle whose > start-edge and end-edge are parallel to and coincident with the start-edge > and end-edge of the nominal-requested-line-rectangle, and whose extent in > the block-progression-dimension is determined as follows.**** > > ….**** > > The extent of the per-inline-height-rectangle in the > block-progression-direction is then defined to be the minimum required to > enclose both the expanded-nominal-requested-line-rectangle and the > expanded-rectangles of all the inline-areas stacked within the line-area; > this may vary depending on the descendants of the line-area.**** > > ….**** > > The expanded-rectangle of an inline-area is the rectangle with start-edge > and end-edge coincident with those of its allocation-rectangle, and whose > before-edge and after-edge are outside those of its allocation-rectangle > by a distance equal to either (a.) the half-leading, when the area's > allocation-rectangle is specified to be the normal-allocation-rectangle by > the description of the generating formatting object , or (b.) the > space-before and space after (respectively), when the area's > allocation-rectangle is specified to be the large-allocation-rectangle. ** > ** > > …..**** > > The expanded-nominal-requested-line-rectangle is the rectangle with > start-edge and end-edge coincident with those of the > nominal-requested-line-rectangle, and whose before-edge and after-edge are > outside those of the nominal-requested-line-rectangle by a distance equal > to the half-leading.**** > > ……**** > > The nominal-requested-line-rectangle for a line-area is the rectangle > whose start-edge is parallel to the start-edge of the content-rectangle of > the nearest ancestor reference-area and offset from it by the sum of the > start-indent and the start-intrusion-adjustment of the line area, whose > end-edge is parallel to the end-edge of the content-rectangle of the > nearest ancestor reference-area and offset from it by the sum of the > end-indent and the end-intrusion-adjustment of the line area, whose > before-edge is separated from the baseline-start-point by the > text-altitude of the parent block-area, and whose after-edge is separated > from the baseline-start-point by the text-depth of the parent block-area. > It has the same block-progression-dimension for each line-area child of a > block-area.**** > > …**** > > [XSL 6.5.2]**** > > The .minimum, .optimum, and .maximum components of the half-leading trait > are set to 1/2 the difference of the computed value of the line-height property > and the computed value of the sum of the text-altitude and text-depth > properties. The .precedence and .conditionality components are copied from > the line-height property.**** > > **** > > CONCLUSION: Therefore lineHeight for each line of text in a TTML document > is given by: largest fontSize on the line + half leading == 1.5 * largest > fontSize**** > > First, we must distinguish between the height of a line area and the > computed value of the lineHeight property on an element. Here, you use the > term "lineHeight", so I'm not sure to which of these you are referring.*** > * > > ** ** > > As I indicated above, the computed value of the 'normal' lineHeight > property value is derived from the maximum font size over the entire set of > descendants of a paragraph element (in a particular intermediate synchronic > document). Or, if the lineHeight property is specified as a length, then > that is resolved as usual (without reference to any descendant element's > font size).**** > > ** ** > > Once the computed lineHeight value is resolved, now you can compute half > leading and then derive individual line area rectangle heights according to > the line stacking strategy rules.**** > > ** ** > > So, if I were to state the correct conclusion, it would read:**** > > ** ** > > *CONCLUSION: In TTML1, the height of a line area rectangle generated by a > paragraph (<p/>) element is the greater of (a) the computed value of the > lineHeight property that applies to the paragraph and (b) the sum of the > maximum altitude and maximum depth of each font that applies to the line > area's child inline areas.***** > > ** ** > > For those that wish to delve even deeper, I'd suggest reading:**** > > ** ** > > [7] https://lists.w3.org/Archives/Member/w3c-xsl-fo-sg/2000Nov/0027.html(Member Only) > **** > > [8] http://meyerweb.com/eric/css/inline-format.html**** > > ** ** > > Regarding [7], I'll check with the author to see if he minds me resending > his message to this public list.**** > > ** ** > > G.**** > > ** ** > > -- **** > > ------------------------------------------------**** > > Andreas Tai**** > > Production Systems Television IRT - Institut fuer Rundfunktechnik GmbH**** > > R&D Institute of ARD, ZDF, DRadio, ORF and SRG/SSR**** > > Floriansmuehlstrasse 60, D-80939 Munich, Germany**** > > ** ** > > Phone: +49 89 32399-389 | Fax: +49 89 32399-200**** > > http: www.irt.de | Email: tai@irt.de**** > > ------------------------------------------------**** > > ** ** > > registration court& managing director:**** > > Munich Commercial, RegNo. B 5191**** > > Dr. Klaus Illgner-Fehns**** > > ------------------------------------------------**** > > ** ** > > ** ** > > ** ** > > ** ** > > ** ** > > ** ** >
Received on Monday, 26 August 2013 19:07:07 UTC