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

Offen
#807 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
65/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust

Rechercherichtung

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.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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

Vorherrschende Sprache
Rust
Sterne
131
Forks
97
Ø Merge
22 Std. 13 Min.
Gemergte PRs (30 T.)
87

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus daisy/MathCAT

Alle Issues in daisy/MathCAT

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.