mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-06 11:55:48 +00:00
format-message now curves ` and '
That way, the caller doesn’t have to use curved quotes to get diagnostics that match the text-quoting-style preferences. Suggested by Dmitry Gutov in: http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00893.html This means we no longer need %qs, so remove that format. While we’re at it, fix an unlikely bug and lessen the pressure on the garbage collector by processing the string once rather than twice in the usual case. * doc/lispref/strings.texi (Formatting Strings): * etc/NEWS: Document this. * lisp/subr.el (format-message): Remove; now done in C. * src/callint.c (Fcall_interactively): * src/editfns.c (Fmessage, Fmessage_box): Use Fformat_message instead of Finternal__text_restyle followed by Fformat. * src/doc.c (LSQM, RSQM): Remove; all uses changed to use uLSQM and uRSQM. (Fsubstitute_command_keys): Prefer AUTO_STRING to build_string when pure ASCII now suffices. Fix unlikely bug when parsing unibyte string containing non-ASCII bytes. Use inline code rather than memcpy, as it’s a tiny number of bytes. (Finternal__text_restyle): Remove; no longer used. (syms_of_doc): Don’t declare it. * src/editfns.c (Fformat): Rewrite in terms of new function ‘styled_format’. (Fformat_message): New function, moved here from subr.el. (styled_format): New function, with the old guts of Fformat, except it now optionally transliterates quotes, and it transliterates traditional grave accent and apostrophe quoting as well. Remove recently-added q flag; no longer needed or used. (syms_of_editfns): Define format-message. * src/lisp.h (uLSQM0, uLSQM1, uLSQM2, uRSQM0, uRSQM1, uRSQM2): Remove; no longer need to be global symbols. * src/xdisp.c (vadd_to_log): Use Fformat_message, not Fformat, so that callers can use `%s'. * src/image.c (image_size_error, xbm_load_image, xbm_load) (xpm_load, pbm_load, png_load_body, jpeg_load_body, tiff_load) (gif_load, imagemagick_load_image, imagemagick_load, svg_load) (svg_load_image, gs_load, x_kill_gs_process): * src/lread.c (load_warn_old_style_backquotes): * src/xfaces.c (load_pixmap): * src/xselect.c (x_clipboard_manager_error_1): Use `%s' instead of %qs in formats.
This commit is contained in:
parent
ef4c2eac6c
commit
71781c31a4
@ -816,9 +816,13 @@ if any.
|
||||
@end defun
|
||||
|
||||
@defun format-message string &rest objects
|
||||
@cindex curved quotes
|
||||
@cindex curly quotes
|
||||
This function acts like @code{format}, except it also converts any
|
||||
curved quotes in @var{string} as per the value of
|
||||
@code{text-quoting-style}. @xref{Keys in Documentation}.
|
||||
curved single quotes in @var{string} as per the value of
|
||||
@code{text-quoting-style}, and treats grave accent (@t{`}) and
|
||||
apostrophe (@t{'}) as if they were curved single quotes. @xref{Keys
|
||||
in Documentation}.
|
||||
@end defun
|
||||
|
||||
@cindex @samp{%} in format
|
||||
@ -919,20 +923,23 @@ specification is unusual in that it does not use a value. For example,
|
||||
Any other format character results in an @samp{Invalid format
|
||||
operation} error.
|
||||
|
||||
Here are several examples:
|
||||
Here are several examples, which assume the typical
|
||||
@code{text-quoting-style} settings:
|
||||
|
||||
@example
|
||||
@group
|
||||
(format "The name of this buffer is %s." (buffer-name))
|
||||
@result{} "The name of this buffer is strings.texi."
|
||||
|
||||
(format "The buffer object prints as %qs." (current-buffer))
|
||||
@result{} "The buffer object prints as ‘strings.texi’."
|
||||
|
||||
(format "The octal value of %d is %o,
|
||||
and the hex value is %x." 18 18 18)
|
||||
@result{} "The octal value of 18 is 22,
|
||||
and the hex value is 12."
|
||||
|
||||
(format-message
|
||||
"The name of this buffer is ‘%s’." (buffer-name))
|
||||
@result{} "The name of this buffer is ‘strings.texi’."
|
||||
|
||||
(format-message
|
||||
"The buffer object prints as `%s'." (current-buffer))
|
||||
@result{} "The buffer object prints as ‘strings.texi’."
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@ -1001,20 +1008,13 @@ specifier, if any, to be inserted on the right rather than the left.
|
||||
If both @samp{-} and @samp{0} are present, the @samp{0} flag is
|
||||
ignored.
|
||||
|
||||
@cindex curved quotes
|
||||
@cindex curly quotes
|
||||
The flag @samp{q} quotes the printed representation as per the
|
||||
variable @samp{text-quoting-style}. @xref{Keys in Documentation}.
|
||||
Typically it uses curved single quotes @t{‘like this’} as in the
|
||||
following example.
|
||||
|
||||
@example
|
||||
@group
|
||||
(format "%06d is padded on the left with zeros" 123)
|
||||
@result{} "000123 is padded on the left with zeros"
|
||||
|
||||
(format "%q-6d is padded on the right" 123)
|
||||
@result{} "‘123 ’ is padded on the right"
|
||||
(format "'%-6d' is padded on the right" 123)
|
||||
@result{} "'123 ' is padded on the right"
|
||||
|
||||
(format "The word '%-7s' actually has %d letters in it."
|
||||
"foo" (length "foo"))
|
||||
|
22
etc/NEWS
22
etc/NEWS
@ -272,7 +272,7 @@ successive char insertions.
|
||||
€ № ← → ↔ − ≈ ≠ ≤ ≥. As before, you can type C-x 8 C-h to list shorthands.
|
||||
|
||||
** New minor mode electric-quote-mode for quoting ‘like this’ and “like this”
|
||||
as you type.
|
||||
as you type. See also the new variable ‘text-quoting-style’.
|
||||
|
||||
** New minor mode global-eldoc-mode is enabled by default.
|
||||
|
||||
@ -916,20 +916,21 @@ Set it to ‘curve’ for curved single quotes ‘like this’, to ‘straight
|
||||
for straight apostrophes 'like this', and to ‘grave’ for grave accent
|
||||
and apostrophe `like this'. The default value nil acts like ‘curve’
|
||||
if curved single quotes are displayable, and like ‘grave’ otherwise.
|
||||
Quotes in info files are not translated.
|
||||
The new variable affects display of diagnostics and help, but not of info.
|
||||
|
||||
+++
|
||||
** substitute-command-keys now replaces quotes.
|
||||
That is, it converts documentation strings’ quoting style as per the
|
||||
value of ‘text-quoting-style’. Doc strings in source code can use
|
||||
either curved quotes or grave accent and apostrophe. As before,
|
||||
characters preceded by \= are output as-is.
|
||||
either curved single quotes or grave accents and apostrophes. As
|
||||
before, characters preceded by \= are output as-is.
|
||||
|
||||
+++
|
||||
** Message-issuing functions ‘error’, ‘message’, etc. now convert quotes.
|
||||
They use the new ‘format-message’ function instead of plain ‘format’,
|
||||
so that they now follow user preference as per ‘text-quoting-style’ if
|
||||
their format argument contains curved quotes.
|
||||
so that they now follow user preference as per ‘text-quoting-style’
|
||||
when processing curved single quotes, grave accents, and apostrophes
|
||||
in their format argument.
|
||||
|
||||
+++
|
||||
** The character classes [:alpha:] and [:alnum:] in regular expressions
|
||||
@ -1055,13 +1056,8 @@ quotes.
|
||||
|
||||
+++
|
||||
** New function ‘format-message’ is like ‘format’ and also converts
|
||||
curved quotes as per ‘text-quoting-style’.
|
||||
|
||||
+++
|
||||
** New ‘format’ flag ‘q’
|
||||
The new ‘q’ flag causes ‘format’ to quote the output representation as
|
||||
per the value of ‘text-quoting-style’. E.g., (format "%qs failed"
|
||||
"foo") might return "‘foo’ failed".
|
||||
curved single quotes, grave accents and apostrophes as per
|
||||
‘text-quoting-style’.
|
||||
|
||||
+++
|
||||
** show-help-function's arg is converted via substitute-command-keys
|
||||
|
@ -288,12 +288,6 @@ This function accepts any number of arguments, but ignores them."
|
||||
(interactive)
|
||||
nil)
|
||||
|
||||
(defun format-message (format-string &rest args)
|
||||
"Format a string out of FORMAT-STRING and arguments.
|
||||
This is like ‘format’, except it also converts curved quotes in
|
||||
FORMAT-STRING as per ‘text-quoting-style’."
|
||||
(apply #'format (internal--text-restyle format-string) args))
|
||||
|
||||
;; Signal a compile-error if the first arg is missing.
|
||||
(defun error (&rest args)
|
||||
"Signal an error, making error message by passing all args to `format'.
|
||||
|
@ -511,9 +511,8 @@ invoke it. If KEYS is omitted or nil, the return value of
|
||||
for (i = 2; *tem; i++)
|
||||
{
|
||||
visargs[1] = make_string (tem + 1, strcspn (tem + 1, "\n"));
|
||||
visargs[1] = Finternal__text_restyle (visargs[1]);
|
||||
if (strchr (SSDATA (visargs[1]), '%'))
|
||||
callint_message = Fformat (i - 1, visargs + 1);
|
||||
callint_message = Fformat_message (i - 1, visargs + 1);
|
||||
else
|
||||
callint_message = visargs[1];
|
||||
|
||||
|
115
src/doc.c
115
src/doc.c
@ -684,10 +684,7 @@ the same file name is found in the `doc-directory'. */)
|
||||
return unbind_to (count, Qnil);
|
||||
}
|
||||
|
||||
/* Curved quotation marks. */
|
||||
static unsigned char const LSQM[] = { uLSQM0, uLSQM1, uLSQM2 };
|
||||
static unsigned char const RSQM[] = { uRSQM0, uRSQM1, uRSQM2 };
|
||||
|
||||
/* Return true if text quoting style should default to quote `like this'. */
|
||||
static bool
|
||||
default_to_grave_quoting_style (void)
|
||||
{
|
||||
@ -925,14 +922,13 @@ Otherwise, return a new string. */)
|
||||
if (NILP (tem))
|
||||
{
|
||||
name = Fsymbol_name (name);
|
||||
insert1 (Fsubstitute_command_keys
|
||||
(build_string ("\nUses keymap "uLSQM)));
|
||||
AUTO_STRING (msg_prefix, "\nUses keymap `");
|
||||
insert1 (Fsubstitute_command_keys (msg_prefix));
|
||||
insert_from_string (name, 0, 0,
|
||||
SCHARS (name),
|
||||
SBYTES (name), 1);
|
||||
insert1 (Fsubstitute_command_keys
|
||||
(build_string
|
||||
(uRSQM", which is not currently defined.\n")));
|
||||
AUTO_STRING (msg_suffix, "', which is not currently defined.\n");
|
||||
insert1 (Fsubstitute_command_keys (msg_suffix));
|
||||
if (start[-1] == '<') keymap = Qnil;
|
||||
}
|
||||
else if (start[-1] == '<')
|
||||
@ -972,9 +968,9 @@ Otherwise, return a new string. */)
|
||||
else if ((strp[0] == '`' || strp[0] == '\'')
|
||||
&& quoting_style == CURVE_QUOTING_STYLE)
|
||||
{
|
||||
start = strp[0] == '`' ? LSQM : RSQM;
|
||||
start = (unsigned char const *) (strp[0] == '`' ? uLSQM : uRSQM);
|
||||
length = 1;
|
||||
length_byte = 3;
|
||||
length_byte = sizeof uLSQM - 1;
|
||||
idx = strp - SDATA (string) + 1;
|
||||
goto subst;
|
||||
}
|
||||
@ -985,29 +981,28 @@ Otherwise, return a new string. */)
|
||||
nchars++;
|
||||
changed = true;
|
||||
}
|
||||
else if (strp[0] == uLSQM0 && strp[1] == uLSQM1
|
||||
&& (strp[2] == uLSQM2 || strp[2] == uRSQM2)
|
||||
&& quoting_style != CURVE_QUOTING_STYLE)
|
||||
{
|
||||
*bufp++ = (strp[2] == uLSQM2 && quoting_style == GRAVE_QUOTING_STYLE
|
||||
? '`' : '\'');
|
||||
strp += 3;
|
||||
nchars++;
|
||||
changed = true;
|
||||
}
|
||||
else if (! multibyte) /* just copy other chars */
|
||||
else if (! multibyte)
|
||||
*bufp++ = *strp++, nchars++;
|
||||
else
|
||||
{
|
||||
int len;
|
||||
|
||||
STRING_CHAR_AND_LENGTH (strp, len);
|
||||
if (len == 1)
|
||||
*bufp = *strp;
|
||||
int ch = STRING_CHAR_AND_LENGTH (strp, len);
|
||||
if ((ch == LEFT_SINGLE_QUOTATION_MARK
|
||||
|| ch == RIGHT_SINGLE_QUOTATION_MARK)
|
||||
&& quoting_style != CURVE_QUOTING_STYLE)
|
||||
{
|
||||
*bufp++ = ((ch == LEFT_SINGLE_QUOTATION_MARK
|
||||
&& quoting_style == GRAVE_QUOTING_STYLE)
|
||||
? '`' : '\'');
|
||||
strp += len;
|
||||
changed = true;
|
||||
}
|
||||
else
|
||||
memcpy (bufp, strp, len);
|
||||
strp += len;
|
||||
bufp += len;
|
||||
{
|
||||
do
|
||||
*bufp++ = *strp++;
|
||||
while (--len != 0);
|
||||
}
|
||||
nchars++;
|
||||
}
|
||||
}
|
||||
@ -1019,67 +1014,6 @@ Otherwise, return a new string. */)
|
||||
xfree (buf);
|
||||
RETURN_UNGCPRO (tem);
|
||||
}
|
||||
|
||||
DEFUN ("internal--text-restyle", Finternal__text_restyle,
|
||||
Sinternal__text_restyle, 1, 1, 0,
|
||||
doc: /* Return STRING, possibly substituting quote characters.
|
||||
|
||||
In the result, replace each curved single quote (\\=‘ and \\=’) by
|
||||
left and right quote characters as specified by ‘text-quoting-style’.
|
||||
|
||||
Return the original STRING in the common case where no changes are needed.
|
||||
Otherwise, return a new string. */)
|
||||
(Lisp_Object string)
|
||||
{
|
||||
bool changed = false;
|
||||
|
||||
CHECK_STRING (string);
|
||||
if (! STRING_MULTIBYTE (string))
|
||||
return string;
|
||||
|
||||
enum text_quoting_style quoting_style = text_quoting_style ();
|
||||
if (quoting_style == CURVE_QUOTING_STYLE)
|
||||
return string;
|
||||
|
||||
ptrdiff_t bsize = SBYTES (string);
|
||||
unsigned char const *strp = SDATA (string);
|
||||
unsigned char const *strlim = strp + bsize;
|
||||
USE_SAFE_ALLOCA;
|
||||
char *buf = SAFE_ALLOCA (bsize);
|
||||
char *bufp = buf;
|
||||
ptrdiff_t nchars = 0;
|
||||
|
||||
while (strp < strlim)
|
||||
{
|
||||
unsigned char const *cp = strp;
|
||||
switch (STRING_CHAR_ADVANCE (strp))
|
||||
{
|
||||
case LEFT_SINGLE_QUOTATION_MARK:
|
||||
*bufp++ = quoting_style == GRAVE_QUOTING_STYLE ? '`': '\'';
|
||||
changed = true;
|
||||
break;
|
||||
|
||||
case RIGHT_SINGLE_QUOTATION_MARK:
|
||||
*bufp++ = '\'';
|
||||
changed = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
do
|
||||
*bufp++ = *cp++;
|
||||
while (cp != strp);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
nchars++;
|
||||
}
|
||||
|
||||
Lisp_Object result
|
||||
= changed ? make_string_from_bytes (buf, nchars, bufp - buf) : string;
|
||||
SAFE_FREE ();
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
syms_of_doc (void)
|
||||
@ -1113,5 +1047,4 @@ displayable, and like ‘grave’ otherwise. */);
|
||||
defsubr (&Sdocumentation_property);
|
||||
defsubr (&Ssnarf_documentation);
|
||||
defsubr (&Ssubstitute_command_keys);
|
||||
defsubr (&Sinternal__text_restyle);
|
||||
}
|
||||
|
183
src/editfns.c
183
src/editfns.c
@ -72,6 +72,7 @@ static Lisp_Object format_time_string (char const *, ptrdiff_t, struct timespec,
|
||||
static long int tm_gmtoff (struct tm *);
|
||||
static int tm_diff (struct tm *, struct tm *);
|
||||
static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
|
||||
static Lisp_Object styled_format (ptrdiff_t, Lisp_Object *, bool);
|
||||
|
||||
#ifndef HAVE_TM_GMTOFF
|
||||
# define HAVE_TM_GMTOFF false
|
||||
@ -3696,8 +3697,7 @@ usage: (message FORMAT-STRING &rest ARGS) */)
|
||||
}
|
||||
else
|
||||
{
|
||||
args[0] = Finternal__text_restyle (args[0]);
|
||||
Lisp_Object val = Fformat (nargs, args);
|
||||
Lisp_Object val = Fformat_message (nargs, args);
|
||||
message3 (val);
|
||||
return val;
|
||||
}
|
||||
@ -3722,8 +3722,7 @@ usage: (message-box FORMAT-STRING &rest ARGS) */)
|
||||
}
|
||||
else
|
||||
{
|
||||
args[0] = Finternal__text_restyle (args[0]);
|
||||
Lisp_Object val = Fformat (nargs, args);
|
||||
Lisp_Object val = Fformat_message (nargs, args);
|
||||
Lisp_Object pane, menu;
|
||||
struct gcpro gcpro1;
|
||||
|
||||
@ -3822,7 +3821,7 @@ specifiers, as follows:
|
||||
|
||||
%<flags><width><precision>character
|
||||
|
||||
where flags is [+ #-0q]+, width is [0-9]+, and precision is .[0-9]+
|
||||
where flags is [+ #-0]+, width is [0-9]+, and precision is .[0-9]+
|
||||
|
||||
The + flag character inserts a + before any positive number, while a
|
||||
space inserts a space before any positive number; these flags only
|
||||
@ -3835,9 +3834,6 @@ The # flag means to use an alternate display form for %o, %x, %X, %e,
|
||||
for %e, %f, and %g, it causes a decimal point to be included even if
|
||||
the precision is zero.
|
||||
|
||||
The q flag means to quote the printed representation as per
|
||||
‘text-quoting-style’. E.g., "%qs" is equivalent to "‘%s’".
|
||||
|
||||
The width specifier supplies a lower limit for the length of the
|
||||
printed representation. The padding, if any, normally goes on the
|
||||
left, but it goes on the right if the - flag is present. The padding
|
||||
@ -3852,6 +3848,31 @@ specifier truncates the string to the given width.
|
||||
|
||||
usage: (format STRING &rest OBJECTS) */)
|
||||
(ptrdiff_t nargs, Lisp_Object *args)
|
||||
{
|
||||
return styled_format (nargs, args, false);
|
||||
}
|
||||
|
||||
DEFUN ("format-message", Fformat_message, Sformat_message, 1, MANY, 0,
|
||||
doc: /* Format a string out of a format-string and arguments.
|
||||
The first argument is a format control string.
|
||||
The other arguments are substituted into it to make the result, a string.
|
||||
|
||||
This acts like ‘format’, except it also replaces each left single
|
||||
quotation mark (\\=‘) and grave accent (\\=`) by a left quote, and each
|
||||
right single quotation mark (\\=’) and apostrophe (\\=') by a right quote.
|
||||
The left and right quote replacement characters are specified by
|
||||
‘text-quoting-style’.
|
||||
|
||||
usage: (format-message STRING &rest OBJECTS) */)
|
||||
(ptrdiff_t nargs, Lisp_Object *args)
|
||||
{
|
||||
return styled_format (nargs, args, true);
|
||||
}
|
||||
|
||||
/* Implement ‘format-message’ if MESSAGE is true, ‘format’ otherwise. */
|
||||
|
||||
static Lisp_Object
|
||||
styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
|
||||
{
|
||||
ptrdiff_t n; /* The number of the next arg to substitute. */
|
||||
char initial_buffer[4000];
|
||||
@ -3917,7 +3938,8 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
|
||||
/* Try to determine whether the result should be multibyte.
|
||||
This is not always right; sometimes the result needs to be multibyte
|
||||
because of an object that we will pass through prin1,
|
||||
because of an object that we will pass through prin1.
|
||||
or because a grave accent or apostrophe is requoted,
|
||||
and in that case, we won't know it here. */
|
||||
multibyte_format = STRING_MULTIBYTE (args[0]);
|
||||
multibyte = multibyte_format;
|
||||
@ -3925,7 +3947,7 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
if (STRINGP (args[n]) && STRING_MULTIBYTE (args[n]))
|
||||
multibyte = 1;
|
||||
|
||||
enum text_quoting_style quoting_style = text_quoting_style ();
|
||||
int quoting_style = message ? text_quoting_style () : -1;
|
||||
|
||||
/* If we start out planning a unibyte result,
|
||||
then discover it has to be multibyte, we jump back to retry. */
|
||||
@ -3945,11 +3967,13 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
/* The values of N and FORMAT when the loop body is entered. */
|
||||
ptrdiff_t n0 = n;
|
||||
char *format0 = format;
|
||||
char const *convsrc = format;
|
||||
unsigned char format_char = *format++;
|
||||
|
||||
/* Bytes needed to represent the output of this conversion. */
|
||||
ptrdiff_t convbytes;
|
||||
ptrdiff_t convbytes = 1;
|
||||
|
||||
if (*format == '%')
|
||||
if (format_char == '%')
|
||||
{
|
||||
/* General format specifications look like
|
||||
|
||||
@ -3974,23 +3998,21 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
bool space_flag = false;
|
||||
bool sharp_flag = false;
|
||||
bool zero_flag = false;
|
||||
bool quote_flag = false;
|
||||
ptrdiff_t field_width;
|
||||
bool precision_given;
|
||||
uintmax_t precision = UINTMAX_MAX;
|
||||
char *num_end;
|
||||
char conversion;
|
||||
|
||||
while (1)
|
||||
for (; ; format++)
|
||||
{
|
||||
switch (*++format)
|
||||
switch (*format)
|
||||
{
|
||||
case '-': minus_flag = true; continue;
|
||||
case '+': plus_flag = true; continue;
|
||||
case ' ': space_flag = true; continue;
|
||||
case '#': sharp_flag = true; continue;
|
||||
case '0': zero_flag = true; continue;
|
||||
case 'q': quote_flag = true; continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -4014,11 +4036,10 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
error ("Format string ends in middle of format specifier");
|
||||
|
||||
memset (&discarded[format0 - format_start], 1, format - format0);
|
||||
conversion = *format;
|
||||
conversion = *format++;
|
||||
if (conversion == '%')
|
||||
goto copy_char;
|
||||
discarded[format - format_start] = 1;
|
||||
format++;
|
||||
|
||||
++n;
|
||||
if (! (n < nargs))
|
||||
@ -4118,20 +4139,6 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
if (convbytes && multibyte && ! STRING_MULTIBYTE (args[n]))
|
||||
convbytes = count_size_as_multibyte (SDATA (args[n]), nbytes);
|
||||
|
||||
if (quote_flag)
|
||||
{
|
||||
convbytes += 2;
|
||||
if (quoting_style == CURVE_QUOTING_STYLE)
|
||||
{
|
||||
if (!multibyte)
|
||||
{
|
||||
multibyte = true;
|
||||
goto retry;
|
||||
}
|
||||
convbytes += 4;
|
||||
}
|
||||
}
|
||||
|
||||
padding = width < field_width ? field_width - width : 0;
|
||||
|
||||
if (max_bufsize - padding <= convbytes)
|
||||
@ -4139,27 +4146,6 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
convbytes += padding;
|
||||
if (convbytes <= buf + bufsize - p)
|
||||
{
|
||||
|
||||
if (quote_flag)
|
||||
{
|
||||
switch (quoting_style)
|
||||
{
|
||||
case CURVE_QUOTING_STYLE:
|
||||
memcpy (p, uLSQM, 3);
|
||||
p += 3;
|
||||
break;
|
||||
|
||||
case GRAVE_QUOTING_STYLE:
|
||||
*p++ = '`';
|
||||
break;
|
||||
|
||||
case STRAIGHT_QUOTING_STYLE:
|
||||
*p++ = '\'';
|
||||
break;
|
||||
}
|
||||
nchars++;
|
||||
}
|
||||
|
||||
if (! minus_flag)
|
||||
{
|
||||
memset (p, ' ', padding);
|
||||
@ -4189,22 +4175,6 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
nchars += padding;
|
||||
}
|
||||
|
||||
if (quote_flag)
|
||||
{
|
||||
switch (quoting_style)
|
||||
{
|
||||
case CURVE_QUOTING_STYLE:
|
||||
memcpy (p, uRSQM, 3);
|
||||
p += 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
*p++ = '\'';
|
||||
break;
|
||||
}
|
||||
nchars++;
|
||||
}
|
||||
|
||||
/* If this argument has text properties, record where
|
||||
in the result string it appears. */
|
||||
if (string_intervals (args[n]))
|
||||
@ -4464,44 +4434,72 @@ usage: (format STRING &rest OBJECTS) */)
|
||||
}
|
||||
}
|
||||
else
|
||||
copy_char:
|
||||
{
|
||||
/* Copy a single character from format to buf. */
|
||||
/* Named constants for the UTF-8 encodings of U+2018 LEFT SINGLE
|
||||
QUOTATION MARK and U+2019 RIGHT SINGLE QUOTATION MARK. */
|
||||
enum
|
||||
{
|
||||
uLSQM0 = 0xE2, uLSQM1 = 0x80, uLSQM2 = 0x98,
|
||||
/* uRSQM0 = 0xE2, uRSQM1 = 0x80, */ uRSQM2 = 0x99
|
||||
};
|
||||
|
||||
char *src = format;
|
||||
unsigned char str[MAX_MULTIBYTE_LENGTH];
|
||||
|
||||
if (multibyte_format)
|
||||
if ((format_char == '`' || format_char == '\'')
|
||||
&& quoting_style == CURVE_QUOTING_STYLE)
|
||||
{
|
||||
/* Copy a whole multibyte character. */
|
||||
if (p > buf
|
||||
&& !ASCII_CHAR_P (*((unsigned char *) p - 1))
|
||||
&& !CHAR_HEAD_P (*format))
|
||||
maybe_combine_byte = 1;
|
||||
|
||||
do
|
||||
format++;
|
||||
while (! CHAR_HEAD_P (*format));
|
||||
|
||||
convbytes = format - src;
|
||||
memset (&discarded[src + 1 - format_start], 2, convbytes - 1);
|
||||
if (! multibyte)
|
||||
{
|
||||
multibyte = true;
|
||||
goto retry;
|
||||
}
|
||||
convsrc = format_char == '`' ? uLSQM : uRSQM;
|
||||
convbytes = 3;
|
||||
}
|
||||
else if (format_char == '`' && quoting_style == STRAIGHT_QUOTING_STYLE)
|
||||
convsrc = "'";
|
||||
else if (format_char == uLSQM0 && CURVE_QUOTING_STYLE < quoting_style
|
||||
&& multibyte_format
|
||||
&& (unsigned char) format[0] == uLSQM1
|
||||
&& ((unsigned char) format[1] == uLSQM2
|
||||
|| (unsigned char) format[1] == uRSQM2))
|
||||
{
|
||||
convsrc = (((unsigned char) format[1] == uLSQM2
|
||||
&& quoting_style == GRAVE_QUOTING_STYLE)
|
||||
? "`" : "'");
|
||||
format += 2;
|
||||
memset (&discarded[format0 + 1 - format_start], 2, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char uc = *format++;
|
||||
if (! multibyte || ASCII_CHAR_P (uc))
|
||||
convbytes = 1;
|
||||
else
|
||||
/* Copy a single character from format to buf. */
|
||||
if (multibyte_format)
|
||||
{
|
||||
int c = BYTE8_TO_CHAR (uc);
|
||||
/* Copy a whole multibyte character. */
|
||||
if (p > buf
|
||||
&& !ASCII_CHAR_P (*((unsigned char *) p - 1))
|
||||
&& !CHAR_HEAD_P (format_char))
|
||||
maybe_combine_byte = 1;
|
||||
|
||||
while (! CHAR_HEAD_P (*format))
|
||||
format++;
|
||||
|
||||
convbytes = format - format0;
|
||||
memset (&discarded[format0 + 1 - format_start], 2,
|
||||
convbytes - 1);
|
||||
}
|
||||
else if (multibyte && !ASCII_CHAR_P (format_char))
|
||||
{
|
||||
int c = BYTE8_TO_CHAR (format_char);
|
||||
convbytes = CHAR_STRING (c, str);
|
||||
src = (char *) str;
|
||||
convsrc = (char *) str;
|
||||
}
|
||||
}
|
||||
|
||||
copy_char:
|
||||
if (convbytes <= buf + bufsize - p)
|
||||
{
|
||||
memcpy (p, src, convbytes);
|
||||
memcpy (p, convsrc, convbytes);
|
||||
p += convbytes;
|
||||
nchars++;
|
||||
continue;
|
||||
@ -5213,6 +5211,7 @@ functions if all the text being accessed has this property. */);
|
||||
defsubr (&Smessage_or_box);
|
||||
defsubr (&Scurrent_message);
|
||||
defsubr (&Sformat);
|
||||
defsubr (&Sformat_message);
|
||||
|
||||
defsubr (&Sinsert_buffer_substring);
|
||||
defsubr (&Scompare_buffer_substrings);
|
||||
|
108
src/image.c
108
src/image.c
@ -647,7 +647,7 @@ image_error (const char *format, ...)
|
||||
static void
|
||||
image_size_error (void)
|
||||
{
|
||||
image_error ("Invalid image size (see %qs)", "max-image-size");
|
||||
image_error ("Invalid image size (see `%s')", "max-image-size");
|
||||
}
|
||||
|
||||
|
||||
@ -2952,13 +2952,13 @@ xbm_load_image (struct frame *f, struct image *img, unsigned char *contents,
|
||||
if (img->pixmap == NO_PIXMAP)
|
||||
{
|
||||
x_clear_image (f, img);
|
||||
image_error ("Unable to create X pixmap for %qs", img->spec);
|
||||
image_error ("Unable to create X pixmap for `%s'", img->spec);
|
||||
}
|
||||
else
|
||||
success_p = 1;
|
||||
}
|
||||
else
|
||||
image_error ("Error loading XBM image %qs", img->spec);
|
||||
image_error ("Error loading XBM image `%s'", img->spec);
|
||||
|
||||
return success_p;
|
||||
}
|
||||
@ -2996,7 +2996,7 @@ xbm_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_fd (file_name, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", file_name);
|
||||
image_error ("Cannot find image file `%s'", file_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3004,7 +3004,7 @@ xbm_load (struct frame *f, struct image *img)
|
||||
unsigned char *contents = slurp_file (fd, &size);
|
||||
if (contents == NULL)
|
||||
{
|
||||
image_error ("Error loading XBM image %qs", file);
|
||||
image_error ("Error loading XBM image `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3116,7 +3116,7 @@ xbm_load (struct frame *f, struct image *img)
|
||||
success_p = 1;
|
||||
else
|
||||
{
|
||||
image_error ("Unable to create pixmap for XBM image %qs",
|
||||
image_error ("Unable to create pixmap for XBM image `%s'",
|
||||
img->spec);
|
||||
x_clear_image (f, img);
|
||||
}
|
||||
@ -3639,7 +3639,7 @@ xpm_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_file (specified_file);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
#ifdef ALLOC_XPM_COLORS
|
||||
xpm_free_color_cache ();
|
||||
#endif
|
||||
@ -3671,7 +3671,7 @@ xpm_load (struct frame *f, struct image *img)
|
||||
Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL);
|
||||
if (!STRINGP (buffer))
|
||||
{
|
||||
image_error ("Invalid image data %qs", buffer);
|
||||
image_error ("Invalid image data `%s'", buffer);
|
||||
#ifdef ALLOC_XPM_COLORS
|
||||
xpm_free_color_cache ();
|
||||
#endif
|
||||
@ -4302,7 +4302,7 @@ xpm_load (struct frame *f,
|
||||
Lisp_Object file = x_find_image_fd (file_name, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", file_name);
|
||||
image_error ("Cannot find image file `%s'", file_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4310,7 +4310,7 @@ xpm_load (struct frame *f,
|
||||
unsigned char *contents = slurp_file (fd, &size);
|
||||
if (contents == NULL)
|
||||
{
|
||||
image_error ("Error loading XPM image %qs", file);
|
||||
image_error ("Error loading XPM image `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4324,7 +4324,7 @@ xpm_load (struct frame *f,
|
||||
data = image_spec_value (img->spec, QCdata, NULL);
|
||||
if (!STRINGP (data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", data);
|
||||
image_error ("Invalid image data `%s'", data);
|
||||
return 0;
|
||||
}
|
||||
success_p = xpm_load_image (f, img, SDATA (data),
|
||||
@ -5278,7 +5278,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_fd (specified_file, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5286,7 +5286,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
contents = slurp_file (fd, &size);
|
||||
if (contents == NULL)
|
||||
{
|
||||
image_error ("Error reading %qs", file);
|
||||
image_error ("Error reading `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5299,7 +5299,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
data = image_spec_value (img->spec, QCdata, NULL);
|
||||
if (!STRINGP (data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", data);
|
||||
image_error ("Invalid image data `%s'", data);
|
||||
return 0;
|
||||
}
|
||||
p = SDATA (data);
|
||||
@ -5309,7 +5309,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
/* Check magic number. */
|
||||
if (end - p < 2 || *p++ != 'P')
|
||||
{
|
||||
image_error ("Not a PBM image: %qs", img->spec);
|
||||
image_error ("Not a PBM image: `%s'", img->spec);
|
||||
error:
|
||||
xfree (contents);
|
||||
img->pixmap = NO_PIXMAP;
|
||||
@ -5343,7 +5343,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
break;
|
||||
|
||||
default:
|
||||
image_error ("Not a PBM image: %qs", img->spec);
|
||||
image_error ("Not a PBM image: `%s'", img->spec);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -5442,7 +5442,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
x_destroy_x_image (ximg);
|
||||
#endif
|
||||
x_clear_image (f, img);
|
||||
image_error ("Invalid image size in image %qs",
|
||||
image_error ("Invalid image size in image `%s'",
|
||||
img->spec);
|
||||
goto error;
|
||||
}
|
||||
@ -5477,7 +5477,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
x_destroy_x_image (ximg);
|
||||
#endif
|
||||
x_clear_image (f, img);
|
||||
image_error ("Invalid image size in image %qs", img->spec);
|
||||
image_error ("Invalid image size in image `%s'", img->spec);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -5520,7 +5520,7 @@ pbm_load (struct frame *f, struct image *img)
|
||||
#else
|
||||
x_destroy_x_image (ximg);
|
||||
#endif
|
||||
image_error ("Invalid pixel value in image %qs", img->spec);
|
||||
image_error ("Invalid pixel value in image `%s'", img->spec);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -5916,7 +5916,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
|
||||
Lisp_Object file = x_find_image_fd (specified_file, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5924,7 +5924,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
|
||||
fp = fdopen (fd, "rb");
|
||||
if (!fp)
|
||||
{
|
||||
image_error ("Cannot open image file %qs", file);
|
||||
image_error ("Cannot open image file `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5933,7 +5933,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
|
||||
|| png_sig_cmp (sig, 0, sizeof sig))
|
||||
{
|
||||
fclose (fp);
|
||||
image_error ("Not a PNG file: %qs", file);
|
||||
image_error ("Not a PNG file: `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -5941,7 +5941,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
|
||||
{
|
||||
if (!STRINGP (specified_data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", specified_data);
|
||||
image_error ("Invalid image data `%s'", specified_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5954,7 +5954,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
|
||||
if (tbr.len < sizeof sig
|
||||
|| png_sig_cmp (tbr.bytes, 0, sizeof sig))
|
||||
{
|
||||
image_error ("Not a PNG image: %qs", img->spec);
|
||||
image_error ("Not a PNG image: `%s'", img->spec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -6681,20 +6681,20 @@ jpeg_load_body (struct frame *f, struct image *img,
|
||||
Lisp_Object file = x_find_image_fd (specified_file, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fp = fdopen (fd, "rb");
|
||||
if (fp == NULL)
|
||||
{
|
||||
image_error ("Cannot open %qs", file);
|
||||
image_error ("Cannot open `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (!STRINGP (specified_data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", specified_data);
|
||||
image_error ("Invalid image data `%s'", specified_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -6710,7 +6710,7 @@ jpeg_load_body (struct frame *f, struct image *img,
|
||||
{
|
||||
char buf[JMSG_LENGTH_MAX];
|
||||
mgr->cinfo.err->format_message ((j_common_ptr) &mgr->cinfo, buf);
|
||||
image_error ("Error reading JPEG image %qs: %s",
|
||||
image_error ("Error reading JPEG image `%s': %s",
|
||||
img->spec, build_string (buf));
|
||||
break;
|
||||
}
|
||||
@ -7196,7 +7196,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_file (specified_file);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7209,7 +7209,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
tiff = TIFFOpen (SSDATA (encoded_file), "r");
|
||||
if (tiff == NULL)
|
||||
{
|
||||
image_error ("Cannot open %qs", file);
|
||||
image_error ("Cannot open `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -7217,7 +7217,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
{
|
||||
if (!STRINGP (specified_data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", specified_data);
|
||||
image_error ("Invalid image data `%s'", specified_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7237,7 +7237,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
|
||||
if (!tiff)
|
||||
{
|
||||
image_error ("Cannot open memory source for %qs", img->spec);
|
||||
image_error ("Cannot open memory source for `%s'", img->spec);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -7249,7 +7249,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
if (! (TYPE_MINIMUM (tdir_t) <= ino && ino <= TYPE_MAXIMUM (tdir_t)
|
||||
&& TIFFSetDirectory (tiff, ino)))
|
||||
{
|
||||
image_error ("Invalid image number %qs in image %qs",
|
||||
image_error ("Invalid image number `%s' in image `%s'",
|
||||
image, img->spec);
|
||||
TIFFClose (tiff);
|
||||
return 0;
|
||||
@ -7293,7 +7293,7 @@ tiff_load (struct frame *f, struct image *img)
|
||||
TIFFClose (tiff);
|
||||
if (!rc)
|
||||
{
|
||||
image_error ("Error reading TIFF image %qs", img->spec);
|
||||
image_error ("Error reading TIFF image `%s'", img->spec);
|
||||
xfree (buf);
|
||||
return 0;
|
||||
}
|
||||
@ -7629,7 +7629,7 @@ gif_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_file (specified_file);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", specified_file);
|
||||
image_error ("Cannot find image file `%s'", specified_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7643,14 +7643,14 @@ gif_load (struct frame *f, struct image *img)
|
||||
gif = DGifOpenFileName (SSDATA (encoded_file));
|
||||
if (gif == NULL)
|
||||
{
|
||||
image_error ("Cannot open %qs", file);
|
||||
image_error ("Cannot open `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
gif = DGifOpenFileName (SSDATA (encoded_file), &gif_err);
|
||||
if (gif == NULL)
|
||||
{
|
||||
image_error ("Cannot open %qs: %s",
|
||||
image_error ("Cannot open `%s': %s",
|
||||
file, build_string (GifErrorString (gif_err)));
|
||||
return 0;
|
||||
}
|
||||
@ -7660,7 +7660,7 @@ gif_load (struct frame *f, struct image *img)
|
||||
{
|
||||
if (!STRINGP (specified_data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", specified_data);
|
||||
image_error ("Invalid image data `%s'", specified_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7674,14 +7674,14 @@ gif_load (struct frame *f, struct image *img)
|
||||
gif = DGifOpen (&memsrc, gif_read_from_memory);
|
||||
if (!gif)
|
||||
{
|
||||
image_error ("Cannot open memory source %qs", img->spec);
|
||||
image_error ("Cannot open memory source `%s'", img->spec);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
gif = DGifOpen (&memsrc, gif_read_from_memory, &gif_err);
|
||||
if (!gif)
|
||||
{
|
||||
image_error ("Cannot open memory source %qs: %s",
|
||||
image_error ("Cannot open memory source `%s': %s",
|
||||
img->spec, build_string (GifErrorString (gif_err)));
|
||||
return 0;
|
||||
}
|
||||
@ -7700,7 +7700,7 @@ gif_load (struct frame *f, struct image *img)
|
||||
rc = DGifSlurp (gif);
|
||||
if (rc == GIF_ERROR || gif->ImageCount <= 0)
|
||||
{
|
||||
image_error ("Error reading %qs", img->spec);
|
||||
image_error ("Error reading `%s'", img->spec);
|
||||
gif_close (gif, NULL);
|
||||
return 0;
|
||||
}
|
||||
@ -7711,7 +7711,7 @@ gif_load (struct frame *f, struct image *img)
|
||||
idx = INTEGERP (image_number) ? XFASTINT (image_number) : 0;
|
||||
if (idx < 0 || idx >= gif->ImageCount)
|
||||
{
|
||||
image_error ("Invalid image number %qs in image %qs",
|
||||
image_error ("Invalid image number `%s' in image `%s'",
|
||||
image_number, img->spec);
|
||||
gif_close (gif, NULL);
|
||||
return 0;
|
||||
@ -7984,10 +7984,10 @@ gif_load (struct frame *f, struct image *img)
|
||||
char *error_text = GifErrorString (gif_err);
|
||||
|
||||
if (error_text)
|
||||
image_error ("Error closing %qs: %s",
|
||||
image_error ("Error closing `%s': %s",
|
||||
img->spec, build_string (error_text));
|
||||
#else
|
||||
image_error ("Error closing %qs", img->spec);
|
||||
image_error ("Error closing `%s'", img->spec);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -8528,7 +8528,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
|
||||
|
||||
if (ino < 0 || ino >= MagickGetNumberImages (image_wand))
|
||||
{
|
||||
image_error ("Invalid image number %qs in image %qs", image, img->spec);
|
||||
image_error ("Invalid image number `%s' in image `%s'", image, img->spec);
|
||||
DestroyMagickWand (image_wand);
|
||||
return 0;
|
||||
}
|
||||
@ -8797,7 +8797,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
|
||||
|
||||
MagickWandTerminus ();
|
||||
/* TODO more cleanup. */
|
||||
image_error ("Error parsing IMAGEMAGICK image %qs", img->spec);
|
||||
image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -8819,7 +8819,7 @@ imagemagick_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_file (file_name);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", file_name);
|
||||
image_error ("Cannot find image file `%s'", file_name);
|
||||
return 0;
|
||||
}
|
||||
file = ENCODE_FILE (file);
|
||||
@ -8837,7 +8837,7 @@ imagemagick_load (struct frame *f, struct image *img)
|
||||
data = image_spec_value (img->spec, QCdata, NULL);
|
||||
if (!STRINGP (data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", data);
|
||||
image_error ("Invalid image data `%s'", data);
|
||||
return 0;
|
||||
}
|
||||
success_p = imagemagick_load_image (f, img, SDATA (data),
|
||||
@ -9098,7 +9098,7 @@ svg_load (struct frame *f, struct image *img)
|
||||
Lisp_Object file = x_find_image_fd (file_name, &fd);
|
||||
if (!STRINGP (file))
|
||||
{
|
||||
image_error ("Cannot find image file %qs", file_name);
|
||||
image_error ("Cannot find image file `%s'", file_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -9107,7 +9107,7 @@ svg_load (struct frame *f, struct image *img)
|
||||
unsigned char *contents = slurp_file (fd, &size);
|
||||
if (contents == NULL)
|
||||
{
|
||||
image_error ("Error loading SVG image %qs", file);
|
||||
image_error ("Error loading SVG image `%s'", file);
|
||||
return 0;
|
||||
}
|
||||
/* If the file was slurped into memory properly, parse it. */
|
||||
@ -9124,7 +9124,7 @@ svg_load (struct frame *f, struct image *img)
|
||||
data = image_spec_value (img->spec, QCdata, NULL);
|
||||
if (!STRINGP (data))
|
||||
{
|
||||
image_error ("Invalid image data %qs", data);
|
||||
image_error ("Invalid image data `%s'", data);
|
||||
return 0;
|
||||
}
|
||||
original_filename = BVAR (current_buffer, filename);
|
||||
@ -9323,7 +9323,7 @@ svg_load_image (struct frame *f, /* Pointer to emacs frame structure. *
|
||||
g_object_unref (rsvg_handle);
|
||||
/* FIXME: Use error->message so the user knows what is the actual
|
||||
problem with the image. */
|
||||
image_error ("Error parsing SVG image %qs", img->spec);
|
||||
image_error ("Error parsing SVG image `%s'", img->spec);
|
||||
g_error_free (err);
|
||||
return 0;
|
||||
}
|
||||
@ -9497,7 +9497,7 @@ gs_load (struct frame *f, struct image *img)
|
||||
|
||||
if (!img->pixmap)
|
||||
{
|
||||
image_error ("Unable to create pixmap for %qs" , img->spec);
|
||||
image_error ("Unable to create pixmap for `%s'" , img->spec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -9609,7 +9609,7 @@ x_kill_gs_process (Pixmap pixmap, struct frame *f)
|
||||
#endif
|
||||
}
|
||||
else
|
||||
image_error ("Cannot get X image of %qs; colors will not be freed",
|
||||
image_error ("Cannot get X image of `%s'; colors will not be freed",
|
||||
img->spec);
|
||||
|
||||
unblock_input ();
|
||||
|
@ -4300,13 +4300,6 @@ extern void set_initial_environment (void);
|
||||
extern void syms_of_callproc (void);
|
||||
|
||||
/* Defined in doc.c. */
|
||||
enum
|
||||
{
|
||||
/* Named constants for the UTF-8 encodings of U+2018 LEFT SINGLE
|
||||
QUOTATION MARK and U+2019 RIGHT SINGLE QUOTATION MARK. */
|
||||
uLSQM0 = 0xE2, uLSQM1 = 0x80, uLSQM2 = 0x98,
|
||||
uRSQM0 = 0xE2, uRSQM1 = 0x80, uRSQM2 = 0x99
|
||||
};
|
||||
enum text_quoting_style
|
||||
{
|
||||
/* Use curved single quotes ‘like this’. */
|
||||
|
@ -947,7 +947,7 @@ load_warn_old_style_backquotes (Lisp_Object file)
|
||||
{
|
||||
if (!NILP (Vold_style_backquotes))
|
||||
{
|
||||
AUTO_STRING (format, "Loading %qs: old-style backquotes detected!");
|
||||
AUTO_STRING (format, "Loading `%s': old-style backquotes detected!");
|
||||
CALLN (Fmessage, format, file);
|
||||
}
|
||||
}
|
||||
|
@ -9838,7 +9838,7 @@ vadd_to_log (char const *format, va_list ap)
|
||||
struct gcpro gcpro1, gcpro2;
|
||||
GCPRO2 (args[1], msg);
|
||||
gcpro1.nvars = form_nargs;
|
||||
msg = Fformat (nargs, args);
|
||||
msg = Fformat_message (nargs, args);
|
||||
|
||||
ptrdiff_t len = SBYTES (msg) + 1;
|
||||
USE_SAFE_ALLOCA;
|
||||
|
@ -797,7 +797,7 @@ load_pixmap (struct frame *f, Lisp_Object name)
|
||||
|
||||
if (bitmap_id < 0)
|
||||
{
|
||||
add_to_log ("Invalid or undefined bitmap %qs", name);
|
||||
add_to_log ("Invalid or undefined bitmap `%s'", name);
|
||||
bitmap_id = 0;
|
||||
}
|
||||
else
|
||||
|
@ -2148,7 +2148,7 @@ static Lisp_Object
|
||||
x_clipboard_manager_error_1 (Lisp_Object err)
|
||||
{
|
||||
AUTO_STRING (format, "X clipboard manager error: %s\n\
|
||||
If the problem persists, set %qs to nil.");
|
||||
If the problem persists, set `%s' to nil.");
|
||||
AUTO_STRING (varname, "x-select-enable-clipboard-manager");
|
||||
CALLN (Fmessage, format, CAR (CDR (err)), varname);
|
||||
return Qnil;
|
||||
|
Loading…
Reference in New Issue
Block a user