]> git.sesse.net Git - vlc/blob - src/text/iso_lang.c
Move encoding and language stuff to their own directory
[vlc] / src / text / 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 the VideoLAN team
5  * $Id$
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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 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( !memcmp( p_lang->psz_iso639_1, psz_code, 2 ) )
58         {
59 # if 0
60             if( *p_lang->psz_native_name )
61             {
62                 return p_lang->psz_native_name;
63             }
64 #endif
65
66             return _( p_lang->psz_eng_name );
67         }
68     }
69
70     return _( "Unknown" );
71 }
72
73 const iso639_lang_t * GetLang_1( const char * psz_code )
74 {
75     const iso639_lang_t *p_lang;
76
77     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
78         if( !strncmp( p_lang->psz_iso639_1, psz_code, 2 ) )
79             return p_lang;
80
81     return &unknown_language;
82 }
83
84 const iso639_lang_t * GetLang_2T( const char * psz_code )
85 {
86     const iso639_lang_t *p_lang;
87
88     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
89         if( !strncmp( p_lang->psz_iso639_2T, psz_code, 3 ) )
90             return p_lang;
91
92     return &unknown_language;
93 }
94
95 const iso639_lang_t * GetLang_2B( const char * psz_code )
96 {
97     const iso639_lang_t *p_lang;
98
99     for( p_lang = p_languages; p_lang->psz_eng_name; p_lang++ )
100         if( !strncmp( p_lang->psz_iso639_2B, psz_code, 3 ) )
101             return p_lang;
102
103     return &unknown_language;
104 }
105