]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/Language.c
1. PI SMBIOS Checkin. Major change include:
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / Language.c
index 5b154e98ee18c958fda8117b85799881da737f1a..1e0eae366b4b4773364c84477307376fd443a129 100644 (file)
@@ -15,157 +15,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "Language.h"\r
 #include "FrontPage.h"\r
 \r
-//\r
-// Lookup table of ISO639-2 3 character language codes to ISO 639-1 2 character language codes\r
-// Each entry is 5 CHAR8 values long.  The first 3 CHAR8 values are the ISO 639-2 code.\r
-// The last 2 CHAR8 values are the ISO 639-1 code.\r
-//\r
-GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 Iso639ToRfc3066ConversionTable[] =\r
-"\\r
-aaraa\\r
-abkab\\r
-afraf\\r
-amham\\r
-araar\\r
-asmas\\r
-aymay\\r
-azeaz\\r
-bakba\\r
-belbe\\r
-benbn\\r
-bihbh\\r
-bisbi\\r
-bodbo\\r
-brebr\\r
-bulbg\\r
-catca\\r
-cescs\\r
-corkw\\r
-cosco\\r
-cymcy\\r
-danda\\r
-deude\\r
-dzodz\\r
-ellel\\r
-engen\\r
-epoeo\\r
-estet\\r
-euseu\\r
-faofo\\r
-fasfa\\r
-fijfj\\r
-finfi\\r
-frafr\\r
-fryfy\\r
-gaiga\\r
-gdhgd\\r
-glggl\\r
-grngn\\r
-gujgu\\r
-hauha\\r
-hebhe\\r
-hinhi\\r
-hrvhr\\r
-hunhu\\r
-hyehy\\r
-ikuiu\\r
-ileie\\r
-inaia\\r
-indid\\r
-ipkik\\r
-islis\\r
-itait\\r
-jawjw\\r
-jpnja\\r
-kalkl\\r
-kankn\\r
-kasks\\r
-katka\\r
-kazkk\\r
-khmkm\\r
-kinrw\\r
-kirky\\r
-korko\\r
-kurku\\r
-laolo\\r
-latla\\r
-lavlv\\r
-linln\\r
-litlt\\r
-ltzlb\\r
-malml\\r
-marmr\\r
-mkdmk\\r
-mlgmg\\r
-mltmt\\r
-molmo\\r
-monmn\\r
-mrimi\\r
-msams\\r
-myamy\\r
-nauna\\r
-nepne\\r
-nldnl\\r
-norno\\r
-ocioc\\r
-ormom\\r
-panpa\\r
-polpl\\r
-porpt\\r
-pusps\\r
-quequ\\r
-rohrm\\r
-ronro\\r
-runrn\\r
-rusru\\r
-sagsg\\r
-sansa\\r
-sinsi\\r
-slksk\\r
-slvsl\\r
-smise\\r
-smosm\\r
-snasn\\r
-sndsd\\r
-somso\\r
-sotst\\r
-spaes\\r
-sqisq\\r
-srpsr\\r
-sswss\\r
-sunsu\\r
-swasw\\r
-swesv\\r
-tamta\\r
-tattt\\r
-telte\\r
-tgktg\\r
-tgltl\\r
-thath\\r
-tsnts\\r
-tuktk\\r
-twitw\\r
-uigug\\r
-ukruk\\r
-urdur\\r
-uzbuz\\r
-vievi\\r
-volvo\\r
-wolwo\\r
-xhoxh\\r
-yidyi\\r
-zhaza\\r
-zhozh\\r
-zulzu\\r
-";\r
-\r
-#define NARROW_GLYPH_NUMBER 8\r
-#define WIDE_GLYPH_NUMBER   75\r
-\r
 EFI_GUID  mFontPackageGuid = {\r
   0x78941450, 0x90ab, 0x4fb1, {0xb7, 0x5f, 0x58, 0x92, 0x14, 0xe2, 0x4a, 0xc}\r
 };\r
 \r
+#define NARROW_GLYPH_NUMBER 8\r
+#define WIDE_GLYPH_NUMBER   75\r
+\r
 typedef struct {\r
   ///\r
   /// This 4-bytes total array length is required by HiiAddPackages()\r
@@ -415,37 +271,44 @@ ExportFonts (
 }\r
 \r
 /**\r
-  Convert language code from RFC3066 to ISO639-2.\r
+  Get next language from language code list (with separator ';').\r
 \r
-  @param  LanguageRfc3066        RFC3066 language code.\r
-  @param  LanguageIso639         ISO639-2 language code.\r
+  If LangCode is NULL, then ASSERT.\r
+  If Lang is NULL, then ASSERT.\r
 \r
-  @retval EFI_SUCCESS            Language code converted.\r
-  @retval EFI_NOT_FOUND          Language code not found.\r
+  @param  LangCode    On input: point to first language in the list. On\r
+                                 output: point to next language in the list, or\r
+                                 NULL if no more language in the list.\r
+  @param  Lang           The first language in the list.\r
 \r
 **/\r
-EFI_STATUS\r
+VOID\r
 EFIAPI\r
-ConvertRfc3066LanguageToIso639Language (\r
-  IN  CHAR8   *LanguageRfc3066,\r
-  OUT CHAR8   *LanguageIso639\r
+GetNextLanguage (\r
+  IN OUT CHAR8      **LangCode,\r
+  OUT CHAR8         *Lang\r
   )\r
 {\r
   UINTN  Index;\r
+  CHAR8  *StringPtr;\r
 \r
-  if ((LanguageRfc3066[2] != '-') && (LanguageRfc3066[2] != 0)) {\r
-    CopyMem (LanguageIso639, LanguageRfc3066, 3);\r
-    return EFI_SUCCESS;\r
-  }\r
+  ASSERT (LangCode != NULL);\r
+  ASSERT (*LangCode != NULL);\r
+  ASSERT (Lang != NULL);\r
 \r
-  for (Index = 0; Iso639ToRfc3066ConversionTable[Index] != 0; Index += 5) {\r
-    if (CompareMem (LanguageRfc3066, &Iso639ToRfc3066ConversionTable[Index + 3], 2) == 0) {\r
-      CopyMem (LanguageIso639, &Iso639ToRfc3066ConversionTable[Index], 3);\r
-      return EFI_SUCCESS;\r
-    }\r
+  Index = 0;\r
+  StringPtr = *LangCode;\r
+  while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {\r
+    Index++;\r
   }\r
 \r
-  return EFI_NOT_FOUND;\r
+  CopyMem (Lang, StringPtr, Index);\r
+  Lang[Index] = 0;\r
+\r
+  if (StringPtr[Index] == ';') {\r
+    Index++;\r
+  }\r
+  *LangCode = StringPtr + Index;\r
 }\r
 \r
 /**\r
@@ -463,7 +326,7 @@ InitializeLanguage (
   EFI_STATUS  Status;\r
   UINTN       Size;\r
   CHAR8       *Lang;\r
-  CHAR8       LangCode[ISO_639_2_ENTRY_SIZE];\r
+  CHAR8       LangCode[ISO_639_2_ENTRY_SIZE + 1];\r
   CHAR8       *LangCodes;\r
   CHAR8       *PlatformLang;\r
   CHAR8       *PlatformLangCodes;\r
@@ -482,7 +345,7 @@ InitializeLanguage (
                       L"LangCodes",\r
                       &gEfiGlobalVariableGuid,\r
                       EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                      AsciiStrLen (LangCodes),\r
+                      AsciiStrSize (LangCodes),\r
                       LangCodes\r
                       );\r
     }\r
@@ -506,7 +369,7 @@ InitializeLanguage (
     //\r
     // Find current LangCode from Lang NV Variable\r
     //\r
-    Size = ISO_639_2_ENTRY_SIZE;\r
+    Size = ISO_639_2_ENTRY_SIZE + 1;\r
     Status = gRT->GetVariable (\r
                     L"Lang",\r
                     &gEfiGlobalVariableGuid,\r
@@ -535,7 +398,7 @@ InitializeLanguage (
                       L"Lang",\r
                       &gEfiGlobalVariableGuid,\r
                       EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                      ISO_639_2_ENTRY_SIZE,\r
+                      ISO_639_2_ENTRY_SIZE + 1,\r
                       Lang\r
                       );\r
     }\r