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

Ouverte
#807 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
65/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.)

Langage dominant
Rust
Étoiles
130
Forks
96
Merge moyen
22 h 13 min
PR mergées (30 j)
87

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de daisy/MathCAT

Toutes les issues de daisy/MathCAT

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.