#
# Copyright 2000-2007 Sun Microsystems, Inc.  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.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.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

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
