(rules, d, var={})
| 855 | |
| 856 | |
| 857 | def applyrules(rules, d, var={}): |
| 858 | ret = {} |
| 859 | if isinstance(rules, list): |
| 860 | for r in rules: |
| 861 | rr = applyrules(r, d, var) |
| 862 | ret = dictappend(ret, rr) |
| 863 | if '_break' in rr: |
| 864 | break |
| 865 | return ret |
| 866 | if '_check' in rules and (not rules['_check'](var)): |
| 867 | return ret |
| 868 | if 'need' in rules: |
| 869 | res = applyrules({'needs': rules['need']}, d, var) |
| 870 | if 'needs' in res: |
| 871 | cfuncs.append_needs(res['needs']) |
| 872 | |
| 873 | for k in rules.keys(): |
| 874 | if k == 'separatorsfor': |
| 875 | ret[k] = rules[k] |
| 876 | continue |
| 877 | if isinstance(rules[k], str): |
| 878 | ret[k] = replace(rules[k], d) |
| 879 | elif isinstance(rules[k], list): |
| 880 | ret[k] = [] |
| 881 | for i in rules[k]: |
| 882 | ar = applyrules({k: i}, d, var) |
| 883 | if k in ar: |
| 884 | ret[k].append(ar[k]) |
| 885 | elif k[0] == '_': |
| 886 | continue |
| 887 | elif isinstance(rules[k], dict): |
| 888 | ret[k] = [] |
| 889 | for k1 in rules[k].keys(): |
| 890 | if isinstance(k1, types.FunctionType) and k1(var): |
| 891 | if isinstance(rules[k][k1], list): |
| 892 | for i in rules[k][k1]: |
| 893 | if isinstance(i, dict): |
| 894 | res = applyrules({'supertext': i}, d, var) |
| 895 | i = res.get('supertext', '') |
| 896 | ret[k].append(replace(i, d)) |
| 897 | else: |
| 898 | i = rules[k][k1] |
| 899 | if isinstance(i, dict): |
| 900 | res = applyrules({'supertext': i}, d) |
| 901 | i = res.get('supertext', '') |
| 902 | ret[k].append(replace(i, d)) |
| 903 | else: |
| 904 | errmess(f'applyrules: ignoring rule {repr(rules[k])}.\n') |
| 905 | if isinstance(ret[k], list): |
| 906 | if len(ret[k]) == 1: |
| 907 | ret[k] = ret[k][0] |
| 908 | if ret[k] == []: |
| 909 | del ret[k] |
| 910 | return ret |
| 911 | |
| 912 | |
| 913 | _f2py_module_name_match = re.compile(r'\s*python\s*module\s*(?P<name>[\w_]+)', |
no test coverage detected
searching dependent graphs…