git subrepo clone https://github.com/libretro/libretro-common.git deps/libretro-common
[pcsx_rearmed.git] / deps / libretro-common / samples / core_options / example_categories / conversion_scripts / core_option_regex.py
1 import re
2
3 # 0: full struct; 1: up to & including first []; 2: content between first {}
4 p_struct = re.compile(r'(struct\s*[a-zA-Z0-9_\s]+\[])\s*'
5                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+)\s*)*'
6                       r'=\s*'  # =
7                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+)\s*)*'
8                       r'{((?:.|[\r\n])*?)\{\s*NULL,\s*NULL,\s*NULL\s*(?:.|[\r\n])*?},?(?:.|[\r\n])*?};')  # captures full struct, it's beginning and it's content
9 # 0: type name[]; 1: type; 2: name
10 p_type_name = re.compile(r'(retro_core_option_[a-zA-Z0-9_]+)\s*'
11                          r'(option_cats[a-z_]{0,8}|option_defs([a-z_]{0,8}))\s*\[]')
12 # 0: full option; 1: key; 2: description; 3: additional info; 4: key/value pairs
13 p_option = re.compile(r'{\s*'  # opening braces
14                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
15                       r'(\".*?\"|'  # key start; group 1
16                       r'[a-zA-Z0-9_]+\s*\((?:.|[\r\n])*?\)|'
17                       r'[a-zA-Z0-9_]+\s*\[(?:.|[\r\n])*?]|'
18                       r'[a-zA-Z0-9_]+\s*\".*?\")\s*'  # key end
19                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
20                       r',\s*'  # comma
21                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
22                       r'(\".*?\")\s*'  # description; group 2
23                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
24                       r',\s*'  # comma
25                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
26                       r'((?:'  # group 3
27                       r'(?:NULL|\"(?:.|[\r\n])*?\")\s*'  # description in category, info, info in category, category
28                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
29                       r',?\s*'  # comma
30                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
31                       r')+)'
32                       r'(?:'  # defs only start
33                       r'{\s*'  # opening braces
34                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
35                       r'((?:'  # key/value pairs start; group 4
36                       r'{\s*'  # opening braces
37                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
38                       r'(?:NULL|\".*?\")\s*'  # option key
39                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
40                       r',\s*'  # comma
41                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
42                       r'(?:NULL|\".*?\")\s*'  # option value
43                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
44                       r'}\s*'  # closing braces
45                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
46                       r',?\s*'  # comma
47                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
48                       r')*)'  # key/value pairs end
49                       r'}\s*'  # closing braces
50                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
51                       r',?\s*'  # comma
52                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
53                       r'(?:'  # defaults start
54                       r'(?:NULL|\".*?\")\s*'  # default value
55                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
56                       r',?\s*'  # comma
57                       r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
58                       r')*'  # defaults end
59                       r')?'  # defs only end
60                       r'},')  # closing braces
61 # analyse option group 3
62 p_info = re.compile(r'(NULL|\"(?:.|[\r\n])*?\")\s*'  # description in category, info, info in category, category
63                     r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
64                     r',\s*'  # comma
65                     r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*')
66 # analyse option group 4
67 p_key_value = re.compile(r'{\s*'  # opening braces
68                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
69                          r'(NULL|\".*?\")\s*'  # option key; 1
70                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
71                          r',\s*'  # comma
72                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
73                          r'(NULL|\".*?\")\s*'  # option value; 2
74                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
75                          r'}\s*'  # closing braces
76                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
77                          r',?\s*'  # comma
78                          r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*')
79
80 p_masked = re.compile(r'([A-Z_][A-Z0-9_]+)\s*(\"(?:"\s*"|\\\s*|.)*\")')