Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/resource.py: 86%

14 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-01 06:54 +0000

1""" 

2 pygments.lexers.resource 

3 ~~~~~~~~~~~~~~~~~~~~~~~~ 

4 

5 Lexer for resource definition files. 

6 

7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. 

8 :license: BSD, see LICENSE for details. 

9""" 

10 

11import re 

12 

13from pygments.lexer import RegexLexer, bygroups, words 

14from pygments.token import Comment, String, Number, Operator, Text, \ 

15 Keyword, Name 

16 

17__all__ = ['ResourceLexer'] 

18 

19 

20class ResourceLexer(RegexLexer): 

21 """Lexer for `ICU Resource bundles 

22 <http://userguide.icu-project.org/locale/resources>`_. 

23 

24 .. versionadded:: 2.0 

25 """ 

26 name = 'ResourceBundle' 

27 aliases = ['resourcebundle', 'resource'] 

28 filenames = [] 

29 

30 _types = (':table', ':array', ':string', ':bin', ':import', ':intvector', 

31 ':int', ':alias') 

32 

33 flags = re.MULTILINE | re.IGNORECASE 

34 tokens = { 

35 'root': [ 

36 (r'//.*?$', Comment), 

37 (r'"', String, 'string'), 

38 (r'-?\d+', Number.Integer), 

39 (r'[,{}]', Operator), 

40 (r'([^\s{:]+)(\s*)(%s?)' % '|'.join(_types), 

41 bygroups(Name, Text, Keyword)), 

42 (r'\s+', Text), 

43 (words(_types), Keyword), 

44 ], 

45 'string': [ 

46 (r'(\\x[0-9a-f]{2}|\\u[0-9a-f]{4}|\\U00[0-9a-f]{6}|' 

47 r'\\[0-7]{1,3}|\\c.|\\[abtnvfre\'"?\\]|\\\{|[^"{\\])+', String), 

48 (r'\{', String.Escape, 'msgname'), 

49 (r'"', String, '#pop') 

50 ], 

51 'msgname': [ 

52 (r'([^{},]+)(\s*)', bygroups(Name, String.Escape), ('#pop', 'message')) 

53 ], 

54 'message': [ 

55 (r'\{', String.Escape, 'msgname'), 

56 (r'\}', String.Escape, '#pop'), 

57 (r'(,)(\s*)([a-z]+)(\s*\})', 

58 bygroups(Operator, String.Escape, Keyword, String.Escape), '#pop'), 

59 (r'(,)(\s*)([a-z]+)(\s*)(,)(\s*)(offset)(\s*)(:)(\s*)(-?\d+)(\s*)', 

60 bygroups(Operator, String.Escape, Keyword, String.Escape, Operator, 

61 String.Escape, Operator.Word, String.Escape, Operator, 

62 String.Escape, Number.Integer, String.Escape), 'choice'), 

63 (r'(,)(\s*)([a-z]+)(\s*)(,)(\s*)', 

64 bygroups(Operator, String.Escape, Keyword, String.Escape, Operator, 

65 String.Escape), 'choice'), 

66 (r'\s+', String.Escape) 

67 ], 

68 'choice': [ 

69 (r'(=|<|>|<=|>=|!=)(-?\d+)(\s*\{)', 

70 bygroups(Operator, Number.Integer, String.Escape), 'message'), 

71 (r'([a-z]+)(\s*\{)', bygroups(Keyword.Type, String.Escape), 'str'), 

72 (r'\}', String.Escape, ('#pop', '#pop')), 

73 (r'\s+', String.Escape) 

74 ], 

75 'str': [ 

76 (r'\}', String.Escape, '#pop'), 

77 (r'\{', String.Escape, 'msgname'), 

78 (r'[^{}]+', String) 

79 ] 

80 } 

81 

82 def analyse_text(text): 

83 if text.startswith('root:table'): 

84 return 1.0