Navigation mislabels <msubsup> children when the superscript is a prime

Abierto
#807 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
65/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust

Línea de trabajo

The issue is in the navigation labeling for msubsup with a prime superscript. Look at Rules/Intent/general.yaml for the skip-super rule handling msubsup, and Rules/Languages/en/definitions.yaml for the navigation part definitions. The fix likely involves adjusting the intent inference to preserve indexed-by structure before applying skip-super. Test with the provided MathML example using NVDA and the MathCAT addon to verify navigation roles are correct.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug discussion rules

When an <msubsup> has a prime as its superscript, Enhanced and Simple navigation appear to assign the wrong structural roles to its children.

Possibly related to #415, but this seems to involve the special handling for prime/pseudo-script superscripts rather than the ordinary <msubsup> path.

MathML

<math id="0" display="block" xmlns="http://www.w3.org/1998/Math/MathML">
    <msubsup id="1">
        <mi id="2">x</mi>
        <mi id="3">i</mi>
        <mo id="4">′</mo>
    </msubsup>
</math>

Settings

  • Language: English
  • Speech style: SimpleSpeak
  • Speech verbosity: Medium
  • Overview: False
  • Navigation verbosity: Verbose
  • Auto zoom out: True

Tested through NVDA, with the latest build of MathCAT as an addon.

Observed behaviour

Enhanced and Simple

Both modes behave identically.

  1. ZoomIn

    • land on id="2"
    • hear: "zoom in; in base; x"
  2. MoveNext

    • land on id="3"
    • hear: "move right; in superscript; i"
  3. MoveNext

    • land on id="4"
    • hear: "move right; prime"

The structural labels appear to be shifted. In the source MathML, i is the subscript, not the superscript, and ′ is the superscript.

(Character navigation behaves as expected.)

Expected behaviour

My expectation for Enhanced and Simple is that the semantic structure should preserve the indexed base, similarly to an ordinary <msubsup>, while treating the prime specially rather than as an exponent:

skip-super(indexed-by(x, i), prime)

This would give two semantic parts: the indexed expression x sub i as the base, and the prime as the superscript.

I would therefore expect approximately:

  1. ZoomIn

    • land on the generated semantic node for x sub i
    • hear: "zoom in; in base; x sub i"
  2. MoveNext

    • land on id="4"
    • hear: "move right; in superscript; prime"
  3. MoveNext

    • reach the end of the expression

Possible cause

Rules/Intent/general.yaml contains a skip-super rule for both msup and msubsup:

name: skip-super
tag: [msup, msubsup]
...
- intent:
    name: "skip-super"
    ...
    children: [x: "*"]

For this <msubsup>, that gives the skip-super intent three children:

  1. x
  2. i
  3. ′

However, NavigationParts in Rules/Languages/en/definitions.yaml defines:

"skip-super": "base; superscript",

so skip-super has navigation names for only two children.

This appears consistent with the observed behaviour:

  • child 1 (x) → base
  • child 2 (i) → superscript
  • child 3 (′) → no navigation part name

The ordinary <msubsup> inference creates an indexed-by intent around the first two children before adding the superscript.

Perhaps the msubsup version of skip-super needs to preserve the indexed-by(base, subscript) structure rather than passing all three children directly to skip-super.

(Disclosure: I asked ChatGPT for help when digging into the possible cause, so these guesses might by all means be wrong.)

Lenguaje dominante
Rust
Estrellas
130
Forks
96
Merge medio
1 d 1 h
PR fusionados (30 d)
84

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de daisy/MathCAT

Todos los issues de daisy/MathCAT

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.