LCOV - code coverage report
Current view: top level - Modules/cjkcodecs - _codecs_tw.c (source / functions) Hit Total Coverage
Test: CPython 3.12 LCOV report [commit 5e6661bce9] Lines: 1 63 1.6 %
Date: 2023-03-20 08:15:36 Functions: 1 5 20.0 %
Branches: 0 90 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * _codecs_tw.c: Codecs collection for Taiwan's encodings
       3                 :            :  *
       4                 :            :  * Written by Hye-Shik Chang <perky@FreeBSD.org>
       5                 :            :  */
       6                 :            : 
       7                 :            : #include "cjkcodecs.h"
       8                 :            : #include "mappings_tw.h"
       9                 :            : 
      10                 :            : /*
      11                 :            :  * BIG5 codec
      12                 :            :  */
      13                 :            : 
      14                 :          0 : ENCODER(big5)
      15                 :            : {
      16         [ #  # ]:          0 :     while (*inpos < inlen) {
      17                 :          0 :         Py_UCS4 c = INCHAR1;
      18                 :            :         DBCHAR code;
      19                 :            : 
      20         [ #  # ]:          0 :         if (c < 0x80) {
      21         [ #  # ]:          0 :             REQUIRE_OUTBUF(1);
      22                 :          0 :             **outbuf = (unsigned char)c;
      23                 :          0 :             NEXT(1, 1);
      24                 :          0 :             continue;
      25                 :            :         }
      26                 :            : 
      27         [ #  # ]:          0 :         if (c > 0xFFFF)
      28                 :          0 :             return 1;
      29                 :            : 
      30         [ #  # ]:          0 :         REQUIRE_OUTBUF(2);
      31                 :            : 
      32   [ #  #  #  #  :          0 :         if (TRYMAP_ENC(big5, code, c))
             #  #  #  # ]
      33                 :            :             ;
      34                 :            :         else
      35                 :          0 :             return 1;
      36                 :            : 
      37                 :          0 :         OUTBYTE1(code >> 8);
      38                 :          0 :         OUTBYTE2(code & 0xFF);
      39                 :          0 :         NEXT(1, 2);
      40                 :            :     }
      41                 :            : 
      42                 :          0 :     return 0;
      43                 :            : }
      44                 :            : 
      45                 :          0 : DECODER(big5)
      46                 :            : {
      47         [ #  # ]:          0 :     while (inleft > 0) {
      48                 :          0 :         unsigned char c = INBYTE1;
      49                 :            :         Py_UCS4 decoded;
      50                 :            : 
      51         [ #  # ]:          0 :         if (c < 0x80) {
      52         [ #  # ]:          0 :             OUTCHAR(c);
      53                 :          0 :             NEXT_IN(1);
      54                 :          0 :             continue;
      55                 :            :         }
      56                 :            : 
      57         [ #  # ]:          0 :         REQUIRE_INBUF(2);
      58   [ #  #  #  #  :          0 :         if (TRYMAP_DEC(big5, decoded, c, INBYTE2)) {
             #  #  #  # ]
      59         [ #  # ]:          0 :             OUTCHAR(decoded);
      60                 :          0 :             NEXT_IN(2);
      61                 :            :         }
      62                 :          0 :         else return 1;
      63                 :            :     }
      64                 :            : 
      65                 :          0 :     return 0;
      66                 :            : }
      67                 :            : 
      68                 :            : 
      69                 :            : /*
      70                 :            :  * CP950 codec
      71                 :            :  */
      72                 :            : 
      73                 :          0 : ENCODER(cp950)
      74                 :            : {
      75         [ #  # ]:          0 :     while (*inpos < inlen) {
      76                 :          0 :         Py_UCS4 c = INCHAR1;
      77                 :            :         DBCHAR code;
      78                 :            : 
      79         [ #  # ]:          0 :         if (c < 0x80) {
      80         [ #  # ]:          0 :             WRITEBYTE1((unsigned char)c);
      81                 :          0 :             NEXT(1, 1);
      82                 :          0 :             continue;
      83                 :            :         }
      84                 :            : 
      85         [ #  # ]:          0 :         if (c > 0xFFFF)
      86                 :          0 :             return 1;
      87                 :            : 
      88         [ #  # ]:          0 :         REQUIRE_OUTBUF(2);
      89   [ #  #  #  #  :          0 :         if (TRYMAP_ENC(cp950ext, code, c))
             #  #  #  # ]
      90                 :            :             ;
      91   [ #  #  #  #  :          0 :         else if (TRYMAP_ENC(big5, code, c))
             #  #  #  # ]
      92                 :            :             ;
      93                 :            :         else
      94                 :          0 :             return 1;
      95                 :            : 
      96                 :          0 :         OUTBYTE1(code >> 8);
      97                 :          0 :         OUTBYTE2(code & 0xFF);
      98                 :          0 :         NEXT(1, 2);
      99                 :            :     }
     100                 :            : 
     101                 :          0 :     return 0;
     102                 :            : }
     103                 :            : 
     104                 :          0 : DECODER(cp950)
     105                 :            : {
     106         [ #  # ]:          0 :     while (inleft > 0) {
     107                 :          0 :         unsigned char c = INBYTE1;
     108                 :            :         Py_UCS4 decoded;
     109                 :            : 
     110         [ #  # ]:          0 :         if (c < 0x80) {
     111         [ #  # ]:          0 :             OUTCHAR(c);
     112                 :          0 :             NEXT_IN(1);
     113                 :          0 :             continue;
     114                 :            :         }
     115                 :            : 
     116         [ #  # ]:          0 :         REQUIRE_INBUF(2);
     117                 :            : 
     118   [ #  #  #  #  :          0 :         if (TRYMAP_DEC(cp950ext, decoded, c, INBYTE2))
             #  #  #  # ]
     119         [ #  # ]:          0 :             OUTCHAR(decoded);
     120   [ #  #  #  #  :          0 :         else if (TRYMAP_DEC(big5, decoded, c, INBYTE2))
             #  #  #  # ]
     121         [ #  # ]:          0 :             OUTCHAR(decoded);
     122                 :            :         else
     123                 :          0 :             return 1;
     124                 :            : 
     125                 :          0 :         NEXT_IN(2);
     126                 :            :     }
     127                 :            : 
     128                 :          0 :     return 0;
     129                 :            : }
     130                 :            : 
     131                 :            : 
     132                 :            : 
     133                 :            : BEGIN_MAPPINGS_LIST
     134                 :            :   MAPPING_ENCDEC(big5)
     135                 :            :   MAPPING_ENCDEC(cp950ext)
     136                 :            : END_MAPPINGS_LIST
     137                 :            : 
     138                 :            : BEGIN_CODECS_LIST
     139                 :            :   CODEC_STATELESS(big5)
     140                 :            :   CODEC_STATELESS(cp950)
     141                 :            : END_CODECS_LIST
     142                 :            : 
     143                 :          1 : I_AM_A_MODULE_FOR(tw)

Generated by: LCOV version 1.14