Coverage for gws-app/gws/spec/generator/strings.py: 91%

23 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-16 22:59 +0200

1import re 

2 

3from . import base, util 

4 

5 

6def collect(gen: base.Generator): 

7 strings_dct = {} 

8 

9 for typ in gen.serverTypes: 

10 _add_string(strings_dct, 'en', typ.name, typ.doc) 

11 if typ.enumDocs: 

12 for k, v in typ.enumDocs.items(): 

13 _add_string(strings_dct, 'en', typ.name + '.' + k, v) 

14 

15 for path in util.find_files(gen.rootDir, pattern=r'/strings(\..+)?\.ini$', deep=True): 

16 base.log.debug(f'parsing strings from {path!r}') 

17 d = util.parse_ini(util.read_file(path)) 

18 for lang, strs in d.items(): 

19 for uid, text in strs.items(): 

20 _add_string(strings_dct, lang, uid, text) 

21 

22 return strings_dct 

23 

24 

25def _add_string(strings_dct, lang, uid, text): 

26 """Add a docstring to the dict. 

27 

28 If the string starts with a [xx], override the given language. 

29 """ 

30 

31 text = (text or '').strip() 

32 m = re.match(r'^\[(\w\w)](.+)$', text) 

33 if m: 

34 lang = m.group(1) 

35 text = m.group(2).strip() 

36 strings_dct.setdefault(lang, {})[uid] = text.replace('\\n', '\n')