Accessibility/TextAttributes: Difference between revisions

no edit summary
No edit summary
 
(44 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<small>[[Accessibility |<< Back to Accessibility Home Page]]</small>
<small>[[Accessibility |<< Back to Accessibility Home Page]]</small>


= Introduction =
Text attributes are now implemented in Firefox 3.1


This article is targeted to reflect a support of text attributes by Gecko accessibility API. There is no implementation in Gecko yet. This is a draft of specification how we will do it.
This document has been superseded by the official [https://developer.mozilla.org/en/Accessibility/AT-APIs/Gecko/TextAttrs/ text attribute developer docs].


= Proposed API =
The original text attribute proposal is available in the [https://wiki.mozilla.org/index.php?title=Accessibility/TextAttributes&action=history history for this page].
 
== Summary ==
 
This is the internal nsIAccessibleText method (not the ATK or IA2 method -- the implementation for those will consume this method).
 
The following method returns a collection of text attributes at the given offset, and calculates the range where returned attributes are stretched.
 
  nsIPersistentProperties getTextAttributes(in long offset,
                                            out long rangeStartOffset,
                                            out long rangeEndOffset);
 
== Parameters ==
 
; offset
: [in] the given offset
 
; rangeStartOffset
: [out] the start offset of the result range
 
; rangeEndOffset
: [out] the end offset of the result range
 
== Return Value ==
 
A collection of text attributes (the list of pairs consisted from name and value).
 
== Questions ==
 
* Range questions
** What is the range hierarchy: are range nested or consecutive? Let we have a text 'abc<b>def</b>ghi'. If ranges are nested then we have two ranges: (0,9) and (3,6). If ranges are consecutive then we have three ranges (0, 3), (3, 6) and (6, 9).
** Should text attributes in a range be either relative to a parent (in the case of nested ranges) or previous (in the case of consecutive ranges) range or cumulative?
 
* Default attributes
** Should we support default attributes? IA2 hasn't their support. We could do it through an object attribute, if we really need it.
 
= Events =
 
== Summary ==
 
When a certain text attribute is changed then 'EVENT_TEXT_ATTRIBUTE_CHANGED' event should be fired.
 
== Questions ==
 
* How will AT know what attribute has been changed? Should the getTextAttributes() method return only last changed attribute?
* It's not clear how to track CSS style changes mapped to text attributes. Possibly some of those changes will lead accessible is recreated.
* Are more events other than changes to whether an item is misspelled even useful?
 
= List of supported attributes =
 
== Gecko specific ==
 
{| summary="Gecko Specific Text Attributes" width="90%" border="1" cellspacing="1" cellpadding="1"
! Attribute name
! Attribute description
! Default value if attribute not exposed
|-
| direction
| rtl or ltr for bidi text
| ltr
|-
| border
| not sure how best to expose these properties, or whether to (same with outline CSS property)
| no border
|-
| language
| What language is this text in, e.g. en-US (do we want this or do we use IA2::locale and make sure each locale change gets separate accessible object?)
| same as doc itself?
|-
| misspelled
| "true" if it is marked by the inline spell checker for being incorrectly spelled. Attribute not present in all other cases.
| Not misspelled
|-
| static
| "true" for list bullet/numbering text or layout-inserted text (such as via CSS pseudo styles :before or :after)
| false
|-
| z-index
| a number which indicates how low/high an element is
| 0 (normal height)
|}
 
== Linux Foundation Proposed (ATK + IA2) ==
 
Note: the following characters in names and values need to be escaped with a backslash: backslash, colon, comma, equals, and semicolon.
 
Question: for items with a default value, should we always just leave that attribute blank when the default value is used? For example, should we expose atext attribute for font-style=normal or text-align=left?
 
{| summary="Proposed Text Attributes" width="90%" border="1" cellspacing="1" cellpadding="1"
! Attribute name
! Attribute description
! Default value if attribute not exposed
|-
| background-color
| Background color as u, u, u
| no default, always specified?
|-
| color
| Foreground color as u, u, u
| no default, always specified?
|-
| font-family
| The computed font name
| no default, always specified?
|-
| font-size
| Font size in pixels
| no default, always specified?
|-
| font-style
| italic (oblique not currently supported)
| normal
|-
| font-weight
| The computed font weight (100, 200, 300, 400, 500, 600, 700, 800, 900; normal = 400, bold = 700)
| 400
|-
| text-line-through-style
| solid (only exposed if if there is a line through)
| no line through
|-
| text-underline-style
| solid (only exposed if if there is an underline)
| no underline
|-
| line-height
| [http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-line-height CSS2] (Too vague? Wouldn't it be better to only provide one unit ever?)
| no default, always specified?
|-
| margin-bottom
| [http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-bottom CSS2] (Too vague? Wouldn't it be better to only provide one unit ever?)
| no default, always specified?
|-
| margin-left
| [http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-left CSS2] (Too vague? Wouldn't it be better to only provide one unit ever?)
| no default, always specified?
|-
| margin-right
| [http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-right CSS2] (Too vague? Wouldn't it be better to only provide one unit ever?)
| no default, always specified?
|-
| text-align
| left/center/right/justify
| left
|-
| text-indent
| [http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-indent CSS2] (Too vague? Wouldn't it be better to only provide one unit ever?)
| no indent
|-
| text-position (for sup/sub)
| ?
| ?
|}
 
== Currently unsupported ==
 
The following text attributes, which are in the [http://www.linux-foundation.org/en/Accessibility/IAccessible2/TextAttributes IAccessible2 text attribute specification], are not currently supported due to today's limitations of text formatting on the web:
 
* text-line-through-mode
* text-line-through-type
* text-underline-type
* text-underline-width
* text-underline-mode
* list -- the list bullet text is exposed via the accessible text interface, with the text attribute static=true
* tab-stop
* text-shadow
 
= References =
 
* [http://www.linux-foundation.org/en/Accessibility/IAccessible2/TextAttributes IA2 Text Attributes] - IAccessible2 Text Attributes Documentation
346

edits