1 /* ***** BEGIN LICENSE BLOCK *****
  2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3  *
  4  * The contents of this file are subject to the Mozilla Public License Version
  5  * 1.1 (the "License"); you may not use this file except in compliance with
  6  * the License. You may obtain a copy of the License at
  7  * http://www.mozilla.org/MPL/
  8  *
  9  * Software distributed under the License is distributed on an "AS IS" basis,
 10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 11  * for the specific language governing rights and limitations under the
 12  * License.
 13  *
 14  * The Initial Developer of the Original Code is Fireinput Inc.
 15  *
 16  * Portions created by the Initial Developer are Copyright (C) 2007
 17  * the Initial Developer. All Rights Reserved.
 18  *
 19  * Contributor(s):
 20  *     Olly Ja <ollyja@gmail.com>
 21  *
 22  * Alternatively, the contents of this file may be used under the terms of
 23  * either the GNU General Public License Version 2 or later (the "GPL"), or
 24  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 25  * in which case the provisions of the GPL or the LGPL are applicable instead
 26  * of those above. If you wish to allow use of your version of this file only
 27  * under the terms of either the GPL or the LGPL, and not to allow others to
 28  * use your version of this file under the terms of the MPL, indicate your
 29  * decision by deleting the provisions above and replace them with the notice
 30  * and other provisions required by the GPL or the LGPL. If you do not delete
 31  * the provisions above, a recipient may use your version of this file under
 32  * the terms of any one of the MPL, the GPL or the LGPL.
 33  *
 34  * ***** END LICENSE BLOCK ***** 
 35  */
 36 
 37  
 38 var PinyinEncodingTable = function() { this.initialize(); }; 
 39 
 40 PinyinEncodingTable.prototype = extend(new FireinputIME(), 
 41 {
 42     debug: 0, 
 43 
 44     big5EncodingHash: null, 
 45 
 46     simpEncodingHash: null, 
 47 
 48     initialize: function()
 49     {
 50        var ios = IOService.getService(Components.interfaces.nsIIOService);
 51        var fileHandler = ios.getProtocolHandler("file")
 52                          .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
 53 
 54        var path = this.getDataPath();
 55        var datafile = fileHandler.getFileFromURLSpec(path + this.getPinyinTransformFile());
 56 
 57        this.big5EncodingHash = new FireinputHash();
 58        this.simpEncodingHash = new FireinputHash();
 59 
 60        var options = {
 61           caller: this,
 62           onavailable: this.getCodeLine
 63        };
 64 
 65        FireinputStream.loadDataAsync(datafile, options);
 66     },
 67 
 68     getCodeLine: function(str)
 69     {
 70        var strArray = new Array();
 71        strArray = str.split('=>');
 72        if(strArray.length < 2)
 73           return;
 74 
 75        var str0 = FireinputUnicode.getUnicodeString(strArray[0]); 
 76        var str1 = FireinputUnicode.getUnicodeString(strArray[1]); 
 77        
 78        this.simpEncodingHash.setItem(str0, str1);
 79        this.big5EncodingHash.setItem(str1, str0);
 80     },
 81 
 82     switchToZH: function(charCode)
 83     {
 84        if(this.big5EncodingHash.hasItem(charCode))
 85           return this.big5EncodingHash.getItem(charCode); 
 86        else
 87           return charCode; 
 88     }, 
 89 
 90     switchToBig5: function(charCode)
 91     {
 92        if(this.simpEncodingHash.hasItem(charCode))
 93           return this.simpEncodingHash.getItem(charCode); 
 94        else
 95           return charCode; 
 96     },
 97 
 98     validEncoding: function(charCode, encoding)
 99     {
100        charCode = FireinputUnicode.getUnicodeString(charCode); 
101 
102        switch(encoding)
103        {
104           case ENCODING_ZH: 
105              return (this.simpEncodingHash.hasItem(charCode) || 
106                 !this.big5EncodingHash.hasItem(charCode)); 
107               
108           break; 
109           case ENCODING_BIG5: 
110              return (!this.simpEncodingHash.hasItem(charCode) || 
111                 this.big5EncodingHash.hasItem(charCode)); 
112           break; 
113        }
114 
115        return true; 
116     }          
117  
118 }); 


syntax highlighted by Code2HTML, v. 0.9.1