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 = FireinputXPC.getIOService(); 
 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        if(!datafile.exists())
 60        {
 61           return; 
 62        }
 63 
 64        var options = {
 65           caller: this,
 66           onavailable: this.getCodeLine
 67        };
 68 
 69        FireinputStream.loadDataAsync(datafile, options);
 70     },
 71 
 72     getCodeLine: function(str)
 73     {
 74        var strArray = new Array();
 75        strArray = str.split('=>');
 76        if(strArray.length < 2)
 77           return;
 78 
 79        var str0 = FireinputUnicode.getUnicodeString(strArray[0]); 
 80        var str1 = FireinputUnicode.getUnicodeString(strArray[1]); 
 81        
 82        this.simpEncodingHash.setItem(str0, str1);
 83        this.big5EncodingHash.setItem(str1, str0);
 84     },
 85 
 86     switchToZH: function(charCode)
 87     {
 88        if(this.big5EncodingHash.hasItem(charCode))
 89           return this.big5EncodingHash.getItem(charCode); 
 90        else
 91           return charCode; 
 92     }, 
 93 
 94     switchToBig5: function(charCode)
 95     {
 96        if(this.simpEncodingHash.hasItem(charCode))
 97           return this.simpEncodingHash.getItem(charCode); 
 98        else
 99           return charCode; 
100     },
101 
102     validEncoding: function(charCode, encoding)
103     {
104        charCode = FireinputUnicode.getUnicodeString(charCode); 
105 
106        switch(encoding)
107        {
108           case ENCODING_ZH: 
109              return (this.simpEncodingHash.hasItem(charCode) || 
110                 !this.big5EncodingHash.hasItem(charCode)); 
111               
112           break; 
113           case ENCODING_BIG5: 
114              return (!this.simpEncodingHash.hasItem(charCode) || 
115                 this.big5EncodingHash.hasItem(charCode)); 
116           break; 
117        }
118 
119        return true; 
120     }          
121  
122 }); 


syntax highlighted by Code2HTML, v. 0.9.1