UNPKG

2.78 kBJavaScriptView Raw
1import { format } from '../../utils/string';
2import { isString } from '../../utils/is';
3import { factory } from '../../utils/factory';
4var name = 'print';
5var dependencies = ['typed'];
6export var createPrint =
7/* #__PURE__ */
8factory(name, dependencies, function (_ref) {
9 var typed = _ref.typed;
10
11 /**
12 * Interpolate values into a string template.
13 *
14 * Syntax:
15 *
16 * math.print(template, values)
17 * math.print(template, values, precision)
18 * math.print(template, values, options)
19 *
20 * Example usage:
21 *
22 * // the following outputs: 'Lucy is 5 years old'
23 * math.print('Lucy is $age years old', {age: 5})
24 *
25 * // the following outputs: 'The value of pi is 3.141592654'
26 * math.print('The value of pi is $pi', {pi: math.pi}, 10)
27 *
28 * // the following outputs: 'hello Mary! The date is 2013-03-23'
29 * math.print('Hello $user.name! The date is $date', {
30 * user: {
31 * name: 'Mary',
32 * },
33 * date: new Date(2013, 2, 23).toISOString().substring(0, 10)
34 * })
35 *
36 * // the following outputs: 'My favorite fruits are apples and bananas !'
37 * math.print('My favorite fruits are $0 and $1 !', [
38 * 'apples',
39 * 'bananas'
40 * ])
41 *
42 * See also:
43 *
44 * format
45 *
46 * @param {string} template A string containing variable placeholders.
47 * @param {Object | Array | Matrix} values An object or array containing variables
48 * which will be filled in in the template.
49 * @param {number | Object} [options] Formatting options,
50 * or the number of digits to format numbers.
51 * See function math.format for a description
52 * of all options.
53 * @return {string} Interpolated string
54 */
55 return typed(name, {
56 // note: Matrix will be converted automatically to an Array
57 'string, Object | Array': _print,
58 'string, Object | Array, number | Object': _print
59 });
60});
61/**
62 * Interpolate values into a string template.
63 * @param {string} template
64 * @param {Object} values
65 * @param {number | Object} [options]
66 * @returns {string} Interpolated string
67 * @private
68 */
69
70function _print(template, values, options) {
71 return template.replace(/\$([\w.]+)/g, function (original, key) {
72 var keys = key.split('.');
73 var value = values[keys.shift()];
74
75 while (keys.length && value !== undefined) {
76 var k = keys.shift();
77 value = k ? value[k] : value + '.';
78 }
79
80 if (value !== undefined) {
81 if (!isString(value)) {
82 return format(value, options);
83 } else {
84 return value;
85 }
86 }
87
88 return original;
89 });
90}
\No newline at end of file