/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page codec-big5.html
    \title Big5 Text Codec
    \ingroup codecs

    The Big5 codec provides conversion to and from the Big5 encoding.
    The code was originally contributed by Ming-Che Chuang
    \<mingche@cobra.ee.ntu.edu.tw\> for the Big-5+ encoding, and was
    included in Qt with the author's permission, and the grateful
    thanks of the Qt team. (Note: Ming-Che's code is QPL'd, as
    per an mail to qt-info@nokia.com.)

    However, since Big-5+ was never formally approved, and was never
    used by anyone, the Taiwan Free Software community and the Li18nux
    Big5 Standard Subgroup agree that the de-facto standard Big5-ETen
    (zh_TW.Big5 or zh_TW.TW-Big5) be used instead.

    The Big5 is currently implemented as a pure subset of the
    Big5-HKSCS codec, so more fine-tuning is needed to make it
    identical to the standard Big5 mapping as determined by
    Li18nux-Big5.  See \l{http://www.autrijus.org/xml/} for the draft
    Big5 (2002) standard.

    James Su \<suzhe@turbolinux.com.cn\> \<suzhe@gnuchina.org\>
    generated the Big5-HKSCS-to-Unicode tables with a very
    space-efficient algorithm. He generously donated his code to glibc
    in May 2002.  Subsequently, James has kindly allowed Anthony Fok
    \<anthony@thizlinux.com\> \<foka@debian.org\> to adapt the code
    for Qt.

    \sa{Text Codecs: Big5, Big5-HKSCS}
*/

/*!
    \page codec-big5hkscs.html
    \title Big5-HKSCS Text Codec
    \ingroup codecs

    The Big5-HKSCS codec provides conversion to and from the
    Big5-HKSCS encoding.

    The codec grew out of the QBig5Codec originally contributed by
    Ming-Che Chuang \<mingche@cobra.ee.ntu.edu.tw\>.  James Su
    \<suzhe@turbolinux.com.cn\> \<suzhe@gnuchina.org\> and Anthony Fok
    \<anthony@thizlinux.com\> \<foka@debian.org\> implemented HKSCS-1999
    QBig5hkscsCodec for Qt-2.3.x, but it was too late in Qt development
    schedule to be officially included in the Qt-2.3.x series.

    Wu Yi \<wuyi@hancom.com\> ported the HKSCS-1999 QBig5hkscsCodec to
    Qt-3.0.1 in March 2002.

    With the advent of the new HKSCS-2001 standard, James Su
    \<suzhe@turbolinux.com.cn\> \<suzhe@gnuchina.org\> generated the
    Big5-HKSCS<->Unicode tables with a very space-efficient algorithm.
    He generously donated his code to glibc in May 2002.  Subsequently,
    James has generously allowed Anthony Fok to adapt the code for
    Qt-3.0.5.

    Currently, the Big5-HKSCS tables are generated from the following
    sources, and with the Euro character added:
    \list 1
    \li \l{http://www.microsoft.com/typography/unicode/950.txt}
    \li \l{http://www.info.gov.hk/digital21/chi/hkscs/download/big5-iso.txt}
    \li \l{http://www.info.gov.hk/digital21/chi/hkscs/download/big5cmp.txt}
    \endlist

    There may be more fine-tuning to the QBig5hkscsCodec to maximize its
    compatibility with the standard Big5 (2002) mapping as determined by
    Li18nux Big5 Standard Subgroup.  See \l{http://www.autrijus.org/xml/}
    for the various Big5 CharMapML tables.

    \sa{Text Codecs: Big5, Big5-HKSCS}
*/

/*!
    \page codec-eucjp.html
    \title EUC-JP Text Codec
    \ingroup codecs

    The EUC-JP codec provides conversion to and from EUC-JP, the main
    legacy encoding for Unix machines in Japan.

    The environment variable \c UNICODEMAP_JP can be used to
    fine-tune the JIS, Shift-JIS, and EUC-JP codecs. The \l{ISO
    2022-JP (JIS) Text Codec} documentation describes how to use this
    variable.

    Most of the code here was written by Serika Kurusugawa,
    a.k.a. Junji Takagi, and is included in Qt with the author's
    permission and the grateful thanks of the Qt team.

    \sa{Text Codec: EUC-JP}
*/

/*!
    \page codec-euckr.html
    \title EUC-KR Text Codec
    \ingroup codecs

    The EUC-KR codec provides conversion to and from EUC-KR, KR, the
    main legacy encoding for Unix machines in Korea.

    It was largely written by Mizi Research Inc. Here is the
    copyright statement for the code as it was at the point of
    contribution. The subsequent modifications are covered by
    the usual copyright for Qt.

    \sa{Text Codec: EUC-KR}
*/

/*!
    \page codec-gbk.html
    \title GBK Text Codec
    \ingroup codecs

    The GBK codec provides conversion to and from the Chinese
    GB18030/GBK/GB2312 encoding.

    GBK, formally the Chinese Internal Code Specification, is a commonly
    used extension of GB 2312-80.  Microsoft Windows uses it under the
    name codepage 936.

    GBK has been superseded by the new Chinese national standard
    GB 18030-2000, which added a 4-byte encoding while remaining
    compatible with GB2312 and GBK.  The new GB 18030-2000 may be described
    as a special encoding of Unicode 3.x and ISO-10646-1.

    Special thanks to charset gurus Markus Scherer (IBM),
    Dirk Meyer (Adobe Systems) and Ken Lunde (Adobe Systems) for publishing
    an excellent GB 18030-2000 summary and specification on the Internet.
    Some must-read documents are:

    \list
    \li \l{ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf}
    \li \l{http://oss.software.ibm.com/cvs/icu/~checkout~/charset/source/gb18030/gb18030.html}
    \li \l{http://oss.software.ibm.com/cvs/icu/~checkout~/charset/data/xml/gb-18030-2000.xml}
    \endlist

    The GBK codec was contributed to Qt by
    Justin Yu \<justiny@turbolinux.com.cn\> and
    Sean Chen \<seanc@turbolinux.com.cn\>.  They may also be reached at
    Yu Mingjian \<yumj@sun.ihep.ac.cn\>, \<yumingjian@china.com\>
    Chen Xiangyang \<chenxy@sun.ihep.ac.cn\>

    The GB18030 codec Qt functions were contributed to Qt by
    James Su \<suzhe@gnuchina.org\>, \<suzhe@turbolinux.com.cn\>
    who pioneered much of GB18030 development on GNU/Linux systems.

    The GB18030 codec was contributed to Qt by
    Anthony Fok \<anthony@thizlinux.com\>, \<foka@debian.org\>
    using a Perl script to generate C++ tables from gb-18030-2000.xml
    while merging contributions from James Su, Justin Yu and Sean Chen.
    A copy of the source Perl script is available at
    \l{http://people.debian.org/~foka/gb18030/gen-qgb18030codec.pl}

    \sa{Text Codec: GBK}
*/

/*!
    \page codecs-jis.html
    \title ISO 2022-JP (JIS) Text Codec
    \ingroup codecs

    The JIS codec provides conversion to and from ISO 2022-JP.

    The environment variable \c UNICODEMAP_JP can be used to
    fine-tune the JIS, Shift-JIS, and EUC-JP codecs. The mapping
    names are as for the Japanese XML working group's
    \l{XML Japanese Profile},
    because it names and explains all the
    widely used mappings. Here are brief descriptions, written by
    Serika Kurusugawa:

    \list

    \li "unicode-0.9" or "unicode-0201" for Unicode style. This assumes
    JISX0201 for 0x00-0x7f. (0.9 is a table version of jisx02xx mapping
    used for Unicode 1.1.)

    \li "unicode-ascii" This assumes US-ASCII for 0x00-0x7f; some
    chars (JISX0208 0x2140 and JISX0212 0x2237) are different from
    Unicode 1.1 to avoid conflict.

    \li "open-19970715-0201" ("open-0201" for convenience) or
    "jisx0221-1995" for JISX0221-JISX0201 style. JIS X 0221 is JIS
    version of Unicode, but a few chars (0x5c, 0x7e, 0x2140, 0x216f,
    0x2131) are different from Unicode 1.1. This is used when 0x5c is
    treated as YEN SIGN.

    \li "open-19970715-ascii" ("open-ascii" for convenience) for
    JISX0221-ASCII style. This is used when 0x5c is treated as REVERSE
    SOLIDUS.

    \li "open-19970715-ms" ("open-ms" for convenience) or "cp932" for
    Microsoft Windows style. Windows Code Page 932. Some chars (0x2140,
    0x2141, 0x2142, 0x215d, 0x2171, 0x2172) are different from Unicode
    1.1.

    \li "jdk1.1.7" for Sun's JDK style. Same as Unicode 1.1, except that
    JIS 0x2140 is mapped to UFF3C. Either ASCII or JISX0201 can be used
    for 0x00-0x7f.

    \endlist

    In addition, the extensions "nec-vdc", "ibm-vdc" and "udc" are
    supported.

    For example, if you want to use Unicode style conversion but with
    NEC's extension, set \c UNICODEMAP_JP to \c {unicode-0.9,
    nec-vdc}. (You will probably need to quote that in a shell
    command.)

    Most of the code here was written by Serika Kurusugawa,
    a.k.a. Junji Takagi, and is included in Qt with the author's
    permission and the grateful thanks of the Qt team.

    \sa{Text Codec: ISO 2022-JP (JIS)}
*/

/*!
    \page codec-sjis.html
    \title Shift-JIS Text Codec
    \ingroup codecs

    The Shift-JIS codec provides conversion to and from Shift-JIS, an
    encoding of JIS X 0201 Latin, JIS X 0201 Kana and JIS X 0208.

    The environment variable \c UNICODEMAP_JP can be used to
    fine-tune the codec. The \l{ISO 2022-JP (JIS) Text Codec}
    documentation describes how to use this variable.

    Most of the code here was written by Serika Kurusugawa, a.k.a.
    Junji Takagi, and is included in Qt with the author's permission
    and the grateful thanks of the Qt team. Here is the
    copyright statement for the code as it was at the point of
    contribution. The subsequent modifications are covered by
    the usual copyright for Qt.

    \sa{Text Codec: Shift-JIS}
*/

/*!
    \page codec-tscii.html
    \title TSCII Text Codec
    \ingroup codecs

    The TSCII codec provides conversion to and from the Tamil TSCII
    encoding.

    TSCII, formally the Tamil Standard Code Information Interchange
    specification, is a commonly used charset for Tamils. The
    official page for the standard is \l{Information Technology in Tamil}

    Tamil uses composed Unicode which might cause some
    problems if you are using Unicode fonts instead of TSCII fonts.
    A Tamil codepage layout can be found on \l {Tamil Script Code}.

    Most of the code was written by Hans Petter Bieker and is
    included in Qt with the author's permission and the grateful
    thanks of the Qt team.

    \sa{Text Codec: TSCII}
*/
