1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Loads the contents of a file all at once and passes its contents off to 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * {@link org.antlr.runtime.ANTLRStringStream}. 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Currently this class can only be used in the Rhino JS interpreter. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @class 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @extends org.antlr.runtime.ANTLRStringStream 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @param {String} fileName path of the file to be loaded 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @param {String} [encoding] name of the charset used for decoding 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.runtime.ANTLRFileStream = function(fileName, encoding) { 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.fileName = fileName; 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // @todo need to add support for other JS interpreters that have file i/o 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // hooks (SpiderMonkey and WSH come to mind). 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var method; 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (org.antlr.env.ua.rhino) { 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver method = "loadFileUsingJava"; 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } else { 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new Error( 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "ANTLR File I/O is not supported in this JS implementation." 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ); 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var data = this[method](fileName, encoding); 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver org.antlr.runtime.ANTLRFileStream.superclass.constructor.call(this, data); 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.lang.extend(org.antlr.runtime.ANTLRFileStream, 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver org.antlr.runtime.ANTLRStringStream, 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** @lends org.antlr.runtime.ANTLRFileStream.prototype */{ 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Get the file path from which the input was loaded. 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @returns {String} the file path from which the input was loaded 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver getSourceName: function() { 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return this.fileName; 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver }, 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Read the file and return its contents as a JS string. 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @private 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @param {String} fileName path of the file to be loaded 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @param {String} [encoding] name of the charset used for decoding 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @returns {String} the contents of the file 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver loadFileUsingJava: function(fileName, encoding) { 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // read the file using Java methods 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var f = new java.io.File(fileName), 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver size = f.length(), 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr, 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver fis = new java.io.FileInputStream(f); 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (encoding) { 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr = new java.io.InputStreamReader(fis, encoding); 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } else { 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr = new java.io.InputStreamReader(fis); 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var data = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, size); 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isr.read(data, 0, size); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // convert java char array to a javascript string 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return new String(new java.lang.String(data)); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}); 64