(rules, d, var={})
| 833 | |
| 834 | |
| 835 | def applyrules(rules, d, var={}): |
| 836 | ret = {} |
| 837 | if isinstance(rules, list): |
| 838 | for r in rules: |
| 839 | rr = applyrules(r, d, var) |
| 840 | ret = dictappend(ret, rr) |
| 841 | if '_break' in rr: |
| 842 | break |
| 843 | return ret |
| 844 | if '_check' in rules and (not rules['_check'](var)): |
| 845 | return ret |
| 846 | if 'need' in rules: |
| 847 | res = applyrules({'needs': rules['need']}, d, var) |
| 848 | if 'needs' in res: |
| 849 | cfuncs.append_needs(res['needs']) |
| 850 | |
| 851 | for k in rules.keys(): |
| 852 | if k == 'separatorsfor': |
| 853 | ret[k] = rules[k] |
| 854 | continue |
| 855 | if isinstance(rules[k], str): |
| 856 | ret[k] = replace(rules[k], d) |
| 857 | elif isinstance(rules[k], list): |
| 858 | ret[k] = [] |
| 859 | for i in rules[k]: |
| 860 | ar = applyrules({k: i}, d, var) |
| 861 | if k in ar: |
| 862 | ret[k].append(ar[k]) |
| 863 | elif k[0] == '_': |
| 864 | continue |
| 865 | elif isinstance(rules[k], dict): |
| 866 | ret[k] = [] |
| 867 | for k1 in rules[k].keys(): |
| 868 | if isinstance(k1, types.FunctionType) and k1(var): |
| 869 | if isinstance(rules[k][k1], list): |
| 870 | for i in rules[k][k1]: |
| 871 | if isinstance(i, dict): |
| 872 | res = applyrules({'supertext': i}, d, var) |
| 873 | if 'supertext' in res: |
| 874 | i = res['supertext'] |
| 875 | else: |
| 876 | i = '' |
| 877 | ret[k].append(replace(i, d)) |
| 878 | else: |
| 879 | i = rules[k][k1] |
| 880 | if isinstance(i, dict): |
| 881 | res = applyrules({'supertext': i}, d) |
| 882 | if 'supertext' in res: |
| 883 | i = res['supertext'] |
| 884 | else: |
| 885 | i = '' |
| 886 | ret[k].append(replace(i, d)) |
| 887 | else: |
| 888 | errmess('applyrules: ignoring rule %s.\n' % repr(rules[k])) |
| 889 | if isinstance(ret[k], list): |
| 890 | if len(ret[k]) == 1: |
| 891 | ret[k] = ret[k][0] |
| 892 | if ret[k] == []: |
no test coverage detected