]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c
Roll back changes to apply GetBestLanguage() in HiiDataBase. Exact language match...
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / Strings.c
index daf652c1ab7b460293b99a13f9606d135163271c..d83750bc9b8f16bd70e89e7a19dffee64e50140b 100644 (file)
@@ -15,299 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "HiiDatabase.h"\r
 \r
-typedef struct {\r
-  CHAR8 *Iso639;\r
-  CHAR8 *Rfc4646;\r
-} ISO639TORFC4646MAP;\r
-\r
-ISO639TORFC4646MAP Iso639ToRfc4646Map [] = {\r
-    {"eng", "en-US"},\r
-    {"fra", "fr-FR"},\r
-};\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 Iso639ToRfc4646ConversionTable[] =\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
-CHAR8 *\r
-ConvertIso639ToRfc4646 (\r
-  CHAR8 *Iso638Lang\r
-  )\r
-{\r
-  UINTN Index;\r
-  CHAR8 AsciiLanguage[ISO_639_2_ENTRY_SIZE + 1];\r
-  \r
-  AsciiStrnCpy (AsciiLanguage, Iso638Lang, sizeof (AsciiLanguage));\r
-  for (Index = 0; Index < ISO_639_2_ENTRY_SIZE + 1; Index ++) {\r
-       if (AsciiLanguage [Index] == 0) {\r
-               break;\r
-       } else if (AsciiLanguage [Index] >= 'A' && AsciiLanguage [Index] <= 'Z') {\r
-               AsciiLanguage [Index] = (CHAR8) (AsciiLanguage [Index] - 'A' + 'a');\r
-       }\r
-  }\r
-\r
-  for (Index = 0; Index < sizeof (Iso639ToRfc4646Map) / sizeof (Iso639ToRfc4646Map[0]); Index++) {\r
-    if (AsciiStrnCmp (AsciiLanguage, Iso639ToRfc4646Map[Index].Iso639, AsciiStrSize (AsciiLanguage)) == 0) {\r
-      return Iso639ToRfc4646Map[Index].Rfc4646;\r
-    }\r
-  }\r
-\r
-  return (CHAR8 *) NULL;\r
-}\r
-\r
-/**\r
-  Convert language code from RFC4646 to ISO639-2.\r
-\r
-  @param  LanguageRfc4646        RFC4646 language code.\r
-  @param  LanguageIso639         ISO639-2 language code.\r
-\r
-  @retval EFI_SUCCESS            Language code converted.\r
-  @retval EFI_NOT_FOUND          Language code not found.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConvertRfc4646LanguageToIso639Language (\r
-  IN  CHAR8   *LanguageRfc4646,\r
-  OUT CHAR8   *LanguageIso639\r
-  )\r
-{\r
-  UINTN  Index;\r
-\r
-  if ((LanguageRfc4646[2] != '-') && (LanguageRfc4646[2] != 0)) {\r
-    CopyMem (LanguageIso639, LanguageRfc4646, 3);\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  for (Index = 0; Iso639ToRfc4646ConversionTable[Index] != 0; Index += 5) {\r
-    if (CompareMem (LanguageRfc4646, &Iso639ToRfc4646ConversionTable[Index + 3], 2) == 0) {\r
-      CopyMem (LanguageIso639, &Iso639ToRfc4646ConversionTable[Index], 3);\r
-      return EFI_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return EFI_NOT_FOUND;\r
-}\r
-\r
-\r
-/**\r
-  Convert language code from ISO639-2 to RFC4646 and return the converted language.\r
-  Caller is responsible for freeing the allocated buffer.\r
-\r
-  LanguageIso639 contain a single ISO639-2 code such as\r
-  "eng" or "fra".\r
-\r
-  If LanguageIso639 is NULL, then ASSERT.\r
-  If LanguageRfc4646 is NULL, then ASSERT.\r
-\r
-  @param  LanguageIso639         ISO639-2 language code.\r
-\r
-  @return the allocated buffer or NULL, if the language is not found.\r
-\r
-**/\r
-CHAR8*\r
-EFIAPI\r
-ConvertIso639LanguageToRfc4646Language (\r
-  IN  CONST CHAR8   *LanguageIso639\r
-  )\r
-{\r
-  UINTN Index;\r
-  CHAR8 *Rfc4646Language;\r
-  \r
-  for (Index = 0; Iso639ToRfc4646ConversionTable[Index] != 0; Index += 5) {\r
-    if (CompareMem (LanguageIso639, &Iso639ToRfc4646ConversionTable[Index], 3) == 0) {\r
-      Rfc4646Language = AllocateZeroPool (3);\r
-      if (Rfc4646Language != NULL) {\r
-        Rfc4646Language = CopyMem (Rfc4646Language, &Iso639ToRfc4646ConversionTable[Index + 3], 2);\r
-      }\r
-      return Rfc4646Language;\r
-    }\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-/**\r
-  Get next language from language code list (with separator ';').\r
-\r
-  If LangCode is NULL, then ASSERT.\r
-  If Lang is NULL, then ASSERT.\r
-\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
-VOID\r
-EFIAPI\r
-GetNextLanguage (\r
-  IN OUT CHAR8      **LangCode,\r
-  OUT CHAR8         *Lang\r
-  )\r
-{\r
-  UINTN  Index;\r
-  CHAR8  *StringPtr;\r
-\r
-  ASSERT (LangCode != NULL);\r
-  ASSERT (*LangCode != NULL);\r
-  ASSERT (Lang != NULL);\r
-\r
-  Index = 0;\r
-  StringPtr = *LangCode;\r
-  while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {\r
-    Index++;\r
-  }\r
-\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
   Test if all of the characters in a string have corresponding font characters.\r
 \r
@@ -468,7 +175,7 @@ HiiNewString (
     ZeroMem (LanguageCopy, sizeof (LanguageCopy));\r
     CopyMem (LanguageCopy, Language, ISO_639_2_ENTRY_SIZE * sizeof (CHAR16));\r
     UnicodeStrToAsciiStr (LanguageCopy, AsciiLanguage);\r
-    Rfc4646AsciiLanguage = ConvertIso639ToRfc4646 (AsciiLanguage);\r
+    Rfc4646AsciiLanguage = ConvertLanguagesIso639ToRfc4646 (AsciiLanguage);\r
     ASSERT (Rfc4646AsciiLanguage != NULL);\r
   }\r
 \r
@@ -600,7 +307,6 @@ HiiThunkGetString (
 \r
   Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
 \r
-  Iso639AsciiLanguage = NULL;\r
   Rfc4646AsciiLanguage = NULL;\r
 \r
   if (LanguageString != NULL) {\r
@@ -614,7 +320,8 @@ HiiThunkGetString (
     // Caller of Framework HII Interface uses the Language Identification String defined \r
     // in Iso639. So map it to the Language Identifier defined in RFC4646.\r
     //\r
-    Rfc4646AsciiLanguage = ConvertIso639ToRfc4646 (Iso639AsciiLanguage);\r
+    Rfc4646AsciiLanguage = ConvertLanguagesIso639ToRfc4646 (Iso639AsciiLanguage);\r
+    FreePool (Iso639AsciiLanguage);\r
 \r
     //\r
     // If Rfc4646AsciiLanguage is NULL, more language mapping must be added to \r
@@ -630,67 +337,56 @@ HiiThunkGetString (
     goto Done;\r
   }\r
 \r
-  if (Rfc4646AsciiLanguage == NULL) {\r
-    //\r
-    // Get the languages that the package specified by HiiHandle supports\r
-    //\r
-    SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);\r
-    if (SupportedLanguages == NULL) {\r
-      goto Error2;\r
-    }\r
+  //\r
+  // Get the languages that the package specified by HiiHandle supports\r
+  //\r
+  SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);\r
+  if (SupportedLanguages == NULL) {\r
+    goto Error2;\r
+  }\r
 \r
-    //\r
-    // Get the current platform language setting\r
-    //\r
-    PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
-    if (PlatformLanguage == NULL) {\r
-      goto Error1;\r
-    }\r
+  //\r
+  // Get the current platform language setting\r
+  //\r
+  PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
+  if (PlatformLanguage == NULL) {\r
+    goto Error1;\r
+  }\r
 \r
-    //\r
-    // Get the best matching language from SupportedLanguages\r
-    //\r
-    BestLanguage = GetBestLanguage (\r
-                     SupportedLanguages, \r
-                     FALSE,                // RFC 4646 mode\r
-                     PlatformLanguage,     // Next highest priority\r
-                     SupportedLanguages,   // Lowest priority \r
-                     NULL\r
-                     );\r
-    if (BestLanguage == NULL) {\r
-      FreePool (PlatformLanguage);\r
+  //\r
+  // Get the best matching language from SupportedLanguages\r
+  //\r
+  BestLanguage = GetBestLanguage (\r
+                   SupportedLanguages, \r
+                   FALSE,                // RFC 4646 mode\r
+                   (Rfc4646AsciiLanguage != NULL) ? Rfc4646AsciiLanguage : "",\r
+                   PlatformLanguage,     // Next highest priority\r
+                   SupportedLanguages,   // Lowest priority \r
+                   NULL\r
+                   );\r
+  if (BestLanguage == NULL) {\r
+    FreePool (PlatformLanguage);\r
 Error1:\r
-      FreePool (SupportedLanguages);\r
+    FreePool (SupportedLanguages);\r
 Error2:\r
-      Status = EFI_INVALID_PARAMETER;\r
-      goto Done;\r
-    }\r
-\r
-    Status = mHiiStringProtocol->GetString (\r
-                                 mHiiStringProtocol,\r
-                                 BestLanguage,\r
-                                 UefiHiiHandle,\r
-                                 Token,\r
-                                 StringBuffer,\r
-                                 BufferLengthTemp,\r
-                                 NULL\r
-                                 );\r
-    FreePool (BestLanguage);\r
-  } else {\r
-    Status = mHiiStringProtocol->GetString (\r
-                                 mHiiStringProtocol,\r
-                                 Rfc4646AsciiLanguage,\r
-                                 UefiHiiHandle,\r
-                                 Token,\r
-                                 StringBuffer,\r
-                                 BufferLengthTemp,\r
-                                 NULL\r
-                                 );\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
+  Status = mHiiStringProtocol->GetString (\r
+                               mHiiStringProtocol,\r
+                               BestLanguage,\r
+                               UefiHiiHandle,\r
+                               Token,\r
+                               StringBuffer,\r
+                               BufferLengthTemp,\r
+                               NULL\r
+                               );\r
+  FreePool (BestLanguage);\r
+\r
 Done:\r
-       if (Iso639AsciiLanguage != NULL) {\r
-    FreePool (Iso639AsciiLanguage);\r
+       if (Rfc4646AsciiLanguage != NULL) {\r
+    FreePool (Rfc4646AsciiLanguage);\r
   }\r
   \r
   return Status;\r