Switch string formatting to the one inside gjs
https://bugzilla.gnome.org/show_bug.cgi?id=675479
This commit is contained in:
parent
a277569d31
commit
8a9e3e0df2
@ -28,7 +28,6 @@ nobase_dist_js_DATA = \
|
|||||||
misc/config.js \
|
misc/config.js \
|
||||||
misc/extensionUtils.js \
|
misc/extensionUtils.js \
|
||||||
misc/fileUtils.js \
|
misc/fileUtils.js \
|
||||||
misc/format.js \
|
|
||||||
misc/gnomeSession.js \
|
misc/gnomeSession.js \
|
||||||
misc/history.js \
|
misc/history.js \
|
||||||
misc/jsParse.js \
|
misc/jsParse.js \
|
||||||
|
@ -6,11 +6,11 @@ const GObject = imports.gi.GObject;
|
|||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
|
const Format = imports.format;
|
||||||
|
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const Format = imports.misc.format;
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const ShellJS = imports.gi.ShellJS;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is intended to extend the String object and provide
|
|
||||||
* an String.format API for string formatting.
|
|
||||||
* It has to be set up using String.prototype.format = Format.format;
|
|
||||||
* Usage:
|
|
||||||
* "somestring %s %d".format('hello', 5);
|
|
||||||
* It supports %s, %d, %x and %f, for %f it also support precisions like
|
|
||||||
* "%.2f".format(1.526). All specifiers can be prefixed with a minimum
|
|
||||||
* field width, e.g. "%5s".format("foo"). Unless the width is prefixed
|
|
||||||
* with '0', the formatted string will be padded with spaces.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function format() {
|
|
||||||
let str = this;
|
|
||||||
let i = 0;
|
|
||||||
let args = arguments;
|
|
||||||
|
|
||||||
return str.replace(/%(I+)?([0-9]+)?(?:\.([0-9]+))?(.)/g, function (str, flagsGroup, widthGroup, precisionGroup, genericGroup) {
|
|
||||||
|
|
||||||
if (precisionGroup != '' && genericGroup != 'f')
|
|
||||||
throw new Error("Precision can only be specified for 'f'");
|
|
||||||
|
|
||||||
let hasAlternativeIntFlag = (flagsGroup.indexOf('I') != -1);
|
|
||||||
|
|
||||||
if (hasAlternativeIntFlag && genericGroup != 'd')
|
|
||||||
throw new Error("Alternative output digits can only be specfied for 'd'");
|
|
||||||
|
|
||||||
let fillChar = (widthGroup[0] == '0') ? '0' : ' ';
|
|
||||||
let width = parseInt(widthGroup, 10) || 0;
|
|
||||||
|
|
||||||
function fillWidth(s, c, w) {
|
|
||||||
let fill = '';
|
|
||||||
for (let i = 0; i < w; i++)
|
|
||||||
fill += c;
|
|
||||||
return fill.substr(s.length) + s;
|
|
||||||
}
|
|
||||||
|
|
||||||
let s = '';
|
|
||||||
switch (genericGroup) {
|
|
||||||
case '%':
|
|
||||||
return '%';
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
s = args[i++].toString();
|
|
||||||
break;
|
|
||||||
case 'd':
|
|
||||||
let intV = parseInt(args[i++]);
|
|
||||||
if (hasAlternativeIntFlag)
|
|
||||||
s = ShellJS.format_int_alternative_output(intV);
|
|
||||||
else
|
|
||||||
s = intV.toString();
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
s = parseInt(args[i++]).toString(16);
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
if (precisionGroup == '')
|
|
||||||
s = parseFloat(args[i++]).toString();
|
|
||||||
else
|
|
||||||
s = parseFloat(args[i++]).toFixed(parseInt(precisionGroup));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error('Unsupported conversion character %' + genericGroup);
|
|
||||||
}
|
|
||||||
return fillWidth(s, fillChar, width);
|
|
||||||
});
|
|
||||||
}
|
|
@ -90,7 +90,7 @@ function init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OK, now things are initialized enough that we can import shell JS
|
// OK, now things are initialized enough that we can import shell JS
|
||||||
const Format = imports.misc.format;
|
const Format = imports.format;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
Tweener.init();
|
Tweener.init();
|
||||||
|
@ -79,15 +79,3 @@ shell_js_add_extension_importer (const char *target_object_script,
|
|||||||
JS_EndRequest (context);
|
JS_EndRequest (context);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_js_format_int_alternative_output:
|
|
||||||
* @intval:
|
|
||||||
*
|
|
||||||
* Returns: (transfer full):
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
shell_js_format_int_alternative_output (gint intval)
|
|
||||||
{
|
|
||||||
return g_strdup_printf ("%Id", intval);
|
|
||||||
}
|
|
||||||
|
@ -11,8 +11,6 @@ gboolean shell_js_add_extension_importer (const char *target_object_script,
|
|||||||
const char *directory,
|
const char *directory,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
gchar *shell_js_format_int_alternative_output (gint intval);
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_JS_H__ */
|
#endif /* __SHELL_JS_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user