Skip to content

Commit

Permalink
add get_common_layouts to list highest ranked keyboard layouts across…
Browse files Browse the repository at this point in the history
… languages
  • Loading branch information
sdp5 committed Aug 14, 2020
1 parent 48d9fd4 commit ee69aa2
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ Functions in the public API:
language_name()
territory_name()
supports_ascii()
get_common_layouts()

Some examples to show the usage are found in the documentation
of the public functions in langtable.py.
Expand Down
57 changes: 57 additions & 0 deletions langtable/langtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -2263,6 +2263,57 @@ def supports_ascii(keyboardId=None):
return _keyboards_db[keyboardId].ascii
return True

def get_common_layouts(languageId=None, territoryId=None):
'''Returns highest ranked keyboard layout(s)
:param languageId: identifier for the language
:type languageId: string
:param territoryId: identifier for the territory
:type territoryId: string
:return: list of keyboard layouts
:rtype: list of str(s)
**Examples:**
>>> get_common_layouts()
['af(ps)', 'al', 'am', 'ara', 'az', 'ba', 'be(oss)', 'bg', 'br', 'bt', 'by', 'ca(eng)', 'ca(ike)', 'ch', 'cn', 'cn(ug)', 'cz', 'de(nodeadkeys)', 'dk', 'ee', 'es', 'es(ast)', 'es(cat)', 'et', 'fi', 'fo', 'fr(bre)', 'fr(oss)', 'gb', 'ge', 'gr', 'hr', 'hu', 'ie(CloGaelach)', 'il', 'in(eng)', 'ir', 'is', 'it', 'jp', 'ke', 'kg', 'kh', 'kr', 'kz', 'la', 'latam', 'lt', 'lv', 'ma(tifinagh)', 'mk', 'mm', 'mn', 'mt', 'mv', 'ng(hausa)', 'ng(igbo)', 'ng(yoruba)', 'no', 'np', 'ph', 'pk', 'pl', 'ro', 'rs', 'rs(latin)', 'ru', 'ru(bak)', 'ru(chm)', 'ru(cv)', 'ru(kom)', 'ru(os_winkeys)', 'ru(sah)', 'ru(tt)', 'ru(udm)', 'ru(xal)', 'se', 'si', 'sk', 'sn', 'syc', 'th', 'tj', 'tm', 'tr', 'tr(crh)', 'tr(ku)', 'tw', 'ua', 'us', 'us(altgr-intl)', 'us(euro)', 'us(intl)', 'uz', 'vn', 'za']
>>> get_common_layouts(languageId='fr')
['fr(oss)']
>>> get_common_layouts(territoryId='CA')
['ca(eng)']
>>> get_common_layouts(territoryId='FR')
['fr(oss)']
>>> get_common_layouts(languageId='fr', territoryId='CA')
['ca']
>>> get_common_layouts(languageId='fr', territoryId='FR')
['fr(oss)']
'''
highest_ranked_keyboards = list()
if not languageId and not territoryId:
for locale, language in _languages_db.items():
common_layout = None
keyboard_layouts = language.keyboards
if len(keyboard_layouts) == 1:
common_layout = [layout for layout in keyboard_layouts.keys()][0]
elif len(keyboard_layouts) >= 2:
sorted_layouts = [layout for layout, rank in sorted(
keyboard_layouts.items(), key=lambda item: item[1], reverse=True
)]
common_layout = sorted_layouts[0]
if common_layout and common_layout not in highest_ranked_keyboards:
highest_ranked_keyboards.append(common_layout)

kwargs = dict()
if languageId:
kwargs.update(dict(languageId=languageId))
if territoryId:
kwargs.update(dict(territoryId=territoryId))
common_layouts = list_keyboards(**kwargs)
if common_layouts:
highest_ranked_keyboards.append(common_layouts[0])

return sorted(highest_ranked_keyboards)

def version():
'''
Return version of langtable
Expand Down Expand Up @@ -2348,3 +2399,9 @@ def __del__(self):
import doctest
_init()
doctest.testmod()
# print(get_common_layouts())
# print(get_common_layouts(languageId='fr', territoryId='CA'))
# print(get_common_layouts(languageId='fr', territoryId='FR'))
# print(get_common_layouts(languageId='fr'))
# print(get_common_layouts(territoryId='CA'))
# print(get_common_layouts(territoryId='FR'))
13 changes: 13 additions & 0 deletions test_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def dummy():
>>> from langtable import _test_cldr_locale_pattern
>>> from langtable import supports_ascii
>>> from langtable import languageId
>>> from langtable import get_common_layouts
######################################################################
# Start of tests to reproduce the results from mangleLocale(inLocale) in anaconda, see:
Expand Down Expand Up @@ -2071,6 +2072,18 @@ def dummy():
>>> print(langtable.timezone_name(timezoneId='Pacific/Pago_Pago', languageIdQuery='ast')) # doctest: +NORMALIZE_WHITESPACE
Océanu Pacíficu/Pago Pago
>>> print(get_common_layouts()) # doctest: +NORMALIZE_WHITESPACE
['af(ps)', 'al', 'am', 'ara', 'az', 'ba', 'be(oss)', 'bg', 'br', 'bt', 'by', 'ca(eng)', 'ca(ike)', 'ch', 'cn', 'cn(ug)', 'cz', 'de(nodeadkeys)', 'dk', 'ee', 'es', 'es(ast)', 'es(cat)', 'et', 'fi', 'fo', 'fr(bre)', 'fr(oss)', 'gb', 'ge', 'gr', 'hr', 'hu', 'ie(CloGaelach)', 'il', 'in(eng)', 'ir', 'is', 'it', 'jp', 'ke', 'kg', 'kh', 'kr', 'kz', 'la', 'latam', 'lt', 'lv', 'ma(tifinagh)', 'mk', 'mm', 'mn', 'mt', 'mv', 'ng(hausa)', 'ng(igbo)', 'ng(yoruba)', 'no', 'np', 'ph', 'pk', 'pl', 'ro', 'rs', 'rs(latin)', 'ru', 'ru(bak)', 'ru(chm)', 'ru(cv)', 'ru(kom)', 'ru(os_winkeys)', 'ru(sah)', 'ru(tt)', 'ru(udm)', 'ru(xal)', 'se', 'si', 'sk', 'sn', 'syc', 'th', 'tj', 'tm', 'tr', 'tr(crh)', 'tr(ku)', 'tw', 'ua', 'us', 'us(altgr-intl)', 'us(euro)', 'us(intl)', 'uz', 'vn', 'za']
>>> print(get_common_layouts(languageId='fr')) # doctest: +NORMALIZE_WHITESPACE
['fr(oss)']
>>> print(get_common_layouts(territoryId='CA')) # doctest: +NORMALIZE_WHITESPACE
['ca(eng)']
>>> print(get_common_layouts(territoryId='FR')) # doctest: +NORMALIZE_WHITESPACE
['fr(oss)']
>>> print(get_common_layouts(languageId='fr', territoryId='CA')) # doctest: +NORMALIZE_WHITESPACE
['ca']
>>> print(get_common_layouts(languageId='fr', territoryId='FR')) # doctest: +NORMALIZE_WHITESPACE
['fr(oss)']
'''

if __name__ == "__main__":
Expand Down

0 comments on commit ee69aa2

Please sign in to comment.