Skip to content

Unilateral change to USE cluster model #3498

Description

@NorbertLindenberg

Pull request #3479 changed the regular expression for the cluster model that's at the core of the Universal Shaping Engine. There's no indication in the pull request that this was discussed with anybody outside the HarfBuzz team, and there doesn't seem to be an issue filed against the USE specification.

I find this quite problematic. We have a big problem already in not having the cluster models for most complex script specified in any meaningful way. This has led to divergent implementations, as I've documented for Khmer and Devanagari. This in turn has led to problems with incorrect encodings of strings that enable spoofing and prevent successful search, as documented in Joshua Horton et al.: Spoof-Vulnerable Rendering in Khmer Unicode Implementations (ACIS2017) and Appendix 1 of Martin Hosken: Khmer Encoding Structure.

The Universal Shaping Engine has been a big improvement in this situation, as it provides a well-defined cluster model for Brahmic scripts based on Unicode data. This makes it much clearer how text should be encoded, and much more predictable when dotted circles will be inserted. I've used the USE cluster model to implement keyboards and AAT-based fonts, have worked with Unicode script proposal authors to define and verify the cluster model for scripts that they're proposing for encoding, and have recently submitted a proposal to correct the Javanese syllable structure in the Unicode Standard based on the USE cluster model. Javanese is one of the 18 scripts affected by pull request #3479, so HarfBuzz already does not conform to the proposed syllable structure.

I would appreciate if you could back out this change. We can then try and start a discussion on whether this change is appropriate to make in the specification and all implementations. Yes, I'm aware that Microsoft appears to have abandoned the specification – that is a problem we have to get addressed in some form.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    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