зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1001641 - Provide equivalent support for MathML as WebKit for NSAccessibility. r=surkov
--HG-- extra : rebase_source : 916ae6144d149ed4b455ce46faa00ac5ed27f6db
This commit is contained in:
Родитель
5c454a43e7
Коммит
be7af2fb7f
|
@ -124,6 +124,9 @@ static const uintptr_t IS_PROXY = 1;
|
|||
- (void)valueDidChange;
|
||||
- (void)selectedTextDidChange;
|
||||
|
||||
// internal method to retrieve a child at a given index.
|
||||
- (id)childAt:(uint32_t)i;
|
||||
|
||||
#pragma mark -
|
||||
|
||||
// invalidates and removes all our children from our cached array.
|
||||
|
|
|
@ -27,6 +27,23 @@
|
|||
using namespace mozilla;
|
||||
using namespace mozilla::a11y;
|
||||
|
||||
#define NSAccessibilityMathRootRadicandAttribute @"AXMathRootRadicand"
|
||||
#define NSAccessibilityMathRootIndexAttribute @"AXMathRootIndex"
|
||||
#define NSAccessibilityMathFractionNumeratorAttribute @"AXMathFractionNumerator"
|
||||
#define NSAccessibilityMathFractionDenominatorAttribute @"AXMathFractionDenominator"
|
||||
#define NSAccessibilityMathBaseAttribute @"AXMathBase"
|
||||
#define NSAccessibilityMathSubscriptAttribute @"AXMathSubscript"
|
||||
#define NSAccessibilityMathSuperscriptAttribute @"AXMathSuperscript"
|
||||
#define NSAccessibilityMathUnderAttribute @"AXMathUnder"
|
||||
#define NSAccessibilityMathOverAttribute @"AXMathOver"
|
||||
// XXX WebKit also defines the following attributes.
|
||||
// See bugs 1176970, 1176973 and 1176983.
|
||||
// - NSAccessibilityMathFencedOpenAttribute @"AXMathFencedOpen"
|
||||
// - NSAccessibilityMathFencedCloseAttribute @"AXMathFencedClose"
|
||||
// - NSAccessibilityMathLineThicknessAttribute @"AXMathLineThickness"
|
||||
// - NSAccessibilityMathPrescriptsAttribute @"AXMathPrescripts"
|
||||
// - NSAccessibilityMathPostscriptsAttribute @"AXMathPostscripts"
|
||||
|
||||
// returns the passed in object if it is not ignored. if it's ignored, will return
|
||||
// the first unignored ancestor.
|
||||
static inline id
|
||||
|
@ -121,6 +138,52 @@ GetClosestInterestingAccessible(id anObject)
|
|||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NO);
|
||||
}
|
||||
|
||||
- (NSArray*)additionalAccessibilityAttributeNames
|
||||
{
|
||||
NSMutableArray* additional = [NSMutableArray array];
|
||||
switch (mRole) {
|
||||
case roles::MATHML_ROOT:
|
||||
[additional addObject:NSAccessibilityMathRootIndexAttribute];
|
||||
[additional addObject:NSAccessibilityMathRootRadicandAttribute];
|
||||
break;
|
||||
case roles::MATHML_SQUARE_ROOT:
|
||||
[additional addObject:NSAccessibilityMathRootRadicandAttribute];
|
||||
break;
|
||||
case roles::MATHML_FRACTION:
|
||||
[additional addObject:NSAccessibilityMathFractionNumeratorAttribute];
|
||||
[additional addObject:NSAccessibilityMathFractionDenominatorAttribute];
|
||||
// XXX bug 1176973
|
||||
// WebKit also defines NSAccessibilityMathLineThicknessAttribute
|
||||
break;
|
||||
case roles::MATHML_SUB:
|
||||
case roles::MATHML_SUP:
|
||||
case roles::MATHML_SUB_SUP:
|
||||
[additional addObject:NSAccessibilityMathBaseAttribute];
|
||||
[additional addObject:NSAccessibilityMathSubscriptAttribute];
|
||||
[additional addObject:NSAccessibilityMathSuperscriptAttribute];
|
||||
break;
|
||||
case roles::MATHML_UNDER:
|
||||
case roles::MATHML_OVER:
|
||||
case roles::MATHML_UNDER_OVER:
|
||||
[additional addObject:NSAccessibilityMathBaseAttribute];
|
||||
[additional addObject:NSAccessibilityMathUnderAttribute];
|
||||
[additional addObject:NSAccessibilityMathOverAttribute];
|
||||
break;
|
||||
// XXX bug 1176983
|
||||
// roles::MATHML_MULTISCRIPTS should also have the following attributes:
|
||||
// - NSAccessibilityMathPrescriptsAttribute
|
||||
// - NSAccessibilityMathPostscriptsAttribute
|
||||
// XXX bug 1176970
|
||||
// roles::MATHML_FENCED should also have the following attributes:
|
||||
// - NSAccessibilityMathFencedOpenAttribute
|
||||
// - NSAccessibilityMathFencedCloseAttribute
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return additional;
|
||||
}
|
||||
|
||||
- (NSArray*)accessibilityAttributeNames
|
||||
{
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||
|
@ -155,7 +218,27 @@ GetClosestInterestingAccessible(id anObject)
|
|||
nil];
|
||||
}
|
||||
|
||||
return generalAttributes;
|
||||
NSArray* objectAttributes = generalAttributes;
|
||||
NSArray* additionalAttributes = [self additionalAccessibilityAttributeNames];
|
||||
if ([additionalAttributes count])
|
||||
objectAttributes = [objectAttributes arrayByAddingObjectsFromArray:additionalAttributes];
|
||||
|
||||
return objectAttributes;
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||
}
|
||||
|
||||
- (id)childAt:(uint32_t)i
|
||||
{
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||
|
||||
AccessibleWrap* accWrap = [self getGeckoAccessible];
|
||||
if (accWrap) {
|
||||
Accessible* acc = accWrap->GetChildAt(i);
|
||||
return acc ? GetNativeFromGeckoAccessible(acc) : nil;
|
||||
}
|
||||
|
||||
return nil;
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||
}
|
||||
|
@ -214,6 +297,93 @@ GetClosestInterestingAccessible(id anObject)
|
|||
if ([attribute isEqualToString:NSAccessibilityHelpAttribute])
|
||||
return [self help];
|
||||
|
||||
switch (mRole) {
|
||||
case roles::MATHML_ROOT:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathRootRadicandAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathRootIndexAttribute])
|
||||
return [self childAt:1];
|
||||
break;
|
||||
case roles::MATHML_SQUARE_ROOT:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathRootRadicandAttribute])
|
||||
return [self childAt:0];
|
||||
break;
|
||||
case roles::MATHML_FRACTION:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathFractionNumeratorAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathFractionDenominatorAttribute])
|
||||
return [self childAt:1];
|
||||
// XXX bug 1176973
|
||||
// WebKit also defines NSAccessibilityMathLineThicknessAttribute
|
||||
break;
|
||||
case roles::MATHML_SUB:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSubscriptAttribute])
|
||||
return [self childAt:1];
|
||||
#ifdef DEBUG
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSuperscriptAttribute])
|
||||
return nil;
|
||||
#endif
|
||||
break;
|
||||
case roles::MATHML_SUP:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
#ifdef DEBUG
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSubscriptAttribute])
|
||||
return nil;
|
||||
#endif
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSuperscriptAttribute])
|
||||
return [self childAt:1];
|
||||
break;
|
||||
case roles::MATHML_SUB_SUP:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSubscriptAttribute])
|
||||
return [self childAt:1];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathSuperscriptAttribute])
|
||||
return [self childAt:2];
|
||||
break;
|
||||
case roles::MATHML_UNDER:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathUnderAttribute])
|
||||
return [self childAt:1];
|
||||
#ifdef DEBUG
|
||||
if ([attribute isEqualToString:NSAccessibilityMathOverAttribute])
|
||||
return nil;
|
||||
#endif
|
||||
break;
|
||||
case roles::MATHML_OVER:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
#ifdef DEBUG
|
||||
if ([attribute isEqualToString:NSAccessibilityMathUnderAttribute])
|
||||
return nil;
|
||||
#endif
|
||||
if ([attribute isEqualToString:NSAccessibilityMathOverAttribute])
|
||||
return [self childAt:1];
|
||||
break;
|
||||
case roles::MATHML_UNDER_OVER:
|
||||
if ([attribute isEqualToString:NSAccessibilityMathBaseAttribute])
|
||||
return [self childAt:0];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathUnderAttribute])
|
||||
return [self childAt:1];
|
||||
if ([attribute isEqualToString:NSAccessibilityMathOverAttribute])
|
||||
return [self childAt:2];
|
||||
break;
|
||||
// XXX bug 1176983
|
||||
// roles::MATHML_MULTISCRIPTS should also have the following attributes:
|
||||
// - NSAccessibilityMathPrescriptsAttribute
|
||||
// - NSAccessibilityMathPostscriptsAttribute
|
||||
// XXX bug 1176970
|
||||
// roles::MATHML_FENCED should also have the following attributes:
|
||||
// - NSAccessibilityMathFencedOpenAttribute
|
||||
// - NSAccessibilityMathFencedCloseAttribute
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
NSLog (@"!!! %@ can't respond to attribute %@", self, attribute);
|
||||
#endif
|
||||
|
@ -510,7 +680,8 @@ GetClosestInterestingAccessible(id anObject)
|
|||
return @"AXMathFraction";
|
||||
|
||||
case roles::MATHML_FENCED:
|
||||
// XXX This should be AXMathFence, but doing so without implementing the
|
||||
// XXX bug 1176970
|
||||
// This should be AXMathFence, but doing so without implementing the
|
||||
// whole fence interface seems to make VoiceOver crash, so we present it
|
||||
// as a row for now.
|
||||
return @"AXMathRow";
|
||||
|
@ -557,6 +728,8 @@ GetClosestInterestingAccessible(id anObject)
|
|||
// NS_MATHML_OPERATOR_SEPARATOR bits of nsOperatorFlags, but currently they
|
||||
// are only available from the MathML layout code. Hence we just fallback
|
||||
// to subrole AXMathOperator for now.
|
||||
// XXX bug 1175747 WebKit also creates anonymous operators for <mfenced>
|
||||
// which have subroles AXMathSeparatorOperator and AXMathFenceOperator.
|
||||
case roles::MATHML_OPERATOR:
|
||||
return @"AXMathOperator";
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче