+## GetFilteredLanguage\r
+#\r
+# apply get best language rules to the UNI language code list\r
+#\r
+# @param UniLanguageList: language code definition list in *.UNI file\r
+# @param LanguageFilterList: language code filter list of RFC4646 format in DSC file\r
+#\r
+# @retval UniLanguageListFiltered: the filtered language code\r
+#\r
+def GetFilteredLanguage(UniLanguageList, LanguageFilterList):\r
+ UniLanguageListFiltered = []\r
+ # if filter list is empty, then consider there is no filter\r
+ if LanguageFilterList == []:\r
+ UniLanguageListFiltered = UniLanguageList\r
+ return UniLanguageListFiltered\r
+ for Language in LanguageFilterList:\r
+ # first check for exact match\r
+ if Language in UniLanguageList:\r
+ if Language not in UniLanguageListFiltered:\r
+ UniLanguageListFiltered += [Language]\r
+ # find the first one with the same/equivalent primary tag\r
+ else:\r
+ if Language.find('-') != -1:\r
+ PrimaryTag = Language[0:Language.find('-')].lower()\r
+ else:\r
+ PrimaryTag = Language\r
+ \r
+ if len(PrimaryTag) == 3:\r
+ PrimaryTag = LangConvTable.get(PrimaryTag)\r
+ \r
+ for UniLanguage in UniLanguageList:\r
+ if UniLanguage.find('-') != -1:\r
+ UniLanguagePrimaryTag = UniLanguage[0:UniLanguage.find('-')].lower()\r
+ else:\r
+ UniLanguagePrimaryTag = UniLanguage\r
+ \r
+ if len(UniLanguagePrimaryTag) == 3:\r
+ UniLanguagePrimaryTag = LangConvTable.get(UniLanguagePrimaryTag)\r
+\r
+ if PrimaryTag == UniLanguagePrimaryTag:\r
+ if UniLanguage not in UniLanguageListFiltered:\r
+ UniLanguageListFiltered += [UniLanguage]\r
+ break\r
+ else:\r
+ # Here is rule 3 for "get best language"\r
+ # If tag is not listed in the Unicode file, the default ("en") tag should be used for that language\r
+ # for better processing, find the one that best suit for it.\r
+ DefaultTag = 'en'\r
+ if DefaultTag not in UniLanguageListFiltered:\r
+ # check whether language code with primary code equivalent with DefaultTag already in the list, if so, use that\r
+ for UniLanguage in UniLanguageList:\r
+ if UniLanguage.startswith('en-') or UniLanguage.startswith('eng-'):\r
+ if UniLanguage not in UniLanguageListFiltered:\r
+ UniLanguageListFiltered += [UniLanguage]\r
+ break\r
+ else:\r
+ UniLanguageListFiltered += [DefaultTag]\r
+ return UniLanguageListFiltered\r
+\r