Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
emacs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
4
Issues
4
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
emacs
emacs
Commits
6b89e3aa
Commit
6b89e3aa
authored
Jan 31, 2003
by
Kenichi Handa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(syms_of_coding): Add `...' for symbols in the docstring of
`coding-system-require-warning'.
parent
bc6371a6
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
201 additions
and
12 deletions
+201
-12
src/coding.c
src/coding.c
+201
-12
No files found.
src/coding.c
View file @
6b89e3aa
...
...
@@ -381,6 +381,16 @@ int system_eol_type;
#ifdef emacs
/* Information about which coding system is safe for which chars.
The value has the form (GENERIC-LIST . NON-GENERIC-ALIST).
GENERIC-LIST is a list of generic coding systems which can encode
any characters.
NON-GENERIC-ALIST is an alist of non generic coding systems vs the
corresponding char table that contains safe chars. */
Lisp_Object Vcoding_system_safe_chars;
Lisp_Object Vcoding_system_list, Vcoding_system_alist;
Lisp_Object Qcoding_system_p, Qcoding_system_error;
...
...
@@ -500,16 +510,16 @@ static int inhibit_pre_post_conversion;
Lisp_Object Vchar_coding_system_table;
Lisp_Object Qchar_coding_system;
/* Return `safe-chars' property of
coding system CODING
. Don't check
validity of CODING
. */
/* Return `safe-chars' property of
CODING_SYSTEM (symbol)
. Don't check
its validity
. */
Lisp_Object
coding_safe_chars
(
coding
)
struct
coding_system
*
coding
;
coding_safe_chars (coding
_system
)
Lisp_Object coding_system
;
{
Lisp_Object coding_spec, plist, safe_chars;
coding_spec
=
Fget
(
coding
->
symbol
,
Qcoding_system
);
coding_spec = Fget (coding
_system
, Qcoding_system);
plist = XVECTOR (coding_spec)->contents[3];
safe_chars = Fplist_get (XVECTOR (coding_spec)->contents[3], Qsafe_chars);
return (CHAR_TABLE_P (safe_chars) ? safe_chars : Qt);
...
...
@@ -1310,7 +1320,7 @@ enum iso_code_class_type iso_code_class[256];
#define CHARSET_OK(idx, charset, c) \
(coding_system_table[idx] \
&& (charset == CHARSET_ASCII \
|| (safe_chars = coding_safe_chars (coding_system_table[idx]
),
\
|| (safe_chars = coding_safe_chars (coding_system_table[idx]
->symbol),
\
CODING_SAFE_CHAR_P (safe_chars, c))) \
&& (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding_system_table[idx], \
charset) \
...
...
@@ -1739,7 +1749,7 @@ decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
Lisp_Object translation_table;
Lisp_Object safe_chars;
safe_chars
=
coding_safe_chars
(
coding
);
safe_chars = coding_safe_chars (coding
->symbol
);
if (NILP (Venable_character_translation))
translation_table = Qnil;
...
...
@@ -2492,7 +2502,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
Lisp_Object translation_table;
Lisp_Object safe_chars;
safe_chars
=
coding_safe_chars
(
coding
);
safe_chars = coding_safe_chars (coding
->symbol
);
if (NILP (Venable_character_translation))
translation_table = Qnil;
...
...
@@ -6495,6 +6505,146 @@ DEFUN ("find-coding-systems-region-internal",
}
static Lisp_Object
find_safe_codings_2 (p, pend, safe_codings, work_table, single_byte_char_found)
unsigned char *p, *pend;
Lisp_Object safe_codings, work_table;
int *single_byte_char_found;
{
int c, len, i;
Lisp_Object val, ch;
Lisp_Object prev, tail;
while (p < pend)
{
c = STRING_CHAR_AND_LENGTH (p, pend - p, len);
p += len;
if (ASCII_BYTE_P (c))
/* We can ignore ASCII characters here. */
continue;
if (SINGLE_BYTE_CHAR_P (c))
*single_byte_char_found = 1;
if (NILP (safe_codings))
/* Already all coding systems are excluded. */
continue;
/* Check the safe coding systems for C. */
ch = make_number (c);
val = Faref (work_table, ch);
if (EQ (val, Qt))
/* This element was already checked. Ignore it. */
continue;
/* Remember that we checked this element. */
Faset (work_table, ch, Qt);
for (prev = tail = safe_codings; CONSP (tail); tail = XCDR (tail))
{
val = XCAR (tail);
if (NILP (Faref (XCDR (val), ch)))
{
/* Exclued this coding system from SAFE_CODINGS. */
if (EQ (tail, safe_codings))
safe_codings = XCDR (safe_codings);
else
XSETCDR (prev, XCDR (tail));
}
else
prev = tail;
}
}
return safe_codings;
}
DEFUN ("find-coding-systems-region-internal-2",
Ffind_coding_systems_region_internal_2,
Sfind_coding_systems_region_internal_2, 2, 2, 0,
doc: /* Internal use only. */)
(start, end)
Lisp_Object start, end;
{
Lisp_Object work_table, safe_codings;
int non_ascii_p = 0;
int single_byte_char_found = 0;
const unsigned char *p1, *p1end, *p2, *p2end, *p;
if (STRINGP (start))
{
if (!STRING_MULTIBYTE (start))
return Qt;
p1 = SDATA (start), p1end = p1 + SBYTES (start);
p2 = p2end = p1end;
if (SCHARS (start) != SBYTES (start))
non_ascii_p = 1;
}
else
{
int from, to, stop;
CHECK_NUMBER_COERCE_MARKER (start);
CHECK_NUMBER_COERCE_MARKER (end);
if (XINT (start) < BEG || XINT (end) > Z || XINT (start) > XINT (end))
args_out_of_range (start, end);
if (NILP (current_buffer->enable_multibyte_characters))
return Qt;
from = CHAR_TO_BYTE (XINT (start));
to = CHAR_TO_BYTE (XINT (end));
stop = from < GPT_BYTE && GPT_BYTE < to ? GPT_BYTE : to;
p1 = BYTE_POS_ADDR (from), p1end = p1 + (stop - from);
if (stop == to)
p2 = p2end = p1end;
else
p2 = BYTE_POS_ADDR (stop), p2end = p2 + (to - stop);
if (XINT (end) - XINT (start) != to - from)
non_ascii_p = 1;
}
if (!non_ascii_p)
{
/* We are sure that the text contains no multibyte character.
Check if it contains eight-bit-graphic. */
p = p1;
for (p = p1; p < p1end && ASCII_BYTE_P (*p); p++);
if (p == p1end)
{
for (p = p2; p < p2end && ASCII_BYTE_P (*p); p++);
if (p == p2end)
return Qt;
}
}
/* The text contains non-ASCII characters. */
work_table = Fmake_char_table (Qchar_coding_system, Qnil);
safe_codings = Fcopy_sequence (XCDR (Vcoding_system_safe_chars));
safe_codings = find_safe_codings_2 (p1, p1end, safe_codings, work_table,
&single_byte_char_found);
if (p2 < p2end)
safe_codings = find_safe_codings_2 (p2, p2end, safe_codings, work_table,
&single_byte_char_found);
if (EQ (safe_codings, XCDR (Vcoding_system_safe_chars)))
safe_codings = Qt;
else
{
/* Turn safe_codings to a list of coding systems... */
Lisp_Object val;
if (single_byte_char_found)
/* ... and append these for eight-bit chars. */
val = Fcons (Qraw_text,
Fcons (Qemacs_mule, Fcons (Qno_conversion, Qnil)));
else
/* ... and append generic coding systems. */
val = Fcopy_sequence (XCAR (Vcoding_system_safe_chars));
for (; CONSP (safe_codings); safe_codings = XCDR (safe_codings))
val = Fcons (XCAR (XCAR (safe_codings)), val);
safe_codings = val;
}
return safe_codings;
}
/* Search from position POS for such characters that are unencodable
accoding to SAFE_CHARS, and return a list of their positions. P
points where in the memory the character at POS exists. Limit the
...
...
@@ -6609,7 +6759,7 @@ to the string. */)
if (coding.type == coding_type_undecided)
safe_chars = Qnil;
else
safe_chars
=
coding_safe_chars
(
&
coding
);
safe_chars = coding_safe_chars (
coding_system
);
if (STRINGP (string)
|| from >= GPT || to <= GPT)
...
...
@@ -7127,6 +7277,40 @@ This function is internal use only. */)
return Qnil;
}
DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
Sdefine_coding_system_internal, 1, 1, 0,
doc: /* Register CODING-SYSTEM as a base coding system.
This function is internal use only. */)
(coding_system)
Lisp_Object coding_system;
{
Lisp_Object safe_chars, slot;
if (NILP (Fcheck_coding_system (coding_system)))
Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
safe_chars = coding_safe_chars (coding_system);
if (! EQ (safe_chars, Qt) && ! CHAR_TABLE_P (safe_chars))
error ("No valid safe-chars property for %s",
SDATA (SYMBOL_NAME (coding_system)));
if (EQ (safe_chars, Qt))
{
if (NILP (Fmemq (coding_system, XCAR (Vcoding_system_safe_chars))))
XSETCAR (Vcoding_system_safe_chars,
Fcons (coding_system, XCAR (Vcoding_system_safe_chars)));
}
else
{
slot = Fassq (coding_system, XCDR (Vcoding_system_safe_chars));
if (NILP (slot))
XSETCDR (Vcoding_system_safe_chars,
nconc2 (XCDR (Vcoding_system_safe_chars),
Fcons (Fcons (coding_system, safe_chars), Qnil)));
else
XSETCDR (slot, safe_chars);
}
return Qnil;
}
#endif /* emacs */
...
...
@@ -7280,6 +7464,9 @@ syms_of_coding ()
}
}
Vcoding_system_safe_chars = Fcons (Qnil, Qnil);
staticpro (&Vcoding_system_safe_chars);
Qtranslation_table = intern ("translation-table");
staticpro (&Qtranslation_table);
Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (1));
...
...
@@ -7322,6 +7509,7 @@ syms_of_coding ()
defsubr (&Sdetect_coding_region);
defsubr (&Sdetect_coding_string);
defsubr (&Sfind_coding_systems_region_internal);
defsubr (&Sfind_coding_systems_region_internal_2);
defsubr (&Sunencodable_char_position);
defsubr (&Sdecode_coding_region);
defsubr (&Sencode_coding_region);
...
...
@@ -7339,6 +7527,7 @@ syms_of_coding ()
defsubr (&Sfind_operation_coding_system);
defsubr (&Supdate_coding_systems_internal);
defsubr (&Sset_coding_priority_internal);
defsubr (&Sdefine_coding_system_internal);
DEFVAR_LISP ("coding-system-list", &Vcoding_system_list,
doc: /* List of coding systems.
...
...
@@ -7536,9 +7725,9 @@ The default value is `select-safe-coding-system' (which see). */);
DEFVAR_BOOL ("coding-system-require-warning",
&coding_system_require_warning,
doc: /* Internal use only.
If non-nil, on writing a file,
select-safe-coding-system-function
is
called even if
coding-system-for-write
is non-nil. The command
universal-coding-system-argument
binds this variable to t temporarily. */
);
If non-nil, on writing a file,
`select-safe-coding-system-function'
is
called even if
`coding-system-for-write'
is non-nil. The command
`universal-coding-system-argument'
binds this variable to t temporarily. */);
coding_system_require_warning = 0;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment