#
# Copyright (c) 2011, 2014, 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_DST := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/nio/charset

GENSRC_CHARSETCODER_SRC := $(JDK_TOPDIR)/src/java.base/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='<code>"\&#92;uFFFD"<\/code>' \
	    -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='<code>{<\/code>\&nbsp;<code>(byte)'"'"\\?"'"'<\/code>\&nbsp;<code>}<\/code>' \
	    -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_JAVA_BASE += $(GENSRC_CHARSETCODER)

################################################################################

$(GENSRC_CHARSETCODER): $(BUILD_TOOLS_JDK)
