holder.enc2 = EncodingUtils.rbToEncoding(context, v1); IRubyObject tmp = v2.checkStringType(); holder.enc2 = null; } else { holder.enc = EncodingUtils.rbToEncoding(context, internalAsString); holder.enc = EncodingUtils.rbToEncoding(context, v2); EncodingUtils.SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(holder.getEnc2(), ecflags); ecflags = EncodingUtils.econvPrepareOptions(context, opt, ecopts_p, ecflags); } else { if (v1.isNil()) { EncodingUtils.ioExtIntToEncs(context, holder, null, null, 0); EncodingUtils.SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(holder.getEnc2(), ecflags); ecopts_p[0] = context.nil; } else { IRubyObject tmp = v1.checkStringType(); if (tmp != nil && EncodingUtils.encAsciicompat(EncodingUtils.encGet(context, tmp))) { EncodingUtils.parseModeEncoding(context, holder, tmp.asJavaString(), null); EncodingUtils.SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(holder.getEnc2(), ecflags); ecflags = EncodingUtils.econvPrepareOptions(context, opt, ecopts_p, ecflags); } else { EncodingUtils.ioExtIntToEncs(context, holder, EncodingUtils.rbToEncoding(context, v1), null, 0); EncodingUtils.SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(holder.getEnc2(), ecflags); EncodingUtils.validateEncodingBinmode(context, fmode_p, ecflags, holder); openFile.setMode(fmode_p[0]);
public static Encoding defineDummyEncoding(ThreadContext context, byte[] name) { Encoding dummy = encReplicate(context, name, ascii8bitEncoding(context.runtime)); // TODO: set dummy on encoding; this probably should live in jcodings return dummy; }
@JRubyMethod(compat = RUBY1_9) public IRubyObject set_encoding(ThreadContext context, IRubyObject ext_enc) { Encoding enc; if (ext_enc.isNil()) { enc = EncodingUtils.defaultExternalEncoding(context.runtime); } else { enc = EncodingUtils.rbToEncoding(context, ext_enc); } ptr.string.setEncoding(enc); return this; }
public static void transcodeLoop(ThreadContext context, ByteList fromp, ByteList dest, byte[] sname, byte[] dname, int ecflags, IRubyObject ecopts) { Transcoder ec; ec = econvOpenOpts(context, sname, dname, ecflags, ecopts); if (ec == null) { throw econvOpenExc(context, sname, dname, ecflags); } // TODO: fallback function RubyCoderResult result = ec.transcode(context, fromp, dest); }
protected void ecopts(ThreadContext context, IRubyObject opts) { if (!opts.isNil()) { EncodingUtils.ioExtractEncodingOption(context, this, opts, null); } if (enc2 != null) { IRubyObject[] outOpts = new IRubyObject[]{opts}; ecflags = EncodingUtils.econvPrepareOpts(context, opts, outOpts); ec = EncodingUtils.econvOpenOpts(context, enc.getName(), enc2.getName(), ecflags, opts); ecopts = opts; } }
ioExtIntToEncs(context, ioEncodable, null, null, 0); if (vmode(vmodeAndVperm_p) == null || vmode(vmodeAndVperm_p).isNil()) { fmode_p[0] = OpenFile.READABLE; oflags_p[0] = ModeFlags.RDONLY; } else { intmode = TypeConverter.checkIntegerType(context, vmode(vmodeAndVperm_p)); vmode(vmodeAndVperm_p, intmode); oflags_p[0] = RubyNumeric.num2int(intmode); fmode_p[0] = ModeFlags.getOpenFileFlagsFor(oflags_p[0]); } else { String p = vmode(vmodeAndVperm_p).convertToString().asJavaString(); fmode_p[0] = OpenFile.ioModestrFmode(runtime, p); oflags_p[0] = OpenFile.ioFmodeOflags(fmode_p[0]); parseModeEncoding(context, ioEncodable, p.substring(colonSplit + 1), fmode_p); } else { Encoding e = (fmode_p[0] & OpenFile.BINMODE) != 0 ? ascii8bitEncoding(runtime) : null; ioExtIntToEncs(context, ioEncodable, e, null, fmode_p[0]); ? MODE_BTMODE(fmode_p[0], ECONV_DEFAULT_NEWLINE_DECORATOR, 0, EConvFlags.UNIVERSAL_NEWLINE_DECORATOR) : 0; if (TEXTMODE_NEWLINE_DECORATOR_ON_WRITE != 0) { ecflags |= (fmode_p[0] & OpenFile.WRITABLE) != 0 ? MODE_BTMODE(fmode_p[0], TEXTMODE_NEWLINE_DECORATOR_ON_WRITE, 0, TEXTMODE_NEWLINE_DECORATOR_ON_WRITE) : 0; ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags);
if (arg1 == null || arg1.isNil()) { if (ecflags == 0) return null; arg1 = objEncoding(context, str); dencindex = strTranscodeEncArgs(context, str, arg1, arg2, sname_p, senc_p, dname_p, denc_p); if (encodingEqual(sname_p[0], dname_p[0])) { return arg2.isNil() ? null : dencindex; if (encodingEqual(sname_p[0], dname_p[0])) { sname_p[0] = NULL_BYTE_ARRAY; dname_p[0] = NULL_BYTE_ARRAY; ByteList destp = dest.getByteList(); transcodeLoop(context, fromp, destp, sname_p[0], dname_p[0], ecflags, ecopts); dencindex = defineDummyEncoding(context, dname_p[0]);
writeconv = EncodingUtils.econvOpenOpts(context, EMPTY_BYTE_ARRAY, EMPTY_BYTE_ARRAY, ecflags, ecopts); if (writeconv == null) { throw EncodingUtils.econvOpenExc(context, EMPTY_BYTE_ARRAY, EMPTY_BYTE_ARRAY, ecflags); Encoding tmpEnc = EncodingUtils.econvAsciicompatEncoding(enc); senc = tmpEnc == null ? null : tmpEnc.getName(); if (senc == null && (encs.ecflags & EConvFlags.STATEFUL_DECORATOR_MASK) == 0) { writeconv = EncodingUtils.econvOpenOpts(context, senc, denc, ecflags, ecopts); if (writeconv == null) { throw EncodingUtils.econvOpenExc(context, senc, denc, ecflags);
ec = EncodingUtils.econvInitByConvpath(context, convpath, encNames, encs); ecflags[0] = 0; ecopts[0] = context.nil; } else { EncodingUtils.econvArgs(context, args, encNames, encs, ecflags, ecopts); ec = EncodingUtils.econvOpenOpts(context, encNames[0], encNames[1], ecflags[0], ecopts[0]); throw EncodingUtils.econvOpenExc(context, encNames[0], encNames[1], ecflags[0]); if (!EncodingUtils.DECORATOR_P(encNames[0], encNames[1])) { if (encs[0] == null) { encs[0] = EncodingDB.dummy(encNames[0]).getEncoding();
TranscodeFallback fallbackFunc = null; ec = econvOpenOpts(context, sname, dname, ecflags, ecopts); throw econvOpenExc(context, sname, dname, ecflags); boolean success = transcodeLoop(ec, fallbackFunc, context, fallback, inBytes, inPos, outBytes, outPos, inStop, _outStop, destination, resizeFunction); RaiseException re = makeEconvException(runtime, ec); ec.close(); throw re;
if (!writeconvAsciicompat.isNil()) common_encoding = writeconvAsciicompat; else if (EncodingUtils.MODE_BTMODE(fmode, EncodingUtils.DEFAULT_TEXTMODE, 0, 1) != 0 && !((RubyString) str).getEncoding().isAsciiCompatible()) { throw context.runtime.newArgumentError("ASCII incompatible string written for text mode IO without encoding conversion: %s" + ((RubyString) str).getEncoding().toString()); if (encs.enc2 != null) common_encoding = context.runtime.getEncodingService().convertEncodingToRubyEncoding(encs.enc2); else if (encs.enc != EncodingUtils.ascii8bitEncoding(context.runtime)) common_encoding = context.runtime.getEncodingService().convertEncodingToRubyEncoding(encs.enc); str = EncodingUtils.rbStrEncode(context, str, common_encoding, writeconvPreEcflags, writeconvPreEcopts); str = context.runtime.newString(EncodingUtils.econvStrConvert(context, writeconv, ((RubyString) str).getByteList(), EConvFlags.PARTIAL_INPUT));
final Encoding enc = getEncoding(); final Encoding encStr = str.getEncoding(); if (enc != encStr && enc != EncodingUtils.ascii8bitEncoding(runtime) str = EncodingUtils.strConvEnc(context, str, encStr, enc); EncodingUtils.encStrBufCat(runtime, ptr.string, strByteList, enc); } else { strioExtend(ptr.pos, len);
@JRubyMethod public IRubyObject binmode(ThreadContext context) { ptr.enc = EncodingUtils.ascii8bitEncoding(context.runtime); if (writable()) ptr.string.setEncoding(ptr.enc); return this; }
final IRubyObject[] convpath = {nil}; EncodingUtils.econvArgs(context, argv, encNames, encs, ecflags_p, ecopts_p); throw EncodingUtils.econvOpenExc(context, encNames[0], encNames[1], 0); if (EncodingUtils.decorateConvpath(context, convpath[0], ecflags_p[0]) == -1) { throw EncodingUtils.econvOpenExc(context, encNames[0], encNames[1], ecflags_p[0]);
if (enc != enc2 && enc != EncodingUtils.ascii8bitEncoding(runtime) EncodingUtils.encStrBufCat(runtime, ptr.string, str.getByteList(), enc); } else { strioExtend(ptr.pos, len);
ByteList convert_byte(ByteList str, String inputCharset, NKFCharset output) { String outputCharset = output.getCharset(); if (inputCharset == null) { inputCharset = str.getEncoding().toString(); } if (outputCharset.equals(inputCharset)) { return str.dup(); } byte[] outCharsetBytes = outputCharset.getBytes(); EConv ec = EncodingUtils.econvOpenOpts(context, inputCharset.getBytes(), outCharsetBytes, 0, context.nil); if (ec == null) { throw context.runtime.newArgumentError("invalid encoding pair: " + inputCharset + " to " + outputCharset); } ByteList converted = EncodingUtils.econvStrConvert(context, ec, str, EConvFlags.INVALID_REPLACE); converted.setEncoding(context.runtime.getEncodingService().findEncodingOrAliasEntry(outCharsetBytes).getEncoding()); return converted; } }
public static RaiseException econvOpenExc(ThreadContext context, byte[] sourceEncoding, byte[] destinationEncoding, int ecflags) { String message = econvDescription(context, sourceEncoding, destinationEncoding, ecflags, "code converter not found (") + ")"; return context.runtime.newConverterNotFoundError(message); }
public Encoding readEncoding(Ruby runtime) { return encs.enc != null ? encs.enc : EncodingUtils.defaultExternalEncoding(runtime); }
Transcoder ec = EncodingUtils.econvOpenOpts(context, fromEncoding.getName(), toEncoding.getName(), ecflags, ecopts); if (ec == null) return value;
ecflags = econvOpts(context, opthash, ecflags);