]> git.sesse.net Git - vlc/blob - src/misc/iso_lang.c
Updated copyrights in libvlc
[vlc] / src / misc / iso_lang.c
1 /*****************************************************************************
2  * iso_lang.c: function to decode language code (in dvd or a52 for instance).
3  *****************************************************************************
4  * Copyright (C) 1998-2004 VideoLAN
5  * $Id: iso_lang.c,v 1.11 2004/01/06 12:02:06 zorglub Exp $
6  *
7  * Author: Stéphane Borel <stef@via.ecp.fr>
8  *         Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
23  *****************************************************************************/
24
25 /*****************************************************************************
26  * Preamble
27  *****************************************************************************/
28 #include <stdio.h>
29
30 #include <vlc/vlc.h>
31
32 #include "iso_lang.h"
33
34 /*****************************************************************************
35  * Local tables
36  *****************************************************************************/
37 #include "iso-639_def.h"
38
39 static const iso639_lang_t unknown_language =
40     { "Unknown", "Unknown", "??", "???", "???" };
41
42 /*****************************************************************************
43  * DecodeLanguage: gives the long language name from the two-letter
44  *                 ISO-639 code
45  *****************************************************************************/
46 const char * DecodeLanguage( uint16_t i_code )
47 {
48     const iso639_lang_t * p_lang;
49     uint8_t psz_code[3];
50
51     psz_code[0] = i_code >> 8;
52     psz_code[1] = i_code & 0xff;
53     psz_code[2] = '\0';
54
55     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
56     {
57         if( !strncmp( p_lang->psz_iso639_1, psz_code, 2 ) )
58         {
59             if( *p_lang->psz_native_name )
60             {
61                 return p_lang->psz_native_name;
62             }
63
64             return p_lang->psz_eng_name;
65         }
66     }
67
68     return "Unknown";
69 }
70
71 const iso639_lang_t * GetLang_1( const char * psz_code )
72 {
73     const iso639_lang_t *p_lang;
74
75     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
76         if( !strncmp( p_lang->psz_iso639_1, psz_code, 2 ) )
77             return p_lang;
78
79     return &unknown_language;
80 }
81
82 const iso639_lang_t * GetLang_2T( const char * psz_code )
83 {
84     const iso639_lang_t *p_lang;
85
86     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
87         if( !strncmp( p_lang->psz_iso639_2T, psz_code, 3 ) )
88             return p_lang;
89
90     return &unknown_language;
91 }
92
93 const iso639_lang_t * GetLang_2B( const char * psz_code )
94 {
95     const iso639_lang_t *p_lang;
96
97     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
98         if( !strncmp( p_lang->psz_iso639_2B, psz_code, 3 ) )
99             return p_lang;
100
101     return &unknown_language;
102 }
103