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
CommitLineData
3719602c
PC
1import re
2
3# 0: full struct; 1: up to & including first []; 2: content between first {}
4p_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
10p_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
13p_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
62p_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
67p_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
80p_masked = re.compile(r'([A-Z_][A-Z0-9_]+)\s*(\"(?:"\s*"|\\\s*|.)*\")')