/*
 * 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.
 *
 */

/*
 *
 * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
 *
 * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
 * YOU REALLY KNOW WHAT YOU'RE DOING.
 */

#ifndef __LELANGUAGES_H
#define __LELANGUAGES_H

#include "LETypes.h"

/**
 * A provisional list of language codes. For now,
 * this is just a list of languages which the LayoutEngine
 * supports.
 *
 * @draft ICU 3.0
 */

enum LanguageCodes {
    nullLanguageCode =  0,
    araLanguageCode =  1,
    asmLanguageCode =  2,
    benLanguageCode =  3,
    farLanguageCode =  4,
    gujLanguageCode =  5,
    hinLanguageCode =  6,
    iwrLanguageCode =  7,
    jiiLanguageCode =  8,
    janLanguageCode =  9,
    kanLanguageCode = 10,
    kokLanguageCode = 11,
    korLanguageCode = 12,
    kshLanguageCode = 13,
    malLanguageCode = 14,
    marLanguageCode = 15,
    mlrLanguageCode = 16,
    mniLanguageCode = 17,
    oriLanguageCode = 18,
    sanLanguageCode = 19,
    sndLanguageCode = 20,
    snhLanguageCode = 21,
    syrLanguageCode = 22,
    tamLanguageCode = 23,
    telLanguageCode = 24,
    thaLanguageCode = 25,
    urdLanguageCode = 26,
    zhpLanguageCode = 27,
    zhsLanguageCode = 28,
    zhtLanguageCode = 29,

    languageCodeCount = 30
};

#endif
