1 jls.loader.provide('jls.io.cs.SingleByteEncoder'); 2 3 jls.loader.require('jls.lang.ByteBuffer'); 4 5 jls.io.cs.SingleByteEncoder = jls.lang.Class.create( /** @lends jls.io.cs.SingleByteEncoder.prototype */ 6 { 7 /** 8 * Creates a character encoder. 9 * 10 * @constructs 11 * @class This class represents a single byte character set encoder. 12 */ 13 initialize : function(charset, mapping) { 14 this._charset = charset; 15 this._mapping = mapping; 16 this._replacement = '?'.charCodeAt(0); 17 }, 18 /** 19 * Encodes a string and returns a buffer. 20 * 21 * @param {jls.lang.CharBuffer} input The character buffer to encode. 22 * @param {jls.lang.ByteBuffer} [buffer] The buffer to use. 23 * @returns {jls.lang.ByteBuffer} The encoded buffer. 24 */ 25 encode : function(input, buffer) { 26 var output = buffer || jls.lang.ByteBuffer.allocate(input.remaining() + 1); 27 while (input.remaining() > 0) { 28 var c = input.getChar(); 29 var b; 30 if (c in this._mapping) { 31 b = this._mapping[c]; 32 } else { 33 b = this._replacement; 34 } 35 output.putByte(b); 36 } 37 return output; 38 } 39 }); 40 41 Object.extend(jls.io.cs.SingleByteEncoder, /** @lends jls.io.cs.SingleByteEncoder */ 42 { 43 reverseMapping : function(byteToCharCode) { 44 var charCodeToByte = []; 45 for (var i = 0; i < 256; i++) { 46 var cc = byteToCharCode[i]; 47 if (cc != null) { 48 charCodeToByte[cc] = i; 49 } else { 50 delete byteToCharCode[i]; 51 } 52 } 53 return charCodeToByte; 54 } 55 });