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

include MakeIncludeStart.gmk
ifeq ($(INCLUDE), true)

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

GENSRC_CHARSETCODER :=

GENSRC_CHARSETCODER_DST := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/java/nio/charset

GENSRC_CHARSETCODER_SRC := $(MODULE_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)
	$(call MakeTargetDir)
	$(RM) $@.tmp
	$(call ExecuteWithLog, $(SUPPORT_OUTPUTDIR)/gensrc/java.base/_charset_decoder, \
	    $(TOOL_SPP) -i$< -o$@.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)
	$(call MakeTargetDir)
	$(RM) $@.tmp
	$(call ExecuteWithLog, $(SUPPORT_OUTPUTDIR)/gensrc/java.base/_charset_encoder, \
	    $(TOOL_SPP) -i$< -o$@.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_CHARSETCODER): $(BUILD_TOOLS_JDK)

TARGETS += $(GENSRC_CHARSETCODER)

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

endif # include guard
include MakeIncludeEnd.gmk
