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
Open sidebar
emacs
emacs
Commits
b529ed1e
Commit
b529ed1e
authored
Jun 26, 2008
by
Kenichi Handa
Browse files
(encode-coding-char): Fix for ASCII characters.
parent
a509862b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
22 deletions
+25
-22
lisp/international/mule-cmds.el
lisp/international/mule-cmds.el
+25
-22
No files found.
lisp/international/mule-cmds.el
View file @
b529ed1e
...
...
@@ -2805,29 +2805,32 @@ If there's no description string for VALUE, return nil."
(
defun
encode-coding-char
(
char
coding-system
)
"Encode CHAR by CODING-SYSTEM and return the resulting string.
If CODING-SYSTEM can't safely encode CHAR, return nil."
(
let
((
str1
(
string-as-multibyte
(
string
char
)))
(
str2
(
string-as-multibyte
(
string
char
char
)))
(
let*
((
str1
(
string-as-multibyte
(
string
char
)))
(
str2
(
string-as-multibyte
(
string
char
char
)))
(
found
(
find-coding-systems-string
str1
))
enc1
enc2
i1
i2
)
(
when
(
memq
(
coding-system-base
coding-system
)
(
find-coding-systems-string
str1
))
;; We must find the encoded string of CHAR. But, just encoding
;; CHAR will put extra control sequences (usually to designate
;; ASCII charset) at the tail if type of CODING is ISO 2022.
;; To exclude such tailing bytes, we at first encode one-char
;; string and two-char string, then check how many bytes at the
;; tail of both encoded strings are the same.
(
setq
enc1
(
encode-coding-string
str1
coding-system
)
i1
(
length
enc1
)
enc2
(
encode-coding-string
str2
coding-system
)
i2
(
length
enc2
))
(
while
(
and
(
>
i1
0
)
(
=
(
aref
enc1
(
1-
i1
))
(
aref
enc2
(
1-
i2
))))
(
setq
i1
(
1-
i1
)
i2
(
1-
i2
)))
;; Now (substring enc1 i1) and (substring enc2 i2) are the same,
;; and they are the extra control sequences at the tail to
;; exclude.
(
substring
enc2
0
i2
))))
(
if
(
and
(
consp
found
)
(
eq
(
car
found
)
'undecided
))
str1
(
when
(
memq
(
coding-system-base
coding-system
)
found
)
;; We must find the encoded string of CHAR. But, just encoding
;; CHAR will put extra control sequences (usually to designate
;; ASCII charset) at the tail if type of CODING is ISO 2022.
;; To exclude such tailing bytes, we at first encode one-char
;; string and two-char string, then check how many bytes at the
;; tail of both encoded strings are the same.
(
setq
enc1
(
encode-coding-string
str1
coding-system
)
i1
(
length
enc1
)
enc2
(
encode-coding-string
str2
coding-system
)
i2
(
length
enc2
))
(
while
(
and
(
>
i1
0
)
(
=
(
aref
enc1
(
1-
i1
))
(
aref
enc2
(
1-
i2
))))
(
setq
i1
(
1-
i1
)
i2
(
1-
i2
)))
;; Now (substring enc1 i1) and (substring enc2 i2) are the same,
;; and they are the extra control sequences at the tail to
;; exclude.
(
substring
enc2
0
i2
)))))
;; Backwards compatibility. These might be better with :init-value t,
;; but that breaks loadup.
...
...
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