summaryrefslogtreecommitdiff
path: root/editors/emacs23/files/patch-src_coding.c
blob: 9dd1a5e0f45d02f74dc7cf3cb3a60956fd045e41 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$FreeBSD$

--- src/coding.c.orig
+++ src/coding.c
@@ -3853,8 +3853,20 @@
 	      else
 		charset = CHARSET_FROM_ID (charset_id_2);
 	      ONE_MORE_BYTE (c1);
-	      if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
-		goto invalid_code;
+	      /*
+	       * <ESC>N sequence is recognized as SS2 in some ISO2022
+	       * encodings.  As a workaround, mark invalid only if
+	       * <ESC>N + GR in a 7-bit encoding or <ESC>N + GL in an 8-bit
+	       * encoding.
+	       */
+	      if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) {
+		if (c1 < 0x20 || c1 >= 0x80)
+		  goto invalid_code;
+	      }
+	      else {
+		if (c1 < 0xA0)
+		  goto invalid_code;
+	      }
 	      break;
 
 	    case 'O':		/* invocation of single-shift-3 */
@@ -3867,8 +3879,20 @@
 	      else
 		charset = CHARSET_FROM_ID (charset_id_3);
 	      ONE_MORE_BYTE (c1);
-	      if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
-		goto invalid_code;
+	      /*
+	       * <ESC>O sequence by arrow keys is recognized as SS3 in
+	       * some ISO2022 encodings.  As a workaround, mark invalid only if
+	       * <ESC>O + GR in a 7-bit encoding or <ESC>O + GL in an 8-bit
+	       * encoding.
+	       */
+	      if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) {
+		if (c1 < 0x20 || c1 >= 0x80)
+		  goto invalid_code;
+	      }
+	      else {
+		if (c1 < 0xA0)
+		  goto invalid_code;
+	      }
 	      break;
 
 	    case '0': case '2':	case '3': case '4': /* start composition */