예제 #1
0
 public PythonTuple encode(CodeContext /*!*/ context, string unicode, [DefaultParameterValue("strict")] string errors)
 {
     return(PythonTuple.MakeTuple(
                StringOps.DoEncode(context, unicode, errors, _encName, _encoding),
                unicode.Length
                ));
 }
예제 #2
0
 public PythonTuple encode(CodeContext /*!*/ context, string unicode, string errors = "strict")
 {
     return(PythonTuple.MakeTuple(
                StringOps.DoEncode(context, unicode, errors, _encName, _encoding),
                unicode.Length
                ));
 }
예제 #3
0
        public static object encode(CodeContext /*!*/ context, object obj, string encoding = null, string errors = "strict")
        {
            if (encoding == null)
            {
                if (obj is string str)
                {
                    PythonContext lc = context.LanguageContext;
                    return(StringOps.DoEncode(context, str, errors, lc.GetDefaultEncodingName(), lc.DefaultEncoding, includePreamble: true));
                }
                else
                {
                    throw PythonOps.TypeError("expected str, got {0}", PythonTypeOps.GetName(obj));
                }
            }
            PythonTuple t = lookup(context, encoding);

            return(PythonOps.GetIndex(context, PythonCalls.Call(context, t[EncoderIndex], obj, errors), 0));
        }
예제 #4
0
        private static PythonTuple CharmapEncodeWorker(CodeContext context, string input, string errors, Encoding e)
        {
            if (input.Length == 0)
            {
                return(PythonTuple.MakeTuple(Bytes.Empty, 0));
            }

            string encoding = "charmap";

            // default to latin-1 if an encoding is not specified
            if (e == null)
            {
                e        = Encoding.GetEncoding("iso-8859-1");
                encoding = "latin-1";
            }

            var res = StringOps.DoEncode(context, input, errors, encoding, e, true);

            return(PythonTuple.MakeTuple(res, res.Count));
        }
예제 #5
0
 public static object encode(CodeContext /*!*/ context, object?obj, [NotNull, DisallowNull] string?encoding = null, [NotNull] string errors = "strict")
 {
     if (encoding == null)
     {
         if (obj is string str)
         {
             PythonContext lc = context.LanguageContext;
             return(StringOps.DoEncode(context, str, errors, lc.GetDefaultEncodingName(), lc.DefaultEncoding, includePreamble: true));
         }
         else
         {
             throw PythonOps.TypeError("expected str, got {0}", PythonTypeOps.GetName(obj));
         }
     }
     else
     {
         object?encoder = lookup(context, encoding)[EncoderIndex];
         if (!PythonOps.IsCallable(context, encoder))
         {
             throw PythonOps.TypeError("encoding with '{0}' codec failed; encoder must be callable ('{1}' object is not callable)", encoding, PythonTypeOps.GetName(encoder));
         }
         return(PythonOps.GetIndex(context, PythonCalls.Call(context, encoder, obj, errors), 0));
     }
 }
예제 #6
0
        private static Tuple <Bytes, int> DoEncode(CodeContext context, string encodingName, Encoding encoding, string input, string errors, bool includePreamble = false)
        {
            var res = StringOps.DoEncode(context, input, errors, encodingName, encoding, includePreamble);

            return(Tuple.Create(res, input.Length));
        }
예제 #7
0
        private static PythonTuple CharmapDecodeWorker(CodeContext context, string input, string errors, Encoding e, bool isDecode)
        {
            if (input.Length == 0)
            {
                return(PythonTuple.MakeTuple(String.Empty, 0));
            }

            string encoding = "charmap";

            // default to latin-1 if an encoding is not specified
            if (e == null)
            {
                e        = Encoding.GetEncoding("iso-8859-1");
                encoding = "latin-1";
            }

            string res = isDecode ? StringOps.DoDecode(context, input, errors, encoding, e) : StringOps.DoEncode(context, input, errors, encoding, e);

            return(PythonTuple.MakeTuple(res, res.Length));
        }