Add type annotations to LocaleDataWriter

Task-number: QTBUG-128634
Pick-to: 6.8
Change-Id: I63e4db06d92e7c2457a802f93372545f9ae749f1
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Mate Barany 2024-09-30 14:33:10 +02:00
parent beda65ba9f
commit 001f8b3fc9

View File

@ -21,7 +21,7 @@ from typing import Callable, Iterator, Optional
from qlocalexml import Locale, QLocaleXmlReader from qlocalexml import Locale, QLocaleXmlReader
from localetools import * from localetools import *
from iso639_3 import LanguageCodeData from iso639_3 import LanguageCodeData, LanguageCodeEntry
from zonedata import utcIdList, windowsIdList from zonedata import utcIdList, windowsIdList
@ -603,23 +603,25 @@ class LocaleZoneDataWriter (LocaleSourceEditor):
class LocaleDataWriter (LocaleSourceEditor): class LocaleDataWriter (LocaleSourceEditor):
def likelySubtags(self, likely): def likelySubtags(self, likely: Iterator[tuple[str, tuple, str, tuple]]) -> None:
# Sort order of likely is taken care of upstream. # Sort order of likely is taken care of upstream.
self.writer.write('static constexpr QLocaleId likely_subtags[] = {\n') self.writer.write('static constexpr QLocaleId likely_subtags[] = {\n')
# have and give are both triplets of ints
for had, have, got, give in likely: for had, have, got, give in likely:
self.writer.write(' {{ {:3d}, {:3d}, {:3d} }}'.format(*have)) self.writer.write(' {{ {:3d}, {:3d}, {:3d} }}'.format(*have))
self.writer.write(', {{ {:3d}, {:3d}, {:3d} }},'.format(*give)) self.writer.write(', {{ {:3d}, {:3d}, {:3d} }},'.format(*give))
self.writer.write(f' // {had} -> {got}\n') self.writer.write(f' // {had} -> {got}\n')
self.writer.write('};\n\n') self.writer.write('};\n\n')
def localeIndex(self, indices): def localeIndex(self, indices: Iterator[tuple[int, str]]) -> None:
self.writer.write('static constexpr quint16 locale_index[] = {\n') self.writer.write('static constexpr quint16 locale_index[] = {\n')
for index, name in indices: for index, name in indices:
self.writer.write(f'{index:6d}, // {name}\n') self.writer.write(f'{index:6d}, // {name}\n')
self.writer.write(' 0 // trailing 0\n') self.writer.write(' 0 // trailing 0\n')
self.writer.write('};\n\n') self.writer.write('};\n\n')
def localeData(self, locales, names): def localeData(self, locales: dict[tuple[int, int, int], Locale],
names: list[tuple[int, int, int]]) -> None:
list_pattern_part_data = StringData('list_pattern_part_data') list_pattern_part_data = StringData('list_pattern_part_data')
single_character_data = StringData('single_character_data') single_character_data = StringData('single_character_data')
date_format_data = StringData('date_format_data') date_format_data = StringData('date_format_data')
@ -724,9 +726,10 @@ class LocaleDataWriter (LocaleSourceEditor):
',{:6d}' * 3, ',{:6d}' * 3,
' }}')).format ' }}')).format
for key in names: for key in names:
locale = locales[key] locale: Locale = locales[key]
# Sequence of StringDataToken: # Sequence of StringDataToken:
ranges = (tuple(list_pattern_part_data.append(p) for p in # 5 entries: ranges: tuple[StringDataToken, ...] = (
tuple(list_pattern_part_data.append(p) for p in # 5 entries:
(locale.listPatternPartStart, locale.listPatternPartMiddle, (locale.listPatternPartStart, locale.listPatternPartMiddle,
locale.listPatternPartEnd, locale.listPatternPartTwo, locale.listPatternPartEnd, locale.listPatternPartTwo,
locale.listDelim)) + locale.listDelim)) +
@ -783,7 +786,7 @@ class LocaleDataWriter (LocaleSourceEditor):
data.write(self.writer.write) data.write(self.writer.write)
@staticmethod @staticmethod
def __writeNameData(out, book, form): def __writeNameData(out, book: dict[int, tuple[str, str, str]], form: str) -> None:
out(f'static constexpr char {form}_name_list[] =\n') out(f'static constexpr char {form}_name_list[] =\n')
out('"Default\\0"\n') out('"Default\\0"\n')
for key, value in book.items(): for key, value in book.items():
@ -807,7 +810,7 @@ class LocaleDataWriter (LocaleSourceEditor):
out('};\n\n') out('};\n\n')
@staticmethod @staticmethod
def __writeCodeList(out, book, form, width): def __writeCodeList(out, book: dict[int, tuple[str, str, str]], form: str, width: int) -> None:
out(f'static constexpr unsigned char {form}_code_list[] =\n') out(f'static constexpr unsigned char {form}_code_list[] =\n')
for key, value in book.items(): for key, value in book.items():
code = value[1] code = value[1]
@ -815,27 +818,28 @@ class LocaleDataWriter (LocaleSourceEditor):
out(f'"{code}" // {value[0]}\n') out(f'"{code}" // {value[0]}\n')
out(';\n\n') out(';\n\n')
def languageNaming(self, languages, code_data: LanguageCodeData): def languageNaming(self, languages: dict[int, tuple[str, str, str]],
code_data: LanguageCodeData) -> None:
self.__writeNameData(self.writer.write, languages, 'language') self.__writeNameData(self.writer.write, languages, 'language')
out = self.writer.write out: Callable[[str], int] = self.writer.write
out(f'constexpr std::array<LanguageCodeEntry, {len(languages)}> languageCodeList {{\n') out(f'constexpr std::array<LanguageCodeEntry, {len(languages)}> languageCodeList {{\n')
def q(val: Optional[str], size: int) -> str: def q(val: Optional[str], size: int) -> str:
"""Quote the value and adjust the result for tabular view.""" """Quote the value and adjust the result for tabular view."""
s = '' if val is None else ', '.join(f"'{c}'" for c in val) s: str = '' if val is None else ', '.join(f"'{c}'" for c in val)
return f'{{{s}}}' if size == 0 else f'{{{s}}},'.ljust(size * 5 + 2) return f'{{{s}}}' if size == 0 else f'{{{s}}},'.ljust(size * 5 + 2)
for key, value in languages.items(): for key, value in languages.items():
code = value[1] code: str = value[1]
if key < 2: if key < 2:
result = code_data.query('und') result: LanguageCodeEntry = code_data.query('und')
else: else:
result = code_data.query(code) result: LanguageCodeEntry = code_data.query(code)
assert code == result.id() assert code == result.id()
assert result is not None assert result is not None
codeString = q(result.part1Code, 2) codeString: str = q(result.part1Code, 2)
codeString += q(result.part2BCode, 3) codeString += q(result.part2BCode, 3)
codeString += q(result.part2TCode, 3) codeString += q(result.part2TCode, 3)
codeString += q(result.part3Code, 0) codeString += q(result.part3Code, 0)
@ -843,11 +847,11 @@ class LocaleDataWriter (LocaleSourceEditor):
out('};\n\n') out('};\n\n')
def scriptNaming(self, scripts): def scriptNaming(self, scripts: dict[int, tuple[str, str, str]]) -> None:
self.__writeNameData(self.writer.write, scripts, 'script') self.__writeNameData(self.writer.write, scripts, 'script')
self.__writeCodeList(self.writer.write, scripts, 'script', 4) self.__writeCodeList(self.writer.write, scripts, 'script', 4)
def territoryNaming(self, territories): def territoryNaming(self, territories: dict[int, tuple[str, str, str]]) -> None:
self.__writeNameData(self.writer.write, territories, 'territory') self.__writeNameData(self.writer.write, territories, 'territory')
self.__writeCodeList(self.writer.write, territories, 'territory', 3) self.__writeCodeList(self.writer.write, territories, 'territory', 3)