@@ -85,6 +85,7 @@ DECODER(cp932)
8585{
8686 while (inleft > 0 ) {
8787 unsigned char c = INBYTE1 , c2 ;
88+ Py_UCS4 decoded ;
8889
8990 if (c <= 0x80 ) {
9091 OUTCHAR (c );
@@ -109,7 +110,8 @@ DECODER(cp932)
109110 REQUIRE_INBUF (2 )
110111 c2 = INBYTE2 ;
111112
112- TRYMAP_DEC (cp932ext , writer , c , c2 );
113+ if (TRYMAP_DEC (cp932ext , decoded , c , c2 ))
114+ OUTCHAR (decoded );
113115 else if ((c >= 0x81 && c <= 0x9f ) || (c >= 0xe0 && c <= 0xea )){
114116 if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80 ) || c2 > 0xfc )
115117 return 1 ;
@@ -119,8 +121,10 @@ DECODER(cp932)
119121 c = (2 * c + (c2 < 0x5e ? 0 : 1 ) + 0x21 );
120122 c2 = (c2 < 0x5e ? c2 : c2 - 0x5e ) + 0x21 ;
121123
122- TRYMAP_DEC (jisx0208 , writer , c , c2 );
123- else return 1 ;
124+ if (TRYMAP_DEC (jisx0208 , decoded , c , c2 ))
125+ OUTCHAR (decoded );
126+ else
127+ return 1 ;
124128 }
125129 else if (c >= 0xf0 && c <= 0xf9 ) {
126130 if ((c2 >= 0x40 && c2 <= 0x7e ) ||
@@ -235,7 +239,7 @@ DECODER(euc_jis_2004)
235239{
236240 while (inleft > 0 ) {
237241 unsigned char c = INBYTE1 ;
238- Py_UCS4 code ;
242+ Py_UCS4 code , decoded ;
239243
240244 if (c < 0x80 ) {
241245 OUTCHAR (c );
@@ -265,13 +269,15 @@ DECODER(euc_jis_2004)
265269
266270 /* JIS X 0213 Plane 2 or JIS X 0212 (see NOTES) */
267271 EMULATE_JISX0213_2000_DECODE_PLANE2 (writer , c2 , c3 )
268- else TRYMAP_DEC (jisx0213_2_bmp , writer , c2 , c3 ) ;
269- else TRYMAP_DEC_CHAR (jisx0213_2_emp , code , c2 , c3 ) {
272+ else if (TRYMAP_DEC (jisx0213_2_bmp , decoded , c2 , c3 ))
273+ OUTCHAR (decoded );
274+ else if (TRYMAP_DEC (jisx0213_2_emp , code , c2 , c3 )) {
270275 OUTCHAR (EMPBASE | code );
271276 NEXT_IN (3 );
272277 continue ;
273278 }
274- else TRYMAP_DEC (jisx0212 , writer , c2 , c3 ) ;
279+ else if (TRYMAP_DEC (jisx0212 , decoded , c2 , c3 ))
280+ OUTCHAR (decoded );
275281 else return 1 ;
276282 NEXT_IN (3 );
277283 }
@@ -286,14 +292,16 @@ DECODER(euc_jis_2004)
286292 EMULATE_JISX0213_2000_DECODE_PLANE1 (writer , c , c2 )
287293 else if (c == 0x21 && c2 == 0x40 ) OUTCHAR (0xff3c );
288294 else if (c == 0x22 && c2 == 0x32 ) OUTCHAR (0xff5e );
289- else TRYMAP_DEC (jisx0208 , writer , c , c2 );
290- else TRYMAP_DEC (jisx0213_1_bmp , writer , c , c2 );
291- else TRYMAP_DEC_CHAR (jisx0213_1_emp , code , c , c2 ) {
295+ else if (TRYMAP_DEC (jisx0208 , decoded , c , c2 ))
296+ OUTCHAR (decoded );
297+ else if (TRYMAP_DEC (jisx0213_1_bmp , decoded , c , c2 ))
298+ OUTCHAR (decoded );
299+ else if (TRYMAP_DEC (jisx0213_1_emp , code , c , c2 )) {
292300 OUTCHAR (EMPBASE | code );
293301 NEXT_IN (2 );
294302 continue ;
295303 }
296- else TRYMAP_DEC_CHAR ( jisx0213_pair , code , c , c2 ) {
304+ else if ( TRYMAP_DEC ( jisx0213_pair , code , c , c2 ) ) {
297305 OUTCHAR2 (code >> 16 , code & 0xffff );
298306 NEXT_IN (2 );
299307 continue ;
@@ -367,6 +375,7 @@ DECODER(euc_jp)
367375{
368376 while (inleft > 0 ) {
369377 unsigned char c = INBYTE1 ;
378+ Py_UCS4 decoded ;
370379
371380 if (c < 0x80 ) {
372381 OUTCHAR (c );
@@ -394,7 +403,8 @@ DECODER(euc_jp)
394403 c2 = INBYTE2 ;
395404 c3 = INBYTE3 ;
396405 /* JIS X 0212 */
397- TRYMAP_DEC (jisx0212 , writer , c2 ^ 0x80 , c3 ^ 0x80 ) {
406+ if (TRYMAP_DEC (jisx0212 , decoded , c2 ^ 0x80 , c3 ^ 0x80 )) {
407+ OUTCHAR (decoded );
398408 NEXT_IN (3 );
399409 }
400410 else
@@ -412,9 +422,10 @@ DECODER(euc_jp)
412422 OUTCHAR (0xff3c );
413423 else
414424#endif
415- TRYMAP_DEC (jisx0208 , writer ,
416- c ^ 0x80 , c2 ^ 0x80 ) ;
417- else return 1 ;
425+ if (TRYMAP_DEC (jisx0208 , decoded , c ^ 0x80 , c2 ^ 0x80 ))
426+ OUTCHAR (decoded );
427+ else
428+ return 1 ;
418429 NEXT_IN (2 );
419430 }
420431 }
@@ -486,6 +497,7 @@ DECODER(shift_jis)
486497{
487498 while (inleft > 0 ) {
488499 unsigned char c = INBYTE1 ;
500+ Py_UCS4 decoded ;
489501
490502#ifdef STRICT_BUILD
491503 JISX0201_R_DECODE (c , writer )
@@ -514,7 +526,8 @@ DECODER(shift_jis)
514526 continue ;
515527 }
516528#endif
517- TRYMAP_DEC (jisx0208 , writer , c1 , c2 ) {
529+ if (TRYMAP_DEC (jisx0208 , decoded , c1 , c2 )) {
530+ OUTCHAR (decoded );
518531 NEXT_IN (2 );
519532 continue ;
520533 }
@@ -636,7 +649,7 @@ DECODER(shift_jis_2004)
636649 JISX0201_DECODE (c , writer )
637650 else if ((c >= 0x81 && c <= 0x9f ) || (c >= 0xe0 && c <= 0xfc )){
638651 unsigned char c1 , c2 ;
639- Py_UCS4 code ;
652+ Py_UCS4 code , decoded ;
640653
641654 REQUIRE_INBUF (2 )
642655 c2 = INBYTE2 ;
@@ -652,17 +665,14 @@ DECODER(shift_jis_2004)
652665 c1 += 0x21 ;
653666 EMULATE_JISX0213_2000_DECODE_PLANE1 (writer ,
654667 c1 , c2 )
655- else TRYMAP_DEC (jisx0208 , writer , c1 , c2 ) {
656- }
657- else TRYMAP_DEC (jisx0213_1_bmp , writer ,
658- c1 , c2 ) {
659- }
660- else TRYMAP_DEC_CHAR (jisx0213_1_emp , code , c1 , c2 ) {
668+ else if (TRYMAP_DEC (jisx0208 , decoded , c1 , c2 ))
669+ OUTCHAR (decoded );
670+ else if (TRYMAP_DEC (jisx0213_1_bmp , decoded , c1 , c2 ))
671+ OUTCHAR (decoded );
672+ else if (TRYMAP_DEC (jisx0213_1_emp , code , c1 , c2 ))
661673 OUTCHAR (EMPBASE | code );
662- }
663- else TRYMAP_DEC_CHAR (jisx0213_pair , code , c1 , c2 ) {
674+ else if (TRYMAP_DEC (jisx0213_pair , code , c1 , c2 ))
664675 OUTCHAR2 (code >> 16 , code & 0xffff );
665- }
666676 else
667677 return 1 ;
668678 NEXT_IN (2 );
@@ -674,9 +684,9 @@ DECODER(shift_jis_2004)
674684
675685 EMULATE_JISX0213_2000_DECODE_PLANE2 (writer ,
676686 c1 , c2 )
677- else TRYMAP_DEC (jisx0213_2_bmp , writer ,
678- c1 , c2 ) {
679- } else TRYMAP_DEC_CHAR ( jisx0213_2_emp , code , c1 , c2 ) {
687+ else if ( TRYMAP_DEC (jisx0213_2_bmp , decoded , c1 , c2 ))
688+ OUTCHAR ( decoded );
689+ else if ( TRYMAP_DEC ( jisx0213_2_emp , code , c1 , c2 ) ) {
680690 OUTCHAR (EMPBASE | code );
681691 NEXT_IN (2 );
682692 continue ;
0 commit comments