Author: IBM_User
Last saved by: Niti Hantaweepant
Company: IBM

Joint Copyright Assignment by Contributor
To International Business Machines Corporation ("IBM")
Contact Information:
Name:	Adobe Systems Incorporated	
Representative:	Niti Hantaweepant	
E-mail:	nhantawe@adobe.com	
Mailing Address:	345 Park Ave	
	San Jose CA 95110	
Telephone:	408-536-2478	
Facsimile:	408-537-4243	
Country:	United States	
Contributor represents that it owns, and has sufficient rights to contribute, all source code and related material (the "Contribution") intended to be compiled or integrated with the source code and related material for the ICU open source project (including ICU4C, ICU4J and ICU4JNI) which Contributor delivers, and IBM accepts, for incorporation into the ICU open source project.
The Contribution consists of the following source code and related material. Please describe the contribution briefly, list all filenames of added or modified files, and give an estimated number of lines of code added or modified per file.
As ICU4J relies on JDK to provide character set conversion, and ICU4JNI calls conversion module in ICU4C using JNI, we have a specific requirement that needs more complete character set conversion than what JDK provides, and all to be implemented in Java. Therefore, we decided to port this module from ICU4C to ICU4J, resulting in the following changes and specifications.

A class name will be followed by ported ICU4C file name(s) if applicable. 

com.ibm.icu.charset
ICU4JNI Classes
CharsetDecoderICU.java
CharsetEncoderICU.java
CharsetICU.java
CharsetProviderICU.java

com.ibm.icu.common
ICU4JNI Classes
ErrorCode.java - added some constants in utypes.h
	(utypes.h)

com.ibm.icu.converters
ICU4JNI Classes
ByteToCharConverterICU.java
ByteToCharGB18030.java
CharToByteConverterICU.java
CharToByteGB18030.java
NativeConverter.java – added body implementation
(ConverterInterface.h, ConverterInterface.c)

New Classes
UConverter.java – implements UConverterConstants
(ucnv.c, ucnv_cnv.c, ucnv_err.c)

com.ibm.icu.dev.test.converters
ICU4JNI Classes
TestConverter.java

com.ibm.icu.dev.test.converters.tool
	This package facilitates conversion testing by a data-driven test framework. XML test data can be used and shared among test suites using TestClass, and UCM file can be converted to XML test data file using UCMConverter class.
	New Classes
		ConversionUtility.java
		TestCase.java
		TestClass.java
		TestDataFromUToU.java
		TestDataToUFromU.java
		UCMConverter.java

com.ibm.icu.dev.tool.converter
	New Classes
		JUConverter.java – a tool similar to uconv in C API for converter information and data conversion

com.ibm.icu.impl
New Classes
UConverterAlias.java – contains all alias-related methods and constants
			(ucnv_bld.c, ucnv_io.h, ucnv_io.c)
		UConverterAliasDataReader.java – reads cnvalias.icu
		UConverterAliasesEnumeration.java – implements UEnumeration
			(ucnv_io.c, uenum.c)
UConverterCallback.java - contains callback-related classes and interfaces.
(ucnv_err.h, ucnv_cb.c)
UConverterContants.java – interface containing constants of UConverter
(pwin32.h, uloc.h, utf.h, ucnv.h, ucnv_bld.h, ucnv_cnv.h, utf16.h	, ucnv_err.h)
		UConverterDataReader.java – reads .cnv data file
UConverterExt.java
	(ucnv_ext.h, ucnv_ext.c)
		UConverterFromUnicodeArgs.java
			(ucnv_err.h)
		UConverterLoadArgs.java
			(ucnv_cnv.h)
		UConverterSharedData_ASCII.java
(ucnvlat1.c)
UConverterSharedData_ISCII.java
			(ucnvisci.c)
UConverterSharedData_ISO2022.java
			(ucnv2022.c)
UConverterSharedData_Latin1.java
			(ucnvlat1.c)
UConverterSharedData_MacArabic.java
		UConverterSharedData_MacHebrew.java
UConverterSharedData_MBCS.java
			(ucnvmbcs.c)
		UConverterSharedData_UTF16.java
			(ucnv_u16.c)
UConverterSharedData_UTF16BE.java
	(ucnv_u16.c)
UConverterSharedData_UTF16LE.java
			(ucnv_u16.c)
		UConverterSharedData_UTF32.java
			(ucnv_u32.c)
UConverterSharedData_UTF32BE.java
	(ucnv_u32.c)
UConverterSharedData_UTF32LE.java
			(ucnv_u32.c)
		UConverterSharedData_UTF8.java
			(ucnv_u8.c)
UConverterSharedData.java - Template method pattern
(ucnv_imp.h)
		UConverterStaticData.java
			(ucnv_bld.h)
		UConverterToUnicodeArgs.java
			(ucnv_err.h)
		UConverterUInvChar.java
			(uinvchar.c)
		UConverterUTF.java
			(utf.h)
UConverterUTF16.java
			(utf16.h)
		UConverterUTF8.java
			(utf8.h)
		UConverterUtility.java - contains utility methods of UConverter.
			(string.h, ucnv_cnv.h, ucnv_cnv.c, ucnv_cb.c)
		UEnumeration.java - Interface for UEnumeration
			(uenum.h)
UMachine.java
			(umachine.h)

Data

src/com/ibm/icu/impl/data/cnvresdata.jar – contains .cnv data files

Modified 
convrtrs.txt: Added more codepages

ISCII,version=0,mac         MacDevanagari
ISCII,version=2,mac         MacGurmukhi
ISCII,version=3,mac         MacGujarati
macchinesesimp MacChineseSimplified
macchinesetrad MacChineseTraditional
macjapanese
mackorean
macthai
macsymbol macsym
macgreek macgr
maccyrillic maccyr
macarabic
machebrew
windows-1361-2000 windows-1361 { WINDOWS* } ms1361 johab

Added
	icu\source\data\mappings: 
ucmlocal.mk
macchinesesimp.ucm
macchinesetrad.ucm
maccyrillic.ucm
macgreek.ucm
macjapanese.ucm
mackorean.ucm
macsymbol.ucm
macthai.ucm
windows-1361-2000.ucm

Build file

Modified
icu4j/build.xml

Note
-	Not every method was ported; depending on usage.
-	The method names were kept to be consistent with C API (ICU4C)
-	ICU4JNI classes: some minor changes were made except NativeConverter in which the actual implementation was added
-	ICU4JNILoader is not needed
-	All UConverter classes’ names begin with UConverter*
-	Consolidated constants in UConverterConstants
-	Consolidated utility methods in UConverterUtility
-	Converter Data loading was done by file stream, not memory mapping like ICU4C

For good and valuable consideration, receipt of which Contributor acknowledges, Contributor hereby assigns to IBM joint copyright ownership in the Contribution.  Contributor retains joint ownership in the Contribution without restriction.  IBM and Contributor will jointly own the Contribution and each shall be free to use, execute, copy, make derivative works of, distribute, sell, license and otherwise transfer the Contribution and derivative works thereof at each party's sole discretion, without any obligation of accounting to the other.  
Contributor agrees that this assignment may be submitted by IBM to register a copyright in the Contribution.  
Contributor agrees not to initiate suit asserting any Patent Rights in the Contribution against those who use or distribute the Contribution or the Contribution in combination with the ICU project code to which it was contributed:  (1) only if such use or distribution is for the purpose of implementing the ICU APIs; and (2) with respect to combinations, only if, at the time the Contribution is submitted by the Contributor, the addition of the Contribution causes such combination to be covered by the Patent Rights.    
Patent Rights mean patent claims licensable by the Contributor which are necessarily infringed by the use or distribution of the Contribution alone or when combined with the ICU project code.
Notwithstanding the above, this agreement not to initiate suit by Contributor shall not apply to any party who asserts its own patent rights against the Contributor.
This Copyright Assignment shall be governed by the substantive Laws of the State of New York notwithstanding the choice of law provisions and the Intellectual Property Laws of the United States of America.
THE CONTRIBUTION IS OTHERWISE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE CONTRIBUTION OR THE USE OR OTHER DEALINGS IN THE CONTRIBUTION.

Contributor Questionnaire

1)	Did you write all the Contribution yourself?
No.		

2)	If not, who else is an author?
Zartaj Majeed		

3)	Did you refer to any third party material or code when you wrote the Contribution?
Yes, Unicode (http://www.unicode.org), Java (http://java.sun.com)		

4)	If you are employed by a university (or are a student thereof), corporation or other entity, please confirm that you have been given permission by the university, corporation or other entity to assign joint copyright rights to the Contribution, if applicable.
I confirm that I have been given permission by Adobe Systems Incorporated to assign joint copyright rights to the Contribution.		

5)	Do you the individual Contributor or, where the Contributor is an entity, the individual(s) involved in the authoring and/or submission of the Contribution, know of any rights such as patents or contract restrictions related to the Contribution that would affect its use and distribution by others?
No		

(E.g., To Contributor's actual knowledge on the date this document is signed by Contributor, and without further inquiry or any patent search, no.)

Signed:	Niti Hantaweepant	
Date:	12/09/2005	
Printed Name and Title:	Niti Hantaweepant, MTS Globalization Technologies	

Please complete this assignment form electronically, email it to the requester or to icuintl@us.ibm.com and then print and sign it and send it to the following address:
IBM
ICU Project, c/o Markus Scherer
MS 50-2/B11
5600 Cottle Rd
San Jose, CA 95193
USA