#
# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

GENSRC_CHARSETCODER :=

GENSRC_CHARSETCODER_TMP := $(JDK_OUTPUTDIR)/gensrc
GENSRC_CHARSETCODER_DST := $(JDK_OUTPUTDIR)/gensrc/java/nio/charset

GENSRC_CHARSETCODER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio

GENSRC_CHARSETCODER_TEMPLATE := $(GENSRC_CHARSETCODER_SRC)/charset/Charset-X-Coder.java.template

###

$(GENSRC_CHARSETCODER_DST)/CharsetDecoder.java: $(GENSRC_CHARSETCODER_TEMPLATE)
	$(MKDIR) -p $(@D)
	-$(RM) $@.tmp
	$(TOOL_SPP) < $< >$@.tmp \
	    -Kdecoder \
	    -DA='A' \
	    -Da='a' \
	    -DCode='Decode' \
	    -Dcode='decode' \
	    -DitypesPhrase='bytes in a specific charset' \
	    -DotypesPhrase='sixteen-bit Unicode characters' \
	    -Ditype='byte' \
	    -Dotype='character' \
	    -DItype='Byte' \
	    -DOtype='Char' \
	    -Dcoder='decoder' \
	    -DCoder='Decoder' \
	    -Dcoding='decoding' \
	    -DOtherCoder='Encoder' \
	    -DreplTypeName='string' \
	    -DdefaultRepl='"\\uFFFD"' \
	    -DdefaultReplName='<tt>"\&#92;uFFFD"<\/tt>' \
	    -DreplType='String' \
	    -DreplFQType='java.lang.String' \
	    -DreplLength='length()' \
	    -DItypesPerOtype='CharsPerByte' \
	    -DnotLegal='not legal for this charset' \
	    -Dotypes-per-itype='chars-per-byte' \
	    -DoutSequence='Unicode character'
	$(MV) $@.tmp $@

GENSRC_CHARSETCODER += $(GENSRC_CHARSETCODER_DST)/CharsetDecoder.java

###

$(GENSRC_CHARSETCODER_DST)/CharsetEncoder.java: $(GENSRC_CHARSETCODER_TEMPLATE)
	$(MKDIR) -p $(@D)
	-$(RM) $@.tmp
	$(TOOL_SPP) < $< >$@.tmp \
	    -Kencoder \
	    -DA='An' \
	    -Da='an' \
	    -DCode='Encode' \
	    -Dcode='encode' \
	    -DitypesPhrase='sixteen-bit Unicode characters' \
	    -DotypesPhrase='bytes in a specific charset' \
	    -Ditype='character' \
	    -Dotype='byte' \
	    -DItype='Char' \
	    -DOtype='Byte' \
	    -Dcoder='encoder' \
	    -DCoder='Encoder' \
	    -Dcoding='encoding' \
	    -DOtherCoder='Decoder' \
	    -DreplTypeName='byte array' \
	    -DdefaultRepl='new byte[] { (byte)'"'"\\?"'"' }' \
	    -DdefaultReplName='<tt>{<\/tt>\&nbsp;<tt>(byte)'"'"\\?"'"'<\/tt>\&nbsp;<tt>}<\/tt>' \
	    -DreplType='byte[]' \
	    -DreplFQType='byte[]' \
	    -DreplLength='length' \
	    -DItypesPerOtype='BytesPerChar' \
	    -DnotLegal='not a legal sixteen-bit Unicode sequence' \
	    -Dotypes-per-itype='bytes-per-char' \
	    -DoutSequence='byte sequence in the given charset'
	$(MV) $@.tmp $@

GENSRC_CHARSETCODER += $(GENSRC_CHARSETCODER_DST)/CharsetEncoder.java

###

$(GENSRC_CHARSETCODER): $(BUILD_TOOLS)
