/** * encodingSwithcer (vimperator plugin) * @author teramako teramako@gmail.com * @version 0.1 * * Usage: * * change encoding * :set fileencoding = {encodeName} * :set fenc = {encodeName} * * list available encodings * :listencoding [expr] * :lsenc [expr] * * change auto detector * :set autodetector = {detectorName} * :set audet = {detectorName} * * list available auto detectors * :listdetector [expr] * :lsdet [expr] */ (function(){ var encodings = []; var detectors = []; const Cc = Components.classes; const Ci = Components.interfaces; if (!RDF) var RDF = Cc['@mozilla.org/rdf/rdf-service;1'].getService(Ci.nsIRDFService); if (!RDFCU) var RDFCU = Cc['@mozilla.org/rdf/container-utils;1'].getService(Ci.nsIRDFContainerUtils); var cm = RDF.GetDataSource('rdf:charset-menu'); var sbService = Cc['@mozilla.org/intl/stringbundle;1'].getService(Ci.nsIStringBundleService); var sbCharTitle = sbService.createBundle('chrome://global/locale/charsetTitles.properties'); CreateMenu('browser'); CreateMenu('more-menu'); var allEnum = cm.GetAllResources(); while (allEnum.hasMoreElements()){ var res = allEnum.getNext().QueryInterface(Ci.nsIRDFResource); var value = res.Value; if (RDFCU.IsContainer(cm, res) || value.indexOf('charset.') == 0 || value.indexOf('----') == 0) { continue; } var label = sbCharTitle.GetStringFromName(value.toLowerCase() + '.title'); if (res.Value.indexOf('chardet.') == 0){ value = value.substr('chardet.'.length); var buf = createDetector(value); buf[1] = label; detectors.push(buf); } else { encodings.push([value,label]); } } function createDetector(name){ var i = name.indexOf('_'); if ( i > 0 ){ return [name.substr(0,i),null,name.substr(i)]; } return [name,null,'']; } function getDetector(name){ for (var i=0; i'); list.forEach(function(i){ if (reg.test(i[0]) || reg.test(i[1])){ str.push(''); if (current == i[0]){ str.push('' + i[0] + '' + i[1] + ''); } else { str.push('' + i[0] + '' + i[1] + ''); } str.push(''); } }); str.push(''); liberator.echo( str.join(''), true); } liberator.commands.addUserCommand(['listencoding','lsenc'],'list all encodings', function(arg){ listCharset(arg, liberator.options.fileencoding, encodings); },{ completer: function(filter){ return [0,completion(encodings, filter)]; } } ); liberator.commands.addUserCommand(['listdetector','lsdet'],'list all auto detectors', function(arg){ listCharset(arg, liberator.options.autodetector, detectors); },{ completer: function(filter){ return [0,completion(detectors, filter)]; } } ); })(); // vim: set fdm=marker sw=4 ts=4 et: