1 /** @file
2   Provides functions for language conversion between ISO 639-2 and RFC 4646 styles.
3 
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __LANGUAGE_LIB__
16 #define __LANGUAGE_LIB__
17 
18 /**
19   Converts an ISO 639-2 language code to an RFC 4646 language code.
20   If the ISO 639-2 language code has a corresponding ISO 639-1 code, then that ISO 639-1
21   code is returned in the out parameter. Else the original ISO 639-2 code is returned. The returned RFC 4646
22   language code is composed of only a primary language subtag.
23 
24   If Iso639Language is NULL, then ASSERT().
25   If Rfc4646Language is NULL, then ASSERT().
26 
27   @param[out] Rfc4646Language  Pointers to a buffer large enough for an ASCII string
28                                representing an RFC 4646 language code containing only
29                                either a ISO 639-1 or ISO 639-2 primary language subtag.
30                                This string is Null-terminated.
31   @param[in]  Iso639Language   The pointer to a 3-letter ASCII string that represents
32                                an ISO 639-2 language code. This string is not required
33                                to be Null-terminated.
34 
35   @retval TRUE                 The ISO 639-2 language code was converted to an ISO 639-1 code.
36   @retval FALSE                The language code does not have a corresponding ISO 639-1 code.
37 
38 **/
39 BOOLEAN
40 EFIAPI
41 ConvertIso639ToRfc4646 (
42   OUT CHAR8        *Rfc4646Language,
43   IN  CONST CHAR8  *Iso639Language
44   );
45 
46 /**
47   Converts an RFC 4646 language code to an ISO 639-2 language code. The primary language
48   subtag of the RFC 4646 code must be either an ISO 639-1 or 639-2 code. If the primary
49   language subtag is an ISO 639-1 code, then it is converted to its corresponding ISO 639-2
50   code (T code if applies). Else the ISO 639-2 code is returned.
51 
52   If Rfc4646Language is NULL, then ASSERT().
53   If Iso639Language is NULL, then ASSERT().
54 
55   @param[out] Iso639Language   Pointers to a buffer large enough for a 3-letter ASCII string
56                                representing an ISO 639-2 language code. The string
57                                is Null-terminated.
58   @param[in]  Rfc4646Language  The pointer to a RFC 4646 language code string.
59                                This string is terminated
60                                by a NULL or a ';' character.
61 
62   @retval TRUE                 Language code converted successfully.
63   @retval FALSE                The RFC 4646 language code is invalid or unsupported.
64 
65 **/
66 BOOLEAN
67 EFIAPI
68 ConvertRfc4646ToIso639 (
69   OUT CHAR8        *Iso639Language,
70   IN  CONST CHAR8  *Rfc4646Language
71   );
72 
73 /**
74   Converts ISO 639-2 language codes to RFC 4646 codes and returns the converted codes.
75   Caller is responsible for freeing the allocated buffer.
76 
77   If Iso639Languages is NULL, then ASSERT.
78 
79   @param[in] Iso639Languages  Pointers to Null-terminated ISO 639-2 language code strings containing
80                               one or more ISO 639-2 3-letter language codes.
81 
82   @retval NULL                Invalid ISO 639-2 language code found.
83   @retval NULL                Out of memory.
84   @return                     The pointer to the allocate buffer containing the
85                               Null-terminated converted language codes string.
86                               This string is composed of one or more RFC4646
87                               language codes each of which has only
88                               ISO 639-1 2-letter primary language subtag.
89 
90 **/
91 CHAR8 *
92 EFIAPI
93 ConvertLanguagesIso639ToRfc4646 (
94   IN CONST CHAR8  *Iso639Languages
95   );
96 
97 /**
98   Converts RFC 4646 language codes to ISO 639-2 codes and returns the converted codes.
99   The primary language subtag of the RFC 4646 code must be either an ISO 639-1 or 639-2 code.
100   Caller is responsible for freeing the allocated buffer.
101 
102   If Rfc4646Languages is NULL, then ASSERT.
103 
104   @param[in] Rfc4646Languages  Pointers to a Null-terminated RFC 4646 language codes
105                                string containing one or more RFC 4646 language codes.
106 
107   @retval NULL                 Invalid or unsupported RFC 4646 language code found.
108   @retval NULL                 Out of memory.
109   @return                      The pointer to the allocate buffer containing the
110                                Null-terminated converted language codes string.
111                                This string is composed of one or more ISO 639-2
112                                language codes.
113 
114 **/
115 CHAR8 *
116 EFIAPI
117 ConvertLanguagesRfc4646ToIso639 (
118   IN CONST CHAR8  *Rfc4646Languages
119   );
120 
121 
122 #endif
123