blob: 5e6aeaf296a7820c88d7814c9693c37e2f23d6ff [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001/*-
Lev Walkin4902f052006-10-16 12:18:10 +00002 * Copyright (c) 2003, 2006 Lev Walkin <vlm@lionet.info>. All rights reserved.
Lev Walkinf15320b2004-06-03 03:38:44 +00003 * Redistribution and modifications are permitted subject to BSD license.
4 */
Lev Walkina9cc46e2004-09-22 16:06:28 +00005#include <asn_internal.h>
Lev Walkinf15320b2004-06-03 03:38:44 +00006#include <TeletexString.h>
7
8/*
9 * TeletexString basic type description.
10 */
Wim Lewis18c2ec92014-07-29 11:30:10 -070011static const ber_tlv_tag_t asn_DEF_TeletexString_tags[] = {
Lev Walkin188ed2c2004-09-13 08:31:01 +000012 (ASN_TAG_CLASS_UNIVERSAL | (20 << 2)), /* [UNIVERSAL 20] IMPLICIT ...*/
13 (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), /* ... OCTET STRING */
Lev Walkinf15320b2004-06-03 03:38:44 +000014};
Bi-Ruei, Chiu1f87ac02017-08-20 01:25:45 +080015asn_TYPE_operation_t asn_OP_TeletexString = {
Lev Walkina9cc46e2004-09-22 16:06:28 +000016 OCTET_STRING_free,
17 OCTET_STRING_print, /* non-ascii string */
Lev Walkincd2f48e2017-08-10 02:14:59 -070018 OCTET_STRING_compare,
Lev Walkinf15320b2004-06-03 03:38:44 +000019 asn_generic_unknown_constraint,
20 OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
Lev Walkindc06f6b2004-10-20 15:50:55 +000021 OCTET_STRING_encode_der,
22 OCTET_STRING_decode_xer_hex,
23 OCTET_STRING_encode_xer,
Lev Walkincc159472017-07-06 08:26:36 -070024#ifdef ASN_DISABLE_OER_SUPPORT
25 0,
26 0,
27#else
Lev Walkin1d76f3c2017-07-25 07:58:05 -070028 OCTET_STRING_decode_oer,
29 OCTET_STRING_encode_oer,
Lev Walkincc159472017-07-06 08:26:36 -070030#endif /* ASN_DISABLE_OER_SUPPORT */
Lev Walkinb33425f2017-07-14 14:59:52 +040031#ifdef ASN_DISABLE_PER_SUPPORT
32 0,
33 0,
34#else
35 OCTET_STRING_decode_uper,
36 OCTET_STRING_encode_uper,
37#endif /* ASN_DISABLE_PER_SUPPORT */
Bi-Ruei, Chiu1f87ac02017-08-20 01:25:45 +080038 0 /* Use generic outmost tag fetcher */
39};
40asn_TYPE_descriptor_t asn_DEF_TeletexString = {
41 "TeletexString",
42 "TeletexString",
43 &asn_OP_TeletexString,
44 asn_generic_unknown_constraint,
Lev Walkin5e033762004-09-29 13:26:15 +000045 asn_DEF_TeletexString_tags,
46 sizeof(asn_DEF_TeletexString_tags)
47 / sizeof(asn_DEF_TeletexString_tags[0]) - 1,
48 asn_DEF_TeletexString_tags,
49 sizeof(asn_DEF_TeletexString_tags)
50 / sizeof(asn_DEF_TeletexString_tags[0]),
Lev Walkin76780762017-07-07 10:07:30 -070051 0, /* No OER visible constraints */
Lev Walkin59b176e2005-11-26 11:25:14 +000052 0, /* No PER visible constraints */
Lev Walkin449f8322004-08-20 13:23:42 +000053 0, 0, /* No members */
Lev Walkind9bd7752004-06-05 08:17:50 +000054 0 /* No specifics */
Lev Walkinf15320b2004-06-03 03:38:44 +000055};
56
Lev Walkin4902f052006-10-16 12:18:10 +000057/*
58 * Here is a formal attempt at creating a mapping from TeletexString
59 * (T61String) of the latest ASN.1 standard (X.680:2002) into the Unicode
60 * character set. -- Lev Walkin <vlm@lionet.info>
61 *
62 * The first thing to keep in mind is that TeletexString (T61String)
63 * is defined in ASN.1, and is not really a T.61 string.
64 * The T.61 standard is withdrawn by ITU-T and is no longer an authoritative
65 * reference. See http://www.itu.int/rec/T-REC-T.61
66 *
67 * The X.680 specifies TeletexString (T61String) as a combination of the
68 * character sets specified by the registration numbers listed in
69 * ISO International Register of Coded Character Sets to be used with
70 * Escape Sequences (ISO-2375):
71 * 6, 87, 102, 103, 106, 107, 126, 144, 150, 153, 156, 164, 165, 168,
72 * plus SPACE and DELETE characters.
73 * In addition to that, the X.680 Table 6 NOTE 2 allows using register entries
74 * 6 and 156 instead of 102 and 103.
75 *
76 * The ISO Register itself is available at http://www.itscj.ipsj.or.jp/ISO-IR/
77 *
78 * #6 is ASCII. http://www.itscj.ipsj.or.jp/ISO-IR/006.pdf
79 * Escapes into:
80 * G0: ESC 2/8 4/2 ("(B")
81 * G1: ESC 2/9 4/2 (")B")
82 * The range is [0x21 .. 0x7e]. Conversion into Unicode
83 * is simple, because it has one-to-one correspondence.
84 * #87 is a "Japanese Graphic Character Set for Information Interchange".
85 * Is a multiple-byte set of 6877 characters.
86 * The character set is JIS X 0208-1983 (originally JIS C 6226-1983).
87 * Escapes into:
88 * G0: ESC 2/4 4/2 ("$B")
89 * G1: ESC 2/4 2/9 4/2 ("$)B")
90 * G2: ESC 2/4 2/10 4/2 ("$*B")
91 * G3: ESC 2/4 2/11 4/2 ("$+B")
92 * #102 is "Teletex Primary Set of Graphic Characters" and is almost ASCII.
93 * Escapes into:
94 * G0: ESC 2/8 7/5 ("(u")
95 * G1: ESC 2/9 7/5 (")u")
96 * G2: ESC 2/10 7/5 ("*u")
97 * G3: ESC 2/11 7/5 ("+u")
98 * It is almost identical to ASCII, except for ASCII position for '$'
99 * (DOLLAR SIGN) is filled with 'ยค' (CURRENCY SIGN), which is U+00A4.
100 * Also, ASCII positions for '`', '\', '^', '{', '}', '~' are marked
101 * as "should not be used".
102 * #103 is a supplementary set of characters used in combination with #102.
103 * Escapes into:
104 * G0: ESC 2/8 7/6 ("(v")
105 * G1: ESC 2/9 7/6 (")v")
106 * G2: ESC 2/10 7/6 ("*v")
107 * G3: ESC 2/11 7/6 ("+v")
108 * Some characters in that character set are combining characters,
109 * which can only be restrictively used with certain basic Latin letters.
110 * It can be thought of as a subset of #156 with the exception of 4/12
111 * which is UNDERLINE in #103 and absent in #156.
112 * #106 is a primary set of control functions, used in combination with #107.
113 * Escapes into:
114 * C0: ESC 2/1 4/5 ("!E")
115 * This set is so short I can list it here:
116 * 0x08 BS BACKSPACE -- same as Unicode
117 * 0x0a LF LINE FEED -- same as Unicode
118 * 0x0c FF FORM FEED -- same as Unicode
119 * 0x0d CR CARRIAGE RETURN -- same as Unicode
120 * 0x0e LS1 LOCKING SHIFT ONE
121 * 0x0f LS0 LOCKING SHIFT ZERO
122 * 0x19 SS2 SINGLE SHIFT TWO
123 * 0x1a SUB SUBSTITUTE CHARACTER
124 * 0x1b ESC ESCAPE -- same as Unicode
125 * 0x1d SS3 SINGLE SHIFT THREE
126 * The LS1 and LS0 are two magical functions which, respectively, invoke
127 * the currently designated G1 or G0 set into positions 2/1 to 7/14
128 * The SS2 and SS3, respectively, invoke one character of the
129 * currently designated set G2 and G3.
130 * The SUB is wholly equivalent to U+001a (SUBSTITUTE)
131 * #107 is a supplementary set of control functions, used with #106.
132 * Escapes into:
133 * C1: ESC 2/2 4/8 ('"H')
134 * This set contains three special control codes:
135 * 0x8b PLD PARTIAL LINE DOWN -- similar to <SUB>
136 * 0x8c PLU PARTIAL LINE UP -- sumilar to <SUP>
137 * 0x9b CSI CONTROL SEQUENCE INTRODUCER
138 * This set is so out of world we can probably safely ignore it.
139 * #126 is a "Right-hand Part of the Latin/Greek Alphabet".
140 * Comprises of 90 characters, including accented letters.
141 * Escapes into:
142 * G1: ESC 2/13 4/6 ("-F")
143 * G2: ESC 2/14 4/6 (".F")
144 * G3: ESC 2/15 4/6 ("/F")
145 * Note: This Registration is a subset of ISO-IR 227.
146 * #144 is a "Cyrillic part of the Latin/Cyrillic Alphabet".
147 * Comprises of 95 characters.
148 * Escapes into:
149 * G1: ESC 2/13 4/12 ("-L")
150 * G2: ESC 2/14 4/12 (".L")
151 * G3: ESC 2/15 4/12 ("/L")
152 * #150 is a "Greek Primary Set of Graphic Characters".
153 * Comprises of 94 characters.
154 * Escapes into:
155 * G0: ESC 2/8 2/1 4/0 ("(!@")
156 * G1: ESC 2/9 2/1 4/0 (")!@")
157 * G2: ESC 2/10 2/1 4/0 ("*!@")
158 * G3: ESC 2/11 2/1 4/0 ("+!@")
159 * #153 is a "Basic Cyrillic Character Set for 8-bit codes".
160 * Comprises of 68 characters.
161 * Escapes into:
162 * G1: ESC 2/13 4/15 ("-O")
163 * G2: ESC 2/14 4/15 (".O")
164 * G3: ESC 2/15 4/15 ("/O")
165 * #156 is a "Supplementary Set of ISO/IEC 6937:1992" for use with #6
166 * Comprises of 87 characters.
167 * Escapes into:
168 * G1: ESC 2/13 5/2 ("-R")
169 * G2: ESC 2/14 5/2 (".R")
170 * G3: ESC 2/15 5/2 ("/R")
171 * #164 is a "Hebrew Supplementary Set of Graphic Characters"
172 * Comprises of 27 characters.
173 * Escapes into:
174 * G1: ESC 2/13 5/3 ("-S")
175 * G2: ESC 2/14 5/3 (".S")
176 * G3: ESC 2/15 5/3 ("/S")
177 * #165 is a set of "Codes of the Chinese graphic character set"
178 * Is a multiple-byte set of 8446 characters.
179 * Escapes into:
180 * G0: ESC 2/4 2/8 4/5 ("$(E")
181 * G1: ESC 2/4 2/9 4/5 ("$)E")
182 * G2: ESC 2/4 2/10 4/5 ("$*E")
183 * G3: ESC 2/4 2/11 4/5 ("$+E")
184 * #168 is a "Japanese Graphic Character Set for Information Interchange"
185 * A multiple-byte set of 6879 characters updated from #87.
186 * Escapes into:
187 * G0: ESC 2/6 4/0 ESC 2/4 4/2 ("&@" "$B")
188 * G1: ESC 2/6 4/0 ESC 2/4 2/9 4/2 ("&@" "$)B")
189 * G2: ESC 2/6 4/0 ESC 2/4 2/10 4/2 ("&@" "$*B")
190 * G3: ESC 2/6 4/0 ESC 2/4 2/11 4/2 ("&@" "$+B")
191 */
192