emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113960: src/character.c (string_char): Improve comm


From: Eli Zaretskii
Subject: [Emacs-diffs] trunk r113960: src/character.c (string_char): Improve commentary.
Date: Tue, 20 Aug 2013 14:55:54 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113960
revision-id: address@hidden
parent: address@hidden
author: Kenichi Handa <address@hidden>
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Tue 2013-08-20 17:56:03 +0300
message:
  src/character.c (string_char): Improve commentary.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/character.c                
character.c-20091113204419-o5vbwnq5f7feedwu-8537
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-08-20 00:51:35 +0000
+++ b/src/ChangeLog     2013-08-20 14:56:03 +0000
@@ -1,3 +1,7 @@
+2013-08-20  Kenichi Handa  <address@hidden>
+
+       * character.c (string_char): Improve commentary.
+
 2013-08-20  Paul Eggert  <address@hidden>
 
        * image.c (SIGNATURE_DIGESTSIZE): Remove.

=== modified file 'src/character.c'
--- a/src/character.c   2013-04-02 01:54:56 +0000
+++ b/src/character.c   2013-08-20 14:56:03 +0000
@@ -174,11 +174,14 @@
 
   if (*p < 0x80 || ! (*p & 0x20) || ! (*p & 0x10))
     {
+      /* 1-, 2-, and 3-byte sequences can be handled by the macro.  */
       c = STRING_CHAR_ADVANCE (p);
     }
   else if (! (*p & 0x08))
     {
-      c = ((((p)[0] & 0xF) << 18)
+      /* A 4-byte sequence of this form:
+        11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  */
+      c = ((((p)[0] & 0x7) << 18)
           | (((p)[1] & 0x3F) << 12)
           | (((p)[2] & 0x3F) << 6)
           | ((p)[3] & 0x3F));
@@ -186,7 +189,14 @@
     }
   else
     {
-      c = ((((p)[1] & 0x3F) << 18)
+      /* A 5-byte sequence of this form:
+
+        111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+
+        Note that the top 4 `x's are always 0, so shifting p[1] can
+        never exceed the maximum valid character codepoint. */
+      c = (/* (((p)[0] & 0x3) << 24) ... always 0, so no need to shift. */
+          (((p)[1] & 0x3F) << 18)
           | (((p)[2] & 0x3F) << 12)
           | (((p)[3] & 0x3F) << 6)
           | ((p)[4] & 0x3F));


reply via email to

[Prev in Thread] Current Thread [Next in Thread]