#
# Copyright (c) 2011, 2012, 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)
