yarp 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -1
- data/Makefile +5 -1
- data/config.yml +156 -125
- data/docs/encoding.md +5 -5
- data/docs/serialization.md +2 -2
- data/ext/yarp/api_node.c +142 -98
- data/ext/yarp/extension.c +21 -7
- data/ext/yarp/extension.h +1 -1
- data/include/yarp/ast.h +327 -18
- data/include/yarp/defines.h +2 -1
- data/include/yarp/diagnostic.h +3 -3
- data/include/yarp/enc/yp_encoding.h +10 -10
- data/include/yarp/parser.h +19 -19
- data/include/yarp/regexp.h +1 -1
- data/include/yarp/unescape.h +4 -4
- data/include/yarp/util/yp_buffer.h +3 -0
- data/include/yarp/util/yp_char.h +16 -16
- data/include/yarp/util/yp_constant_pool.h +2 -2
- data/include/yarp/util/yp_newline_list.h +5 -5
- data/include/yarp/util/yp_string.h +4 -4
- data/include/yarp/util/yp_string_list.h +0 -3
- data/include/yarp/util/yp_strpbrk.h +1 -1
- data/include/yarp/version.h +2 -2
- data/include/yarp.h +5 -4
- data/lib/yarp/desugar_visitor.rb +59 -122
- data/lib/yarp/node.rb +230 -240
- data/lib/yarp/serialize.rb +16 -16
- data/lib/yarp.rb +5 -5
- data/src/diagnostic.c +1 -1
- data/src/enc/yp_big5.c +15 -42
- data/src/enc/yp_euc_jp.c +16 -43
- data/src/enc/yp_gbk.c +19 -46
- data/src/enc/yp_shift_jis.c +16 -43
- data/src/enc/yp_tables.c +36 -38
- data/src/enc/yp_unicode.c +20 -25
- data/src/enc/yp_windows_31j.c +16 -43
- data/src/node.c +1271 -899
- data/src/prettyprint.c +87 -48
- data/src/regexp.c +21 -21
- data/src/serialize.c +28 -15
- data/src/unescape.c +151 -121
- data/src/util/yp_buffer.c +7 -2
- data/src/util/yp_char.c +34 -34
- data/src/util/yp_constant_pool.c +4 -4
- data/src/util/yp_memchr.c +1 -1
- data/src/util/yp_newline_list.c +5 -4
- data/src/util/yp_string.c +22 -20
- data/src/util/yp_string_list.c +0 -6
- data/src/util/yp_strncasecmp.c +3 -6
- data/src/util/yp_strpbrk.c +8 -8
- data/src/yarp.c +355 -216
- data/yarp.gemspec +1 -1
- metadata +2 -2
data/lib/yarp/serialize.rb
CHANGED
@@ -21,7 +21,7 @@ end
|
|
21
21
|
module YARP
|
22
22
|
module Serialize
|
23
23
|
MAJOR_VERSION = 0
|
24
|
-
MINOR_VERSION =
|
24
|
+
MINOR_VERSION = 10
|
25
25
|
PATCH_VERSION = 0
|
26
26
|
|
27
27
|
def self.load(input, serialized)
|
@@ -226,17 +226,17 @@ module YARP
|
|
226
226
|
when 22 then
|
227
227
|
ClassNode.new(Array.new(load_varint) { load_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_string, location)
|
228
228
|
when 23 then
|
229
|
-
ClassVariableAndWriteNode.new(load_location, load_location, load_node, location)
|
229
|
+
ClassVariableAndWriteNode.new(load_constant, load_location, load_location, load_node, location)
|
230
230
|
when 24 then
|
231
|
-
ClassVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
|
231
|
+
ClassVariableOperatorWriteNode.new(load_constant, load_location, load_location, load_node, load_constant, location)
|
232
232
|
when 25 then
|
233
|
-
ClassVariableOrWriteNode.new(load_location, load_location, load_node, location)
|
233
|
+
ClassVariableOrWriteNode.new(load_constant, load_location, load_location, load_node, location)
|
234
234
|
when 26 then
|
235
|
-
ClassVariableReadNode.new(location)
|
235
|
+
ClassVariableReadNode.new(load_constant, location)
|
236
236
|
when 27 then
|
237
|
-
ClassVariableTargetNode.new(location)
|
237
|
+
ClassVariableTargetNode.new(load_constant, location)
|
238
238
|
when 28 then
|
239
|
-
ClassVariableWriteNode.new(load_location, load_optional_node, load_optional_location, location)
|
239
|
+
ClassVariableWriteNode.new(load_constant, load_location, load_optional_node, load_optional_location, location)
|
240
240
|
when 29 then
|
241
241
|
ConstantAndWriteNode.new(load_location, load_location, load_node, location)
|
242
242
|
when 30 then
|
@@ -301,7 +301,7 @@ module YARP
|
|
301
301
|
when 59 then
|
302
302
|
GlobalVariableTargetNode.new(location)
|
303
303
|
when 60 then
|
304
|
-
GlobalVariableWriteNode.new(load_location,
|
304
|
+
GlobalVariableWriteNode.new(load_location, load_node, load_location, location)
|
305
305
|
when 61 then
|
306
306
|
HashNode.new(load_location, Array.new(load_varint) { load_node }, load_location, location)
|
307
307
|
when 62 then
|
@@ -313,17 +313,17 @@ module YARP
|
|
313
313
|
when 65 then
|
314
314
|
InNode.new(load_node, load_optional_node, load_location, load_optional_location, location)
|
315
315
|
when 66 then
|
316
|
-
InstanceVariableAndWriteNode.new(load_location, load_location, load_node, location)
|
316
|
+
InstanceVariableAndWriteNode.new(load_constant, load_location, load_location, load_node, location)
|
317
317
|
when 67 then
|
318
|
-
InstanceVariableOperatorWriteNode.new(load_location, load_location, load_node, load_constant, location)
|
318
|
+
InstanceVariableOperatorWriteNode.new(load_constant, load_location, load_location, load_node, load_constant, location)
|
319
319
|
when 68 then
|
320
|
-
InstanceVariableOrWriteNode.new(load_location, load_location, load_node, location)
|
320
|
+
InstanceVariableOrWriteNode.new(load_constant, load_location, load_location, load_node, location)
|
321
321
|
when 69 then
|
322
|
-
InstanceVariableReadNode.new(location)
|
322
|
+
InstanceVariableReadNode.new(load_constant, location)
|
323
323
|
when 70 then
|
324
|
-
InstanceVariableTargetNode.new(location)
|
324
|
+
InstanceVariableTargetNode.new(load_constant, location)
|
325
325
|
when 71 then
|
326
|
-
InstanceVariableWriteNode.new(load_location, load_node, load_location, location)
|
326
|
+
InstanceVariableWriteNode.new(load_constant, load_location, load_node, load_location, location)
|
327
327
|
when 72 then
|
328
328
|
IntegerNode.new(location)
|
329
329
|
when 73 then
|
@@ -353,7 +353,7 @@ module YARP
|
|
353
353
|
when 85 then
|
354
354
|
LocalVariableTargetNode.new(load_constant, load_varint, location)
|
355
355
|
when 86 then
|
356
|
-
LocalVariableWriteNode.new(load_constant, load_varint,
|
356
|
+
LocalVariableWriteNode.new(load_constant, load_varint, load_location, load_node, load_location, location)
|
357
357
|
when 87 then
|
358
358
|
MatchPredicateNode.new(load_node, load_node, load_location, location)
|
359
359
|
when 88 then
|
@@ -371,7 +371,7 @@ module YARP
|
|
371
371
|
when 94 then
|
372
372
|
NoKeywordsParameterNode.new(load_location, load_location, location)
|
373
373
|
when 95 then
|
374
|
-
NumberedReferenceReadNode.new(location)
|
374
|
+
NumberedReferenceReadNode.new(load_varint, location)
|
375
375
|
when 96 then
|
376
376
|
OptionalParameterNode.new(load_constant, load_location, load_location, load_node, location)
|
377
377
|
when 97 then
|
data/lib/yarp.rb
CHANGED
@@ -462,10 +462,10 @@ module YARP
|
|
462
462
|
# order here so that we can compare properly.
|
463
463
|
if params
|
464
464
|
sorted = [
|
465
|
-
*params.requireds.grep(RequiredParameterNode).map(&:
|
466
|
-
*params.optionals.map(&:
|
465
|
+
*params.requireds.grep(RequiredParameterNode).map(&:name),
|
466
|
+
*params.optionals.map(&:name),
|
467
467
|
*((params.rest.name ? params.rest.name.to_sym : :*) if params.rest && params.rest.operator != ","),
|
468
|
-
*params.posts.grep(RequiredParameterNode).map(&:
|
468
|
+
*params.posts.grep(RequiredParameterNode).map(&:name),
|
469
469
|
*params.keywords.reject(&:value).map { |param| param.name.chomp(":").to_sym },
|
470
470
|
*params.keywords.select(&:value).map { |param| param.name.chomp(":").to_sym }
|
471
471
|
]
|
@@ -485,9 +485,9 @@ module YARP
|
|
485
485
|
when RequiredDestructuredParameterNode
|
486
486
|
param_stack.concat(param.parameters.reverse)
|
487
487
|
when RequiredParameterNode
|
488
|
-
sorted << param.
|
488
|
+
sorted << param.name
|
489
489
|
when SplatNode
|
490
|
-
sorted << param.expression.
|
490
|
+
sorted << param.expression.name if param.expression
|
491
491
|
end
|
492
492
|
end
|
493
493
|
|
data/src/diagnostic.c
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
// Append an error to the given list of diagnostic.
|
4
4
|
bool
|
5
|
-
yp_diagnostic_list_append(yp_list_t *list, const
|
5
|
+
yp_diagnostic_list_append(yp_list_t *list, const uint8_t *start, const uint8_t *end, const char *message) {
|
6
6
|
yp_diagnostic_t *diagnostic = (yp_diagnostic_t *) malloc(sizeof(yp_diagnostic_t));
|
7
7
|
if (diagnostic == NULL) return false;
|
8
8
|
|
data/src/enc/yp_big5.c
CHANGED
@@ -1,69 +1,42 @@
|
|
1
1
|
#include "yarp/enc/yp_encoding.h"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
static yp_big5_codepoint_t
|
6
|
-
yp_big5_codepoint(const char *c, ptrdiff_t n, size_t *width) {
|
7
|
-
const unsigned char *uc = (const unsigned char *) c;
|
8
|
-
|
3
|
+
static size_t
|
4
|
+
yp_encoding_big5_char_width(const uint8_t *b, ptrdiff_t n) {
|
9
5
|
// These are the single byte characters.
|
10
|
-
if (*
|
11
|
-
|
12
|
-
return *uc;
|
6
|
+
if (*b < 0x80) {
|
7
|
+
return 1;
|
13
8
|
}
|
14
9
|
|
15
10
|
// These are the double byte characters.
|
16
|
-
if ((n > 1) && (
|
17
|
-
|
18
|
-
return (yp_big5_codepoint_t) (uc[0] << 8 | uc[1]);
|
11
|
+
if ((n > 1) && (b[0] >= 0xA1 && b[0] <= 0xFE) && (b[1] >= 0x40 && b[1] <= 0xFE)) {
|
12
|
+
return 2;
|
19
13
|
}
|
20
14
|
|
21
|
-
*width = 0;
|
22
15
|
return 0;
|
23
16
|
}
|
24
17
|
|
25
18
|
static size_t
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
return width;
|
31
|
-
}
|
32
|
-
|
33
|
-
static size_t
|
34
|
-
yp_encoding_big5_alpha_char(const char *c, ptrdiff_t n) {
|
35
|
-
size_t width;
|
36
|
-
yp_big5_codepoint_t codepoint = yp_big5_codepoint(c, n, &width);
|
37
|
-
|
38
|
-
if (width == 1) {
|
39
|
-
const char value = (const char) codepoint;
|
40
|
-
return yp_encoding_ascii_alpha_char(&value, n);
|
19
|
+
yp_encoding_big5_alpha_char(const uint8_t *b, ptrdiff_t n) {
|
20
|
+
if (yp_encoding_big5_char_width(b, n) == 1) {
|
21
|
+
return yp_encoding_ascii_alpha_char(b, n);
|
41
22
|
} else {
|
42
23
|
return 0;
|
43
24
|
}
|
44
25
|
}
|
45
26
|
|
46
27
|
static size_t
|
47
|
-
yp_encoding_big5_alnum_char(const
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
if (width == 1) {
|
52
|
-
const char value = (const char) codepoint;
|
53
|
-
return yp_encoding_ascii_alnum_char(&value, n);
|
28
|
+
yp_encoding_big5_alnum_char(const uint8_t *b, ptrdiff_t n) {
|
29
|
+
if (yp_encoding_big5_char_width(b, n) == 1) {
|
30
|
+
return yp_encoding_ascii_alnum_char(b, n);
|
54
31
|
} else {
|
55
32
|
return 0;
|
56
33
|
}
|
57
34
|
}
|
58
35
|
|
59
36
|
static bool
|
60
|
-
yp_encoding_big5_isupper_char(const
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
if (width == 1) {
|
65
|
-
const char value = (const char) codepoint;
|
66
|
-
return yp_encoding_ascii_isupper_char(&value, n);
|
37
|
+
yp_encoding_big5_isupper_char(const uint8_t *b, ptrdiff_t n) {
|
38
|
+
if (yp_encoding_big5_char_width(b, n) == 1) {
|
39
|
+
return yp_encoding_ascii_isupper_char(b, n);
|
67
40
|
} else {
|
68
41
|
return false;
|
69
42
|
}
|
data/src/enc/yp_euc_jp.c
CHANGED
@@ -1,75 +1,48 @@
|
|
1
1
|
#include "yarp/enc/yp_encoding.h"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
static yp_euc_jp_codepoint_t
|
6
|
-
yp_euc_jp_codepoint(const char *c, ptrdiff_t n, size_t *width) {
|
7
|
-
const unsigned char *uc = (const unsigned char *) c;
|
8
|
-
|
3
|
+
static size_t
|
4
|
+
yp_encoding_euc_jp_char_width(const uint8_t *b, ptrdiff_t n) {
|
9
5
|
// These are the single byte characters.
|
10
|
-
if (*
|
11
|
-
|
12
|
-
return *uc;
|
6
|
+
if (*b < 0x80) {
|
7
|
+
return 1;
|
13
8
|
}
|
14
9
|
|
15
10
|
// These are the double byte characters.
|
16
11
|
if (
|
17
12
|
(n > 1) &&
|
18
13
|
(
|
19
|
-
((
|
20
|
-
((
|
14
|
+
((b[0] == 0x8E) && (b[1] >= 0xA1 && b[1] <= 0xFE)) ||
|
15
|
+
((b[0] >= 0xA1 && b[0] <= 0xFE) && (b[1] >= 0xA1 && b[1] <= 0xFE))
|
21
16
|
)
|
22
17
|
) {
|
23
|
-
|
24
|
-
return (yp_euc_jp_codepoint_t) (uc[0] << 8 | uc[1]);
|
18
|
+
return 2;
|
25
19
|
}
|
26
20
|
|
27
|
-
*width = 0;
|
28
21
|
return 0;
|
29
22
|
}
|
30
23
|
|
31
24
|
static size_t
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
return width;
|
37
|
-
}
|
38
|
-
|
39
|
-
static size_t
|
40
|
-
yp_encoding_euc_jp_alpha_char(const char *c, ptrdiff_t n) {
|
41
|
-
size_t width;
|
42
|
-
yp_euc_jp_codepoint_t codepoint = yp_euc_jp_codepoint(c, n, &width);
|
43
|
-
|
44
|
-
if (width == 1) {
|
45
|
-
const char value = (const char) codepoint;
|
46
|
-
return yp_encoding_ascii_alpha_char(&value, n);
|
25
|
+
yp_encoding_euc_jp_alpha_char(const uint8_t *b, ptrdiff_t n) {
|
26
|
+
if (yp_encoding_euc_jp_char_width(b, n) == 1) {
|
27
|
+
return yp_encoding_ascii_alpha_char(b, n);
|
47
28
|
} else {
|
48
29
|
return 0;
|
49
30
|
}
|
50
31
|
}
|
51
32
|
|
52
33
|
static size_t
|
53
|
-
yp_encoding_euc_jp_alnum_char(const
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
if (width == 1) {
|
58
|
-
const char value = (const char) codepoint;
|
59
|
-
return yp_encoding_ascii_alnum_char(&value, n);
|
34
|
+
yp_encoding_euc_jp_alnum_char(const uint8_t *b, ptrdiff_t n) {
|
35
|
+
if (yp_encoding_euc_jp_char_width(b, n) == 1) {
|
36
|
+
return yp_encoding_ascii_alnum_char(b, n);
|
60
37
|
} else {
|
61
38
|
return 0;
|
62
39
|
}
|
63
40
|
}
|
64
41
|
|
65
42
|
static bool
|
66
|
-
yp_encoding_euc_jp_isupper_char(const
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
if (width == 1) {
|
71
|
-
const char value = (const char) codepoint;
|
72
|
-
return yp_encoding_ascii_isupper_char(&value, n);
|
43
|
+
yp_encoding_euc_jp_isupper_char(const uint8_t *b, ptrdiff_t n) {
|
44
|
+
if (yp_encoding_euc_jp_char_width(b, n) == 1) {
|
45
|
+
return yp_encoding_ascii_isupper_char(b, n);
|
73
46
|
} else {
|
74
47
|
return 0;
|
75
48
|
}
|
data/src/enc/yp_gbk.c
CHANGED
@@ -1,78 +1,51 @@
|
|
1
1
|
#include "yarp/enc/yp_encoding.h"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
static yp_gbk_codepoint_t
|
6
|
-
yp_gbk_codepoint(const char *c, ptrdiff_t n, size_t *width) {
|
7
|
-
const unsigned char *uc = (const unsigned char *) c;
|
8
|
-
|
3
|
+
static size_t
|
4
|
+
yp_encoding_gbk_char_width(const uint8_t *b, ptrdiff_t n) {
|
9
5
|
// These are the single byte characters.
|
10
|
-
if (*
|
11
|
-
|
12
|
-
return *uc;
|
6
|
+
if (*b < 0x80) {
|
7
|
+
return 1;
|
13
8
|
}
|
14
9
|
|
15
10
|
// These are the double byte characters.
|
16
11
|
if (
|
17
12
|
(n > 1) &&
|
18
13
|
(
|
19
|
-
((
|
20
|
-
((
|
21
|
-
((
|
22
|
-
((
|
23
|
-
((
|
14
|
+
((b[0] >= 0xA1 && b[0] <= 0xA9) && (b[1] >= 0xA1 && b[1] <= 0xFE)) || // GBK/1
|
15
|
+
((b[0] >= 0xB0 && b[0] <= 0xF7) && (b[1] >= 0xA1 && b[1] <= 0xFE)) || // GBK/2
|
16
|
+
((b[0] >= 0x81 && b[0] <= 0xA0) && (b[1] >= 0x40 && b[1] <= 0xFE) && (b[1] != 0x7F)) || // GBK/3
|
17
|
+
((b[0] >= 0xAA && b[0] <= 0xFE) && (b[1] >= 0x40 && b[1] <= 0xA0) && (b[1] != 0x7F)) || // GBK/4
|
18
|
+
((b[0] >= 0xA8 && b[0] <= 0xA9) && (b[1] >= 0x40 && b[1] <= 0xA0) && (b[1] != 0x7F)) // GBK/5
|
24
19
|
)
|
25
20
|
) {
|
26
|
-
|
27
|
-
return (yp_gbk_codepoint_t) (uc[0] << 8 | uc[1]);
|
21
|
+
return 2;
|
28
22
|
}
|
29
23
|
|
30
|
-
*width = 0;
|
31
24
|
return 0;
|
32
25
|
}
|
33
26
|
|
34
27
|
static size_t
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
return width;
|
40
|
-
}
|
41
|
-
|
42
|
-
static size_t
|
43
|
-
yp_encoding_gbk_alpha_char(const char *c, ptrdiff_t n) {
|
44
|
-
size_t width;
|
45
|
-
yp_gbk_codepoint_t codepoint = yp_gbk_codepoint(c, n, &width);
|
46
|
-
|
47
|
-
if (width == 1) {
|
48
|
-
const char value = (const char) codepoint;
|
49
|
-
return yp_encoding_ascii_alpha_char(&value, n);
|
28
|
+
yp_encoding_gbk_alpha_char(const uint8_t *b, ptrdiff_t n) {
|
29
|
+
if (yp_encoding_gbk_char_width(b, n) == 1) {
|
30
|
+
return yp_encoding_ascii_alpha_char(b, n);
|
50
31
|
} else {
|
51
32
|
return 0;
|
52
33
|
}
|
53
34
|
}
|
54
35
|
|
55
36
|
static size_t
|
56
|
-
yp_encoding_gbk_alnum_char(const
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
if (width == 1) {
|
61
|
-
const char value = (const char) codepoint;
|
62
|
-
return yp_encoding_ascii_alnum_char(&value, n);
|
37
|
+
yp_encoding_gbk_alnum_char(const uint8_t *b, ptrdiff_t n) {
|
38
|
+
if (yp_encoding_gbk_char_width(b, n) == 1) {
|
39
|
+
return yp_encoding_ascii_alnum_char(b, n);
|
63
40
|
} else {
|
64
41
|
return 0;
|
65
42
|
}
|
66
43
|
}
|
67
44
|
|
68
45
|
static bool
|
69
|
-
yp_encoding_gbk_isupper_char(const
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
if (width == 1) {
|
74
|
-
const char value = (const char) codepoint;
|
75
|
-
return yp_encoding_ascii_isupper_char(&value, n);
|
46
|
+
yp_encoding_gbk_isupper_char(const uint8_t *b, ptrdiff_t n) {
|
47
|
+
if (yp_encoding_gbk_char_width(b, n) == 1) {
|
48
|
+
return yp_encoding_ascii_isupper_char(b, n);
|
76
49
|
} else {
|
77
50
|
return false;
|
78
51
|
}
|
data/src/enc/yp_shift_jis.c
CHANGED
@@ -1,73 +1,46 @@
|
|
1
1
|
#include "yarp/enc/yp_encoding.h"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
static yp_shift_jis_codepoint_t
|
6
|
-
yp_shift_jis_codepoint(const char *c, ptrdiff_t n, size_t *width) {
|
7
|
-
const unsigned char *uc = (const unsigned char *) c;
|
8
|
-
|
3
|
+
static size_t
|
4
|
+
yp_encoding_shift_jis_char_width(const uint8_t *b, ptrdiff_t n) {
|
9
5
|
// These are the single byte characters.
|
10
|
-
if (*
|
11
|
-
|
12
|
-
return *uc;
|
6
|
+
if (*b < 0x80 || (*b >= 0xA1 && *b <= 0xDF)) {
|
7
|
+
return 1;
|
13
8
|
}
|
14
9
|
|
15
10
|
// These are the double byte characters.
|
16
11
|
if (
|
17
12
|
(n > 1) &&
|
18
|
-
((
|
19
|
-
(
|
13
|
+
((b[0] >= 0x81 && b[0] <= 0x9F) || (b[0] >= 0xE0 && b[0] <= 0xFC)) &&
|
14
|
+
(b[1] >= 0x40 && b[1] <= 0xFC)
|
20
15
|
) {
|
21
|
-
|
22
|
-
return (yp_shift_jis_codepoint_t) (uc[0] << 8 | uc[1]);
|
16
|
+
return 2;
|
23
17
|
}
|
24
18
|
|
25
|
-
*width = 0;
|
26
19
|
return 0;
|
27
20
|
}
|
28
21
|
|
29
22
|
static size_t
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
return width;
|
35
|
-
}
|
36
|
-
|
37
|
-
static size_t
|
38
|
-
yp_encoding_shift_jis_alpha_char(const char *c, ptrdiff_t n) {
|
39
|
-
size_t width;
|
40
|
-
yp_shift_jis_codepoint_t codepoint = yp_shift_jis_codepoint(c, n, &width);
|
41
|
-
|
42
|
-
if (width == 1) {
|
43
|
-
const char value = (const char) codepoint;
|
44
|
-
return yp_encoding_ascii_alpha_char(&value, n);
|
23
|
+
yp_encoding_shift_jis_alpha_char(const uint8_t *b, ptrdiff_t n) {
|
24
|
+
if (yp_encoding_shift_jis_char_width(b, n) == 1) {
|
25
|
+
return yp_encoding_ascii_alpha_char(b, n);
|
45
26
|
} else {
|
46
27
|
return 0;
|
47
28
|
}
|
48
29
|
}
|
49
30
|
|
50
31
|
static size_t
|
51
|
-
yp_encoding_shift_jis_alnum_char(const
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
if (width == 1) {
|
56
|
-
const char value = (const char) codepoint;
|
57
|
-
return yp_encoding_ascii_alnum_char(&value, n);
|
32
|
+
yp_encoding_shift_jis_alnum_char(const uint8_t *b, ptrdiff_t n) {
|
33
|
+
if (yp_encoding_shift_jis_char_width(b, n) == 1) {
|
34
|
+
return yp_encoding_ascii_alnum_char(b, n);
|
58
35
|
} else {
|
59
36
|
return 0;
|
60
37
|
}
|
61
38
|
}
|
62
39
|
|
63
40
|
static bool
|
64
|
-
yp_encoding_shift_jis_isupper_char(const
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
if (width == 1) {
|
69
|
-
const char value = (const char) codepoint;
|
70
|
-
return yp_encoding_ascii_isupper_char(&value, n);
|
41
|
+
yp_encoding_shift_jis_isupper_char(const uint8_t *b, ptrdiff_t n) {
|
42
|
+
if (yp_encoding_shift_jis_char_width(b, n) == 1) {
|
43
|
+
return yp_encoding_ascii_isupper_char(b, n);
|
71
44
|
} else {
|
72
45
|
return 0;
|
73
46
|
}
|