1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Format
The `Format` module is a mostly deprecated module that implements `printf()`
style formatting for GJS.
In most cases, native [template literals][template-literals] should be preferred
now, except in few situations like Gettext (See [Bug #60027][bug-60027]).
```js
const foo = 'Pi';
const bar = 1;
const baz = Math.PI;
// expected result: "Pi to 2 decimal points: 3.14"
// Native template literals
const str1 = `${foo} to ${bar*2} decimal points: ${baz.toFixed(bar*2)}`
// Format.vprintf()
const str2 = Format.vprintf('%s to %d decimal points: %.2f', [foo, bar*2, baz]);
```
#### Import
> Attention: This module is not available as an ECMAScript Module
The `Format` module is available on the global `imports` object:
```js
const Format = imports.format;
```
[template-literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
[bug-60027]: https://savannah.gnu.org/bugs/?60027
### Format.format(...args)
> Deprecated: Use [`Format.vprintf()`](#format-vprintf) instead
Type:
* Prototype Function
Parameters:
* args (`Any`) — Formatting substitutions
Returns:
* (`String`) — A new formatted string
This function was intended to extend the `String` object and provide a
`String.format` API for string formatting.
Example usage:
```js
const Format = imports.format;
// Applying format() to the string prototype.
//
// This is highly discouraged, especially in GNOME Shell extensions where other
// extensions might overwrite it. Use Format.vprintf() directly instead.
String.prototype.format = Format.format;
// Usage with String.prototype.format()
// expected result: "A formatted string"
const str = 'A %s %s'.format('formatted', 'string');
```
### Format.printf(fmt, ...args)
> Deprecated: Use [template literals][template-literals] with `print()` instead
Type:
* Static
Parameters:
* fmt (`String`) — A format template
* args (`Any`) — Formatting substitutions
Substitute the specifiers in `fmt` with `args` and print the result to `stdout`.
Example usage:
```js
// expected output: A formatted string
Format.printf('A %s %s', 'formatted', 'string');
```
### Format.vprintf(fmt, args)
> Deprecated: Prefer [template literals][template-literals] when possible
Type:
* Static
Parameters:
* fmt (`String`) — A format template
* args (`Array(Any)`) — Formatting substitutions
Returns:
* (`String`) — A new formatted string
Substitute the specifiers in `fmt` with `args` and return a new string. It
supports the `%s`, `%d`, `%x` and `%f` specifiers.
For `%f` it also supports precisions like `vprintf('%.2f', [1.526])`. All
specifiers can be prefixed with a minimum field width (e.g.
`vprintf('%5s', ['foo'])`). Unless the width is prefixed with `'0'`, the
formatted string will be padded with spaces.
Example usage:
```js
// expected result: "A formatted string"
const str = Format.vprintf('A %s %s', ['formatted', 'string']);
// Usage with Gettext
Format.vprintf(_('%d:%d'), [11, 59]);
Format.vprintf(
Gettext.ngettext('I have %d apple', 'I have %d apples', num), [num]);
```
[template-literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
|