Repository: PowerToys
Issue: PowerAccent: "All" list and combinational marks
Labels: Needs-Triage,Product-Quick Accent

### Description of the new feature / enhancement

This is a meta issue, mentioned in #24818.

### The "All" list

- People are adding more and more characters to the "All" list, so we should decide on the rules to maintain the list:
  - The criterion for adding characters to it: which can be added and which shouldn't?
  - The maximum characters to be added for a key (or it will be too many)
  - What should we do if it exceeds that limit? How do we decide which characters to drop?
- We should probably sort the characters for each key instead of just appending new ones.
  - Should we sort them by Unicode or by some other order?

### Combinational marks

Combinational marks are characters that combines to other letters, e.g. e (U+0065) followed by ◌́ (U+0301, combining acute accent) is displayed as é. (The dotted circle is just a placeholder) See this example on [Wikipedia](https://en.wikipedia.org/wiki/Unicode_equivalence#Example).

Unicode defines that these sequences are canonically equivalent to single characters, i.e. é (U+00E9). This can be achieved by converting strings to a normal form using NFC process. See [this article](https://www.tothenew.com/blog/normalization-forms-for-accented-characters-in-java/) and [Wikipedia](https://en.wikipedia.org/wiki/Unicode_equivalence) for more details. Some converters can be found on [DenCode](https://dencode.com/string/unicode-normalization) or [Minaret](https://minaret.info/test/normalize.msp).

Here are the issues to discuss:

- Obviously, we should do canonical composition as single characters are more compatible.

  - Some contributors accidentally add marked sequences, which may cause confusion.
  - Canonical composition: e+◌́ (U+0065, U+0301) → é (U+00E9)
  - Currently already done in #24818

- Some sequences don't have a corresponding single character. Should we allow them?

  - For example, single-storey latin letter alpha ɑ followed by acute mark is ɑ́. This is a stylized version of á seen in Chinese Pinyin. It does not have a corresponding single character. However, it is indeed equivalent to á and most of the time á is used. Considering that "◌́" is already added for <kbd>2</kbd>, I suggest dropping these marked ɑ sequences from <kbd>a</kbd> and let the specific users type <kbd>a</kbd> then <kbd>2</kbd> to get ɑ́.

- We probably want to force combinational marks to be escaped (`\uXXXX`) in source code.

  - These characters combine to previous character so they might cause confusion. They can be found in Chinese Pinyin and Hebrew sections.
  - Currently already done in #24818


  - By checking their Unicode property we can determine if they are mark characters. See [Wikipedia](https://en.wikipedia.org/wiki/Unicode_character_property#General_Category) and [Compart](https://www.compart.com/en/unicode/category). Example Python code:

    ```python
    import unicodedata
    
    if unicodedata.category(char)[0] == 'M':
        result = rf'\u{ord(char):04x}'
    ```

### Automatic test

These issues can be automatically tested by script, so rules can be automatically enforced by CI test.


### Scenario when this would be used?

N/A

### Supporting information

_No response_