#
# Copyright (c) 2000, 2008, 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.
#

# Standard charsets provided by StandardCharsets provider.
#
# Note that these "standard" charsets listed here are not
# necessary to be the "Standard charsets" defined in the
# specification of java.nio.charset.Charset. Instead these
# are the charsets that this implementation believes should
# be packaged into the charsets provider class "StandardCharsets"
# which is initialized at startup time by java.nio.charset.Charset,
# compared to the charsets packaged in "ExtendedCharsets" provider,
# which is lazy initialized.

# This year should only change if the generated source is modified.
copyright 2000
package sun.nio.cs
class StandardCharsets

charset US-ASCII US_ASCII

    # IANA aliases
    alias iso-ir-6
    alias ANSI_X3.4-1986
    alias ISO_646.irv:1991
    alias ASCII
    alias ISO646-US
    alias us
    alias IBM367
    alias cp367
    alias csASCII
    alias default

    # Other aliases
    alias 646				# Solaris POSIX locale
    alias iso_646.irv:1983
    alias ANSI_X3.4-1968		# Linux POSIX locale (RedHat)
    alias ascii7

charset UTF-8 UTF_8
    alias UTF8				# JDK historical
    alias unicode-1-1-utf-8

charset UTF-16 UTF_16
    alias UTF_16			# JDK historical
    alias utf16
    alias unicode
    alias UnicodeBig

charset UTF-16BE UTF_16BE
    alias UTF_16BE
    alias ISO-10646-UCS-2
    alias X-UTF-16BE
    alias UnicodeBigUnmarked

charset UTF-16LE UTF_16LE
    alias UTF_16LE
    alias X-UTF-16LE
    alias UnicodeLittleUnmarked

charset x-UTF-16LE-BOM UTF_16LE_BOM
    alias UnicodeLittle

charset UTF-32 UTF_32
    alias UTF_32
    alias UTF32

charset UTF-32LE UTF_32LE
    alias UTF_32LE
    alias X-UTF-32LE

charset UTF-32BE UTF_32BE
    alias UTF_32BE
    alias X-UTF-32BE

charset X-UTF-32LE-BOM UTF_32LE_BOM
    alias UTF_32LE_BOM
    alias UTF-32LE-BOM

charset X-UTF-32BE-BOM UTF_32BE_BOM
    alias UTF_32BE_BOM
    alias UTF-32BE-BOM

charset ISO-8859-1 ISO_8859_1

    # IANA aliases
    alias iso-ir-100
    alias ISO_8859-1
    alias latin1
    alias l1
    alias IBM819
    alias cp819
    alias csISOLatin1

    # Other aliases
    alias 819
    alias IBM-819
    alias ISO8859_1
    alias ISO_8859-1:1987
    alias ISO_8859_1
    alias 8859_1
    alias ISO8859-1

charset ISO-8859-2 ISO_8859_2
    alias iso8859_2			# JDK historical
    alias 8859_2
    alias iso-ir-101
    alias ISO_8859-2
    alias ISO_8859-2:1987
    alias ISO8859-2
    alias latin2
    alias l2
    alias ibm912
    alias ibm-912
    alias cp912
    alias 912
    alias csISOLatin2

charset ISO-8859-4 ISO_8859_4
    alias iso8859_4			# JDK historical
    alias iso8859-4
    alias 8859_4
    alias iso-ir-110
    alias ISO_8859-4
    alias ISO_8859-4:1988
    alias latin4
    alias l4
    alias ibm914
    alias ibm-914
    alias cp914
    alias 914
    alias csISOLatin4

charset ISO-8859-5 ISO_8859_5
    alias iso8859_5			# JDK historical
    alias 8859_5
    alias iso-ir-144
    alias ISO_8859-5
    alias ISO_8859-5:1988
    alias ISO8859-5
    alias cyrillic
    alias ibm915
    alias ibm-915
    alias cp915
    alias 915
    alias csISOLatinCyrillic

charset ISO-8859-7 ISO_8859_7
    alias iso8859_7			# JDK historical
    alias 8859_7
    alias iso-ir-126
    alias ISO_8859-7
    alias ISO_8859-7:1987
    alias ELOT_928
    alias ECMA-118
    alias greek
    alias greek8
    alias csISOLatinGreek
    alias sun_eu_greek			# Solaris 7/8 compatibility
    alias ibm813
    alias ibm-813
    alias 813
    alias cp813
    alias iso8859-7			# Solaris 9 compatibility

charset ISO-8859-9 ISO_8859_9
    alias iso8859_9			# JDK historical
    alias 8859_9
    alias iso-ir-148
    alias ISO_8859-9
    alias ISO_8859-9:1989
    alias ISO8859-9
    alias latin5
    alias l5
    alias ibm920
    alias ibm-920
    alias 920
    alias cp920
    alias csISOLatin5

charset ISO-8859-13 ISO_8859_13
    alias iso8859_13			# JDK historical
    alias 8859_13
    alias iso_8859-13
    alias ISO8859-13

charset ISO-8859-15 ISO_8859_15

    # IANA alias
    alias ISO_8859-15

    # Other aliases
    alias 8859_15
    alias ISO-8859-15
    alias ISO8859_15
    alias ISO8859-15
    alias IBM923
    alias IBM-923
    alias cp923
    alias 923
    alias LATIN0
    alias LATIN9
    alias L9
    alias csISOlatin0
    alias csISOlatin9
    alias ISO8859_15_FDIS

charset KOI8-R KOI8_R
    alias koi8_r			# JDK historical
    alias koi8
    alias cskoi8r

charset KOI8-U KOI8_U
    alias koi8_u

charset windows-1250 MS1250
    alias cp1250			# JDK historical
    alias cp5346			# Euro IBM CCSID

charset windows-1251 MS1251
    alias cp1251			# JDK historical
    alias cp5347			# Euro IBM CCSID
    alias ansi-1251			# Solaris compatibility

charset windows-1252 MS1252
    alias cp1252			# JDK historical
    alias cp5348			# Euro IBM CCSID

charset windows-1253 MS1253
    alias cp1253			# JDK historical
    alias cp5349			# Euro IBM CCSID

charset windows-1254 MS1254
    alias cp1254			# JDK historical
    alias cp5350			# Euro IBM CCSID

charset windows-1257 MS1257
    alias cp1257			# JDK historical
    alias cp5353			# Euro IBM CCSID


charset IBM437 IBM437
    alias cp437                         #JDK historical
    alias ibm437
    alias ibm-437
    alias 437
    alias cspc8codepage437
    alias windows-437

charset x-IBM737 IBM737
    alias cp737                         #JDK historical
    alias ibm737
    alias ibm-737
    alias 737

charset IBM775 IBM775
    alias cp775                         #JDK historical
    alias ibm775
    alias ibm-775
    alias 775

charset IBM850 IBM850
    alias cp850                         #JDK historical
    alias ibm-850
    alias ibm850
    alias 850
    alias cspc850multilingual

charset IBM852 IBM852
    alias cp852                         #JDK historical
    alias ibm852
    alias ibm-852
    alias 852
    alias csPCp852

charset IBM855 IBM855
    alias cp855                         #JDK historical
    alias ibm-855
    alias ibm855
    alias 855
    alias cspcp855

charset IBM857 IBM857
    alias cp857                         #JDK historical
    alias ibm857
    alias ibm-857
    alias 857
    alias csIBM857

charset IBM00858 IBM858
    alias cp858                         #JDK historical
    alias ccsid00858
    alias cp00858
    alias 858
    alias PC-Multilingual-850+euro

charset IBM862 IBM862
    alias cp862                         #JDK historical
    alias ibm862
    alias ibm-862
    alias 862
    alias csIBM862
    alias cspc862latinhebrew

charset IBM866 IBM866
    alias cp866                         #JDK historical
    alias ibm866
    alias ibm-866
    alias 866
    alias csIBM866

charset x-IBM874 IBM874
    alias cp874                         #JDK historical
    alias ibm874
    alias ibm-874
    alias 874
