Skip to content

Ordered lists ignore the start number of the first item #524

Description

@yyq1025

Before submitting a new issue

  • I tested using the latest version of the library, as the bug might be already fixed. (reproduces on 0.7.3 and on current main @ e60a65a)
  • I tested using a supported version of react native. (0.86.0 — the repo's own example app)
  • I checked for possible duplicate issues, with possible answers.

Bug summary

Per CommonMark/GFM, the start number of an ordered list is determined by the list number of its first item — 3. foo should render as 3, 4, 5 (see https://spec.commonmark.org/0.31.2/#start-number). md4c already reports this via MD_BLOCK_OL_DETAIL.start, but the shared parser (packages/core/cpp/parser/MD4CParser.cpp) drops it, so both the iOS and Android renderers restart every ordered list at 1. The same markdown renders starting at 3 on GitHub:

  1. Add eggs and vanilla extract
  2. Pour into a greased tin
  3. Bake for 30 minutes

I have a fix ready and can open a PR right away: the parser passes start through as a node attribute (set only when != 1), both renderers seed their item counters from it, plus a Maestro e2e flow with iOS/Android screenshot baselines. Scope note: the standalone android-enriched-markdown package is intentionally untouched — its renderer ignores the new attribute, so behavior there is unchanged; happy to mirror the fix in a follow-up if useful.

Library version

0.7.3

Environment info

info Fetching system and libraries information...
System:
  OS: macOS 26.5.2
  CPU: (8) arm64 Apple M2
  Memory: 548.41 MB / 24.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 24.15.0
    path: /opt/homebrew/opt/node@24/bin/node
  Yarn:
    version: 4.11.0
    path: /opt/homebrew/opt/node@24/bin/yarn
  npm:
    version: 11.12.1
    path: /opt/homebrew/opt/node@24/bin/npm
  Watchman:
    version: 2025.05.19.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 25.5
      - iOS 26.5
      - macOS 26.5
      - tvOS 26.5
      - visionOS 26.5
      - watchOS 26.5
  Android SDK:
    API Levels:
      - "33"
      - "34"
      - "35"
      - "36"
    Build Tools:
      - 34.0.0
      - 35.0.0
      - 36.0.0
    System Images:
      - android-35 | Google Play ARM 64 v8a
      - android-36 | Google Play ARM 64 v8a
    Android NDK: Not Found
IDEs:
  Android Studio: 2025.2 AI-252.25557.131.2521.14432022
  Xcode:
    version: 26.5/17F42
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.12
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.1.0
    wanted: 20.1.0
  react:
    installed: 19.2.3
    wanted: 19.2.3
  react-native:
    installed: 0.86.0
    wanted: 0.86.0
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: true
  newArchEnabled: true

Steps to reproduce

  1. yarn && yarn react-native-example ios
  2. Open Playground, tap Set Markdown, paste:
    3. Add eggs and vanilla extract
    4. Pour into a greased tin
    5. Bake for 30 minutes
    
  3. Expected: numbering starts at 3 (GitHub parity). Actual: numbering starts at 1.

Reproducible example repository

https://github.com/yyq1025/react-native-enriched-markdown

(unmodified fork of this repo — the bug reproduces in the bundled example app with the steps above)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions