stdlib-js / stdlib-js/stdlib

[RFC]: support for non-standard specifiers for string formatting

Aperta
#845 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Feature Needs Discussion RFC status: Blocked
Lingua principale
JavaScript
Stelle
6k
Fork
1.3k
Merge medio
1g 3h
PR unite (30g)
611

Descrizione

### Description

This RFC proposes adding support for non-standard specifiers for string formatting. Currently, `@stdlib/string/format` supports the standard `printf` specifiers as found in C. Would be convenient to be able to support additional serialization formats, such as

- complex numbers (`Complex128` and `Complex64` with precision and exponential notation formatting).
- JSON
- generic objects
- times
- percentages

Based on the current list of supported specifiers, the following could be potential extensions (although, we'd want to confirm that none of these are already present in common (non-standard) `printf` implementations):

- `Complex128`: `Z`
- `Complex64`: `z`
- `JSON`: `J`
- `object`: `O` (capital o)
- `times`: `D` or `T`
- `percentage`: `p`

The tricky extension would be times, as would be nice to support something like `YYYY-MM-DD HH:MM:SS`, but not clear how this would be done, as this extends far beyond the relative complexity of `printf` specifier modifiers. Perhaps better would be to have a dedicated time formatter similar to C's [`strptime`](https://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html) and [`strftime`](https://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html).

My recommendation is that support for non-standard specifiers be included as a package separate from `@stdlib/string/format` which, IMO, should remain a high fidelity analog of C's `printf`. Such a package can reuse `@stdlib/string/base/format-tokenize`, but implement/extend `@stdlib/string/base/format-interpolate`. The name of this extended package is TBD.

### Related Issues

None.

### Questions

No.

### Other

Prior art:

- [d3-format](https://github.com/d3/d3-format)
- [d3-time-format](https://github.com/d3/d3-time-format)
- [PEP3101](https://www.python.org/dev/peps/pep-3101/) and [Python's format mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language)

### Checklist

- [X] I have read and understood the [Code of Conduct](https://github.com/stdlib-js/stdlib/blob/develop/CODE_OF_CONDUCT.md).
- [X] Searched for existing issues and pull requests.
- [X] The issue name begins with `RFC:`.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.